diff --git a/dist/clay-kiln-edit.css b/dist/clay-kiln-edit.css
new file mode 100644
index 000000000..617768e71
--- /dev/null
+++ b/dist/clay-kiln-edit.css
@@ -0,0 +1,10528 @@
+
+.component-selector-wrapper {
+ position: relative;
+}
+.mini-selector {
+ z-index: 1000000010;
+ opacity: 1;
+ pointer-events: none;
+ position: absolute;
+}
+.mini-selector.selector-left, .mini-selector.selector-right {
+ height: 100%;
+ min-height: 20px;
+ top: 0;
+}
+.mini-selector.selector-top, .mini-selector.selector-bottom {
+ left: 0;
+ min-width: 20px;
+ width: 100%;
+}
+.mini-selector.selector-left {
+ border-right: 3px solid #607d8b;
+ right: calc(100% + 5px);
+}
+.mini-selector.selector-right {
+ border-left: 3px solid #607d8b;
+ left: calc(100% + 5px);
+}
+.mini-selector.selector-top {
+ border-bottom: 3px solid #607d8b;
+ bottom: calc(100% + 5px);
+}
+.mini-selector.selector-bottom {
+ border-top: 3px solid #607d8b;
+ top: calc(100% + 5px);
+}
+.mini-selector.selector-hidden {
+ display: none;
+}
+.selector-fade-enter-active, .selector-fade-leave-active {
+ -webkit-transition: opacity 150ms linear;
+ transition: opacity 150ms linear;
+}
+.selector-fade-enter, .selector-fade-leave-to {
+ opacity: 0;
+}
+.quick-bar {
+ z-index: 1000000000;
+ background: rgba(255, 255, 255, 0.95);
+ border: 1px solid #607d8b;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ pointer-events: all;
+ position: absolute;
+}
+.quick-bar:after {
+ content: '';
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+.quick-bar.selector-left, .quick-bar.selector-right {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: auto;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+.quick-bar.selector-top, .quick-bar.selector-bottom {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ width: auto;
+}
+.quick-bar.selector-left {
+ border-right: none;
+ right: 0;
+}
+.quick-bar.selector-left:after {
+ border-right: 1px solid #607d8b;
+ height: calc(100% + 2px);
+ right: -1px;
+ top: 0;
+}
+.quick-bar.selector-right {
+ border-left: none;
+ left: 0;
+}
+.quick-bar.selector-right:after {
+ border-left: 1px solid #607d8b;
+ height: calc(100% + 2px);
+ left: -1px;
+ top: 0;
+}
+.quick-bar.selector-top {
+ border-bottom: none;
+ bottom: 0;
+}
+.quick-bar.selector-top:after {
+ border-bottom: 1px solid #607d8b;
+ bottom: -1px;
+ left: 0;
+ width: calc(100% + 2px);
+}
+.quick-bar.selector-bottom {
+ border-top: none;
+ top: 0;
+}
+.quick-bar.selector-bottom:after {
+ border-top: 1px solid #607d8b;
+ left: 0;
+ top: -1px;
+ width: calc(100% + 2px);
+}
+.quick-bar .quick-bar-button {
+ border-radius: 0;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 46px;
+ -ms-flex: 0 0 46px;
+ flex: 0 0 46px;
+ height: 46px;
+ width: 46px;
+ z-index: 1;
+}
+.selector-left .quick-bar .quick-bar-button.quick-bar-add,
+ .selector-left .quick-bar .quick-bar-button.quick-bar-replace,
+ .selector-left .quick-bar .quick-bar-button.quick-bar-dupe,
+ .selector-right .quick-bar .quick-bar-button.quick-bar-add,
+ .selector-right .quick-bar .quick-bar-button.quick-bar-replace,
+ .selector-right .quick-bar .quick-bar-button.quick-bar-dupe {
+ border-top: 1px solid #607d8b;
+}
+.selector-top .quick-bar .quick-bar-button.quick-bar-add,
+ .selector-top .quick-bar .quick-bar-button.quick-bar-replace,
+ .selector-top .quick-bar .quick-bar-button.quick-bar-dupe,
+ .selector-bottom .quick-bar .quick-bar-button.quick-bar-add,
+ .selector-bottom .quick-bar .quick-bar-button.quick-bar-replace,
+ .selector-bottom .quick-bar .quick-bar-button.quick-bar-dupe {
+ border-left: 1px solid #607d8b;
+}
+.mini-selector-inactive {
+ z-index: 1000000010;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ background: #212121;
+ border-radius: 2px;
+ color: #ffffff;
+ font-size: 13px;
+ left: 50%;
+ line-height: 1.2;
+ max-width: 150%;
+ opacity: .8;
+ padding: 4px 8px;
+ pointer-events: none;
+ position: absolute;
+ top: 20px;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+}
+
+.ui-icon-button {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: none;
+ border-radius: 50%;
+ border: none;
+ cursor: pointer;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+}
+.ui-icon-button,
+ .ui-icon-button .ui-icon-button__focus-ring {
+ height: 2.25rem;
+ width: 2.25rem;
+}
+body[modality="keyboard"] .ui-icon-button:focus .ui-icon-button__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-icon-button::-moz-focus-inner {
+ border: 0;
+}
+.ui-icon-button.is-loading .ui-icon-button__icon {
+ opacity: 0;
+}
+.ui-icon-button.is-disabled {
+ cursor: default;
+ opacity: 0.6;
+}
+.ui-icon-button__icon {
+ height: initial;
+ opacity: 1;
+ position: relative;
+ -webkit-transition-delay: 0.1s;
+ transition-delay: 0.1s;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ width: 100%;
+ z-index: 1;
+}
+.ui-icon-button__focus-ring {
+ border-radius: 50%;
+ height: 2.25rem;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;
+ width: 2.25rem;
+}
+.ui-progress-circular.ui-icon-button__progress {
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+}
+.ui-icon-button--size-small,
+.ui-icon-button--size-small .ui-icon-button__focus-ring {
+ height: 2rem;
+ width: 2rem;
+}
+.ui-icon-button--size-small .ui-icon {
+ font-size: 1.125rem;
+}
+.ui-icon-button--size-large,
+.ui-icon-button--size-large .ui-icon-button__focus-ring {
+ height: 3rem;
+ width: 3rem;
+}
+.ui-icon-button--color-black,
+.ui-icon-button--color-white {
+ background-color: transparent;
+}
+.ui-icon-button--color-black:hover:not(.is-disabled), .ui-icon-button--color-black.has-dropdown-open,
+ .ui-icon-button--color-white:hover:not(.is-disabled),
+ .ui-icon-button--color-white.has-dropdown-open {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.ui-icon-button--color-black .ui-icon-button__focus-ring,
+ .ui-icon-button--color-white .ui-icon-button__focus-ring {
+ background-color: rgba(0, 0, 0, 0.15);
+}
+.ui-icon-button--color-black {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-icon-button--color-black .ui-icon-button__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-icon-button--color-white {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-icon-button--color-white .ui-icon-button__icon {
+ color: white;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-default {
+ background-color: #eeeeee;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-default:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-default.has-dropdown-open {
+ background-color: #dbdbdb;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-default .ui-icon-button__focus-ring {
+ background-color: #c8c8c8;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-default .ui-ripple-ink__ink {
+ opacity: 0.2;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-default .ui-icon-button__icon {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-icon-button--type-primary.ui-icon-button--color-primary, .ui-icon-button--type-primary.ui-icon-button--color-accent, .ui-icon-button--type-primary.ui-icon-button--color-green, .ui-icon-button--type-primary.ui-icon-button--color-orange, .ui-icon-button--type-primary.ui-icon-button--color-red {
+ color: white;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-primary .ui-ripple-ink__ink, .ui-icon-button--type-primary.ui-icon-button--color-accent .ui-ripple-ink__ink, .ui-icon-button--type-primary.ui-icon-button--color-green .ui-ripple-ink__ink, .ui-icon-button--type-primary.ui-icon-button--color-orange .ui-ripple-ink__ink, .ui-icon-button--type-primary.ui-icon-button--color-red .ui-ripple-ink__ink {
+ opacity: 0.4;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-primary {
+ background-color: #607d8b;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-primary:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-primary.has-dropdown-open {
+ background-color: #4b626d;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-primary .ui-icon-button__focus-ring {
+ background-color: #41545e;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-accent {
+ background-color: #1976d2;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-accent:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-accent.has-dropdown-open {
+ background-color: #145ca4;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-accent .ui-icon-button__focus-ring {
+ background-color: #11508e;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-green {
+ background-color: #4caf50;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-green:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-green.has-dropdown-open {
+ background-color: #3d8b40;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-green .ui-icon-button__focus-ring {
+ background-color: #357a38;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-orange {
+ background-color: #ff9800;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-orange:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-orange.has-dropdown-open {
+ background-color: #cc7a00;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-orange .ui-icon-button__focus-ring {
+ background-color: #b36a00;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-red {
+ background-color: #f44336;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-red:hover:not(.is-disabled), .ui-icon-button--type-primary.ui-icon-button--color-red.has-dropdown-open {
+ background-color: #ea1c0d;
+}
+.ui-icon-button--type-primary.ui-icon-button--color-red .ui-icon-button__focus-ring {
+ background-color: #d2190b;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-default {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-default .ui-icon-button__icon {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-default:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-default.has-dropdown-open, .ui-icon-button--type-secondary.ui-icon-button--color-primary:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-primary.has-dropdown-open, .ui-icon-button--type-secondary.ui-icon-button--color-accent:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-accent.has-dropdown-open, .ui-icon-button--type-secondary.ui-icon-button--color-green:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-green.has-dropdown-open, .ui-icon-button--type-secondary.ui-icon-button--color-orange:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-orange.has-dropdown-open, .ui-icon-button--type-secondary.ui-icon-button--color-red:hover:not(.is-disabled), .ui-icon-button--type-secondary.ui-icon-button--color-red.has-dropdown-open {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-default .ui-icon-button__focus-ring, .ui-icon-button--type-secondary.ui-icon-button--color-primary .ui-icon-button__focus-ring, .ui-icon-button--type-secondary.ui-icon-button--color-accent .ui-icon-button__focus-ring, .ui-icon-button--type-secondary.ui-icon-button--color-green .ui-icon-button__focus-ring, .ui-icon-button--type-secondary.ui-icon-button--color-orange .ui-icon-button__focus-ring, .ui-icon-button--type-secondary.ui-icon-button--color-red .ui-icon-button__focus-ring {
+ background-color: rgba(0, 0, 0, 0.15);
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-primary {
+ color: #607d8b;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-primary .ui-icon-button__icon {
+ color: #607d8b;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-accent {
+ color: #1976d2;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-accent .ui-icon-button__icon {
+ color: #1976d2;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-green {
+ color: #43a047;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-green .ui-icon-button__icon {
+ color: #43a047;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-orange {
+ color: #ff9800;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-orange .ui-icon-button__icon {
+ color: #ff9800;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-red {
+ color: #f44336;
+}
+.ui-icon-button--type-secondary.ui-icon-button--color-red .ui-icon-button__icon {
+ color: #f44336;
+}
+
+.ui-icon {
+ cursor: inherit;
+ display: inline-block;
+ font-size: 1.5rem;
+ height: 1em;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: middle;
+ width: 1em;
+}
+.ui-icon svg {
+ display: block;
+ fill: currentColor;
+ height: 1em;
+ margin: 0;
+ padding: 0;
+ width: 1em;
+}
+
+.ui-popover {
+ background-color: white;
+ outline: none;
+}
+.ui-popover.is-raised {
+ -webkit-box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);
+}
+.ui-popover .ui-menu {
+ border: none;
+}
+.ui-popover__focus-redirector {
+ opacity: 0;
+ position: absolute;
+}
+.drop-element {
+ display: none;
+ max-height: 100%;
+ max-width: 100%;
+ opacity: 0;
+ position: absolute;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ z-index: 1000000040;
+}
+.drop-element, .drop-element:after, .drop-element:before,
+ .drop-element *,
+ .drop-element *:after,
+ .drop-element *:before {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.drop-element.drop-open {
+ display: block;
+}
+.drop-element.drop-after-open {
+ opacity: 1;
+}
+
+.ui-progress-circular {
+ position: relative;
+}
+.ui-progress-circular__determinate {
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.ui-progress-circular__determinate-path {
+ stroke-dashoffset: 0;
+ -webkit-transition: stroke-dashoffset 0.3s;
+ transition: stroke-dashoffset 0.3s;
+}
+.ui-progress-circular__indeterminate {
+ -webkit-animation: ui-progress-circular-rotate 0.7s linear infinite;
+ animation: ui-progress-circular-rotate 0.7s linear infinite;
+ bottom: 0;
+ height: 100%;
+ left: 0;
+ margin: auto;
+ position: absolute;
+ right: 0;
+ top: 0;
+ -webkit-transform-origin: center center;
+ -ms-transform-origin: center center;
+ transform-origin: center center;
+ width: 100%;
+}
+.ui-progress-circular__indeterminate-path {
+ stroke-dasharray: 89,200;
+ stroke-dashoffset: -35px;
+ stroke-linecap: round;
+}
+.ui-progress-circular--color-multi-color .ui-progress-circular__determinate-path {
+ stroke: #607d8b;
+}
+.ui-progress-circular--color-multi-color .ui-progress-circular__indeterminate-path {
+ -webkit-animation: ui-progress-circular-color 6s ease-in-out infinite;
+ animation: ui-progress-circular-color 6s ease-in-out infinite;
+}
+.ui-progress-circular--color-primary .ui-progress-circular__determinate-path,
+.ui-progress-circular--color-primary .ui-progress-circular__indeterminate-path {
+ stroke: #607d8b;
+}
+.ui-progress-circular--color-accent .ui-progress-circular__determinate-path,
+.ui-progress-circular--color-accent .ui-progress-circular__indeterminate-path {
+ stroke: #1976d2;
+}
+.ui-progress-circular--color-black .ui-progress-circular__determinate-path,
+.ui-progress-circular--color-black .ui-progress-circular__indeterminate-path {
+ stroke: #212121;
+}
+.ui-progress-circular--color-white .ui-progress-circular__determinate-path,
+.ui-progress-circular--color-white .ui-progress-circular__indeterminate-path {
+ stroke: white;
+}
+.ui-progress-circular--transition-fade-enter-active,
+.ui-progress-circular--transition-fade-leave-active {
+ -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
+ transition: opacity 0.3s ease, -webkit-transform 0.3s ease;
+ transition: opacity 0.3s ease, transform 0.3s ease;
+ transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;
+}
+.ui-progress-circular--transition-fade-enter,
+.ui-progress-circular--transition-fade-leave-active {
+ opacity: 0;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+}
+@-webkit-keyframes ui-progress-circular-rotate {
+100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+}
+}
+@keyframes ui-progress-circular-rotate {
+100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+}
+}
+@-webkit-keyframes ui-progress-circular-color {
+0%,
+ 100% {
+ stroke: #f44336;
+}
+40% {
+ stroke: #2196f3;
+}
+66% {
+ stroke: #4caf50;
+}
+80%,
+ 90% {
+ stroke: #ff9800;
+}
+}
+@keyframes ui-progress-circular-color {
+0%,
+ 100% {
+ stroke: #f44336;
+}
+40% {
+ stroke: #2196f3;
+}
+66% {
+ stroke: #4caf50;
+}
+80%,
+ 90% {
+ stroke: #ff9800;
+}
+}
+
+.ui-ripple-ink {
+ border-radius: inherit;
+ bottom: 0;
+ display: block;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+ -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+}
+.ui-ripple-ink__ink {
+ background-clip: padding-box;
+ background-color: currentColor;
+ border-radius: 50%;
+ height: 0;
+ opacity: 0.2;
+ pointer-events: none;
+ position: absolute;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: opacity 0.6s ease-out, -webkit-transform 0.6s ease-out;
+ transition: opacity 0.6s ease-out, -webkit-transform 0.6s ease-out;
+ transition: transform 0.6s ease-out, opacity 0.6s ease-out;
+ transition: transform 0.6s ease-out, opacity 0.6s ease-out, -webkit-transform 0.6s ease-out;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 0;
+}
+.ui-ripple-ink__ink.is-held {
+ opacity: 0.4;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-ripple-ink__ink.is-done {
+ opacity: 0 !important;
+}
+
+.ui-tooltip {
+ line-height: 1;
+}
+.tooltip-element,
+.tooltip-element:after,
+.tooltip-element:before,
+.tooltip-element *,
+.tooltip-element *:after,
+.tooltip-element *:before {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.tooltip-element {
+ display: none;
+ opacity: 0;
+ position: absolute;
+ -webkit-transition: opacity 0.2s;
+ transition: opacity 0.2s;
+}
+.tooltip-element.tooltip-open {
+ display: block;
+}
+.tooltip-element.tooltip-after-open {
+ opacity: 1;
+}
+.tooltip-element.ui-tooltip--theme-default {
+ max-height: 100%;
+ max-width: 100%;
+ pointer-events: none;
+ z-index: 1000000050;
+}
+.tooltip-element.ui-tooltip--theme-default .tooltip-content {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: #212121;
+ border-radius: 0.125rem;
+ color: white;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: inherit;
+ font-size: 0.8125rem;
+ height: 1.625rem;
+ line-height: 1;
+ opacity: 0.9;
+ padding: 0 0.5rem;
+ position: relative;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content {
+ margin-bottom: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content {
+ margin-top: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-right.tooltip-element-attached-middle .tooltip-content {
+ margin-right: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-left.tooltip-element-attached-middle .tooltip-content {
+ margin-left: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content {
+ margin-top: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content {
+ margin-top: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content {
+ margin-bottom: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content {
+ margin-bottom: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content {
+ margin-right: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content {
+ margin-left: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content {
+ margin-right: 0.25rem;
+}
+.tooltip-element.ui-tooltip--theme-default.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content {
+ margin-left: 0.25rem;
+}
+
+.component-selector-wrapper *[data-editable] {
+ cursor: pointer;
+}
+.component-selector-wrapper p[data-editable],
+.component-selector-wrapper blockquote[data-editable] {
+ cursor: text;
+}
+.component-selector-wrapper *[data-editable].kiln-internals {
+ cursor: default;
+}
+.kiln-collapsed > *:not(.kiln-placeholder) {
+ display: none;
+}
+.kiln-placeholder {
+ -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.kiln-placeholder .placeholder-label,
+ .kiln-placeholder .placeholder-icon,
+ .kiln-placeholder .placeholder-text {
+ -webkit-transition: color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.kiln-permanent-placeholder,
+.kiln-placeholder,
+.kiln-inactive-placeholder {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border-radius: 2px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ padding: 16px 24px;
+ position: relative;
+ width: 100%;
+}
+.kiln-permanent-placeholder .placeholder-add-component,
+ .kiln-placeholder .placeholder-add-component,
+ .kiln-inactive-placeholder .placeholder-add-component {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+.kiln-permanent-placeholder .placeholder-label,
+ .kiln-placeholder .placeholder-label,
+ .kiln-inactive-placeholder .placeholder-label {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+.kiln-permanent-placeholder .placeholder-label-collapsible,
+ .kiln-placeholder .placeholder-label-collapsible,
+ .kiln-inactive-placeholder .placeholder-label-collapsible {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.kiln-permanent-placeholder .placeholder-icon,
+ .kiln-placeholder .placeholder-icon,
+ .kiln-inactive-placeholder .placeholder-icon {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+.kiln-permanent-placeholder .placeholder-text,
+ .kiln-placeholder .placeholder-text,
+ .kiln-inactive-placeholder .placeholder-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 auto;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ line-height: 18px;
+ text-align: center;
+}
+.collapsible-component-list > .kiln-placeholder {
+ height: 68px !important;
+ margin: 0 0 20px;
+ min-height: 68px !important;
+}
+.kiln-permanent-placeholder {
+ background-color: #eceff1;
+ cursor: pointer;
+}
+.kiln-permanent-placeholder .placeholder-label {
+ color: #607d8b;
+}
+.kiln-permanent-placeholder .placeholder-icon {
+ color: #607d8b;
+}
+.kiln-permanent-placeholder .placeholder-text {
+ color: #607d8b;
+}
+.kiln-inactive-placeholder {
+ background-color: #fafafa;
+ cursor: not-allowed;
+}
+.kiln-inactive-placeholder .placeholder-label {
+ color: #9e9e9e;
+}
+.kiln-inactive-placeholder .placeholder-icon {
+ color: #9e9e9e;
+}
+.kiln-inactive-placeholder .placeholder-text {
+ color: #9e9e9e;
+}
+.kiln-placeholder {
+ background-color: #e3f2fd;
+}
+.kiln-placeholder .placeholder-label {
+ color: #1976d2;
+}
+.kiln-placeholder .placeholder-icon {
+ color: #1976d2;
+}
+.kiln-placeholder .placeholder-text {
+ color: #1976d2;
+}
+.kiln-placeholder.kiln-error-placeholder {
+ background-color: #ffebee;
+}
+.kiln-placeholder.kiln-error-placeholder .placeholder-label {
+ color: #f44336;
+}
+.kiln-placeholder.kiln-error-placeholder .placeholder-icon {
+ color: #f44336;
+}
+.kiln-placeholder.kiln-error-placeholder .placeholder-text {
+ color: #f44336;
+}
+
+.ui-button {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: none;
+ border-radius: 0.125rem;
+ border: none;
+ cursor: pointer;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.875rem;
+ font-weight: 500;
+ height: 2.25rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ letter-spacing: 0.02em;
+ line-height: 1;
+ min-width: 5rem;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ position: relative;
+ text-transform: uppercase;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+}
+.ui-button::-moz-focus-inner {
+ border: 0;
+}
+.ui-button.has-focus-ring:focus .ui-button__focus-ring,
+ body[modality="keyboard"] .ui-button:focus .ui-button__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-button.is-raised {
+ -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ -webkit-transition: -webkit-box-shadow 0.1s;
+ transition: -webkit-box-shadow 0.1s;
+ transition: box-shadow 0.1s;
+ transition: box-shadow 0.1s, -webkit-box-shadow 0.1s;
+}
+.ui-button.is-raised.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button.is-raised:focus {
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.22), 0 3px 6px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.22), 0 3px 6px rgba(0, 0, 0, 0.3);
+}
+.ui-button.is-loading .ui-button__content {
+ opacity: 0;
+}
+.ui-button.is-disabled {
+ cursor: default;
+ opacity: 0.6;
+}
+.ui-button__content {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ position: relative;
+ -webkit-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+ z-index: 1;
+}
+.ui-button__icon {
+ margin-left: -0.25rem;
+ margin-right: 0.375rem;
+ margin-top: -0.125rem;
+}
+.ui-button__dropdown-icon {
+ font-size: 1.125rem;
+ margin-left: 0.125rem;
+ margin-right: -0.375rem;
+}
+.ui-button__focus-ring {
+ background-color: rgba(0, 0, 0, 0.12);
+ border-radius: 50%;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-progress-circular.ui-button__progress {
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+}
+.ui-button-group {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+.ui-button--icon-position-right .ui-button__icon {
+ margin-left: 0.375rem;
+ margin-right: -0.25rem;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.ui-button--size-small {
+ font-size: 0.875rem;
+ height: 2rem;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+.ui-button--size-small .ui-button__icon {
+ margin-left: 0;
+ margin-top: 0;
+}
+.ui-button--size-small .ui-button__icon .ui-icon {
+ font-size: 1.125rem;
+}
+.ui-button--size-small .ui-button__dropdown-icon {
+ margin-right: -0.25rem;
+}
+.ui-button--size-small.ui-button--icon-position-right .ui-button__icon {
+ margin-left: 0.375rem;
+ margin-right: 0;
+}
+.ui-button--size-large {
+ font-size: 1rem;
+ height: 3rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.ui-button--size-large .ui-button__icon {
+ margin-left: -0.25rem;
+ margin-right: 0.5rem;
+}
+.ui-button--size-large .ui-button__dropdown-icon {
+ font-size: 1.5rem;
+ margin-left: 0.25rem;
+}
+.ui-button--size-large.ui-button--icon-position-right .ui-button__icon {
+ margin-left: 0.5rem;
+ margin-right: -0.25rem;
+}
+.ui-button--type-primary.ui-button--color-default {
+ background-color: #eeeeee;
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-button--type-primary.ui-button--color-default:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-default.has-dropdown-open, .ui-button--type-primary.ui-button--color-default.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-default:focus {
+ background-color: #dbdbdb;
+}
+.ui-button--type-primary.ui-button--color-default .ui-ripple-ink__ink {
+ opacity: 0.2;
+}
+.ui-button--type-primary.ui-button--color-default .ui-button__icon,
+ .ui-button--type-primary.ui-button--color-default .ui-button__dropdown-icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-button--type-primary.ui-button--color-primary, .ui-button--type-primary.ui-button--color-accent, .ui-button--type-primary.ui-button--color-green, .ui-button--type-primary.ui-button--color-orange, .ui-button--type-primary.ui-button--color-red {
+ color: white;
+}
+.ui-button--type-primary.ui-button--color-primary .ui-ripple-ink__ink, .ui-button--type-primary.ui-button--color-accent .ui-ripple-ink__ink, .ui-button--type-primary.ui-button--color-green .ui-ripple-ink__ink, .ui-button--type-primary.ui-button--color-orange .ui-ripple-ink__ink, .ui-button--type-primary.ui-button--color-red .ui-ripple-ink__ink {
+ opacity: 0.4;
+}
+.ui-button--type-primary.ui-button--color-primary {
+ background-color: #607d8b;
+}
+.ui-button--type-primary.ui-button--color-primary:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-primary.has-dropdown-open, .ui-button--type-primary.ui-button--color-primary.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-primary:focus {
+ background-color: #4b626d;
+}
+.ui-button--type-primary.ui-button--color-accent {
+ background-color: #1976d2;
+}
+.ui-button--type-primary.ui-button--color-accent:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-accent.has-dropdown-open, .ui-button--type-primary.ui-button--color-accent.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-accent:focus {
+ background-color: #145ca4;
+}
+.ui-button--type-primary.ui-button--color-green {
+ background-color: #4caf50;
+}
+.ui-button--type-primary.ui-button--color-green:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-green.has-dropdown-open, .ui-button--type-primary.ui-button--color-green.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-green:focus {
+ background-color: #3d8b40;
+}
+.ui-button--type-primary.ui-button--color-orange {
+ background-color: #ff9800;
+}
+.ui-button--type-primary.ui-button--color-orange:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-orange.has-dropdown-open, .ui-button--type-primary.ui-button--color-orange.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-orange:focus {
+ background-color: #cc7a00;
+}
+.ui-button--type-primary.ui-button--color-red {
+ background-color: #f44336;
+}
+.ui-button--type-primary.ui-button--color-red:hover:not(.is-disabled), .ui-button--type-primary.ui-button--color-red.has-dropdown-open, .ui-button--type-primary.ui-button--color-red.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-primary.ui-button--color-red:focus {
+ background-color: #ea1c0d;
+}
+.ui-button--type-secondary {
+ background-color: transparent;
+}
+.ui-button--type-secondary:hover:not(.is-disabled), .ui-button--type-secondary.has-dropdown-open, .ui-button--type-secondary.has-focus-ring:focus,
+ body[modality="keyboard"] .ui-button--type-secondary:focus {
+ background-color: #e6e6e6;
+}
+.ui-button--type-secondary.ui-button--color-default {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-button--type-secondary.ui-button--color-default .ui-button__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-button--type-secondary.ui-button--color-primary {
+ color: #607d8b;
+}
+.ui-button--type-secondary.ui-button--color-accent {
+ color: #1976d2;
+}
+.ui-button--type-secondary.ui-button--color-green {
+ color: #43a047;
+}
+.ui-button--type-secondary.ui-button--color-orange {
+ color: #ff9800;
+}
+.ui-button--type-secondary.ui-button--color-red {
+ color: #f44336;
+}
+
+.editor-inline {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ cursor: auto;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ min-width: 100px;
+ padding: 0;
+ position: relative;
+ z-index: 1;
+ z-index: 1000000020;
+ max-width: 90vw;
+ margin: 0 auto;
+}
+.editor-inline > form {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ height: 100%;
+ overflow: visible;
+ padding: 0;
+ width: 100%;
+}
+.editor-inline > form:before, .editor-inline > form:after {
+ content: '';
+ display: table;
+}
+.editor-inline > form:after {
+ clear: both;
+}
+.editor-inline .input-container {
+ -webkit-align-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: auto;
+ padding: 18px;
+}
+.editor-inline .hidden-submit {
+ display: none;
+}
+.editor-inline .input-container {
+ overflow: visible;
+ padding: 0;
+}
+.hidden-wrapped {
+ display: none;
+}
+
+.kiln-field {
+ border: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ margin: 0 0 16px;
+ min-width: 0;
+ opacity: 1;
+ padding: 0;
+ position: relative;
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ visibility: visible;
+ width: 100%;
+}
+.editor-inline .kiln-field {
+ margin: 0;
+}
+.kiln-field .reveal-enter,
+ .kiln-field .reveal-leave-to {
+ opacity: 0;
+}
+.kiln-field .reveal-enter-to,
+ .kiln-field .reveal-leave {
+ opacity: 1;
+}
+.kiln-field .reveal-enter-active,
+ .kiln-field .reveal-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.kiln-avatar {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+
+.filterable-list {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: 100%;
+}
+.filterable-list-input {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin: 16px;
+}
+.filterable-list-headers {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 12px;
+ text-transform: uppercase;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #fafafa;
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 8px 16px;
+}
+.filterable-list-headers .filterable-list-header-drag {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 36px;
+ -ms-flex: 0 0 36px;
+ flex: 0 0 36px;
+}
+.filterable-list-headers .filterable-list-header-title {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+}
+.filterable-list-readout {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ min-height: 200px;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding: 0;
+}
+.filterable-list-readout-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+.filterable-list-add {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 16px;
+}
+.filterable-list-add-button {
+ width: 100%;
+}
+@-webkit-keyframes shake {
+0%, 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+}
+20%, 60% {
+ -webkit-transform: translateX(-5px);
+ transform: translateX(-5px);
+}
+40%, 80% {
+ -webkit-transform: translateX(5px);
+ transform: translateX(5px);
+}
+}
+@keyframes shake {
+0%, 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+}
+20%, 60% {
+ -webkit-transform: translateX(-5px);
+ transform: translateX(-5px);
+}
+40%, 80% {
+ -webkit-transform: translateX(5px);
+ transform: translateX(5px);
+}
+}
+.kiln-shake {
+ -webkit-animation-name: shake;
+ animation-name: shake;
+ -webkit-animation-duration: 250ms;
+ animation-duration: 250ms;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.filterable-list-item {
+ border: 0;
+}
+.filterable-list-item.expanded {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+}
+.filterable-list-item.expanded .filterable-list-item-btn {
+ color: #1976d2;
+ font-weight: bold;
+}
+.filterable-list-item-inner {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #ffffff;
+ color: #607d8b;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 16px;
+ position: relative;
+ -webkit-transition: 200ms background-color ease-out;
+ transition: 200ms background-color ease-out;
+}
+.filterable-list-item-inner:after {
+ background-color: currentColor;
+ content: '';
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ -webkit-transition: opacity 600ms ease-out;
+ transition: opacity 600ms ease-out;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 0%;
+}
+.filterable-list-item-inner.clickable {
+ cursor: pointer;
+}
+.filterable-list-item-inner.clickable:hover, .filterable-list-item-inner.focused {
+ background-color: #eeeeee;
+}
+.filterable-list-item-inner.active:after {
+ opacity: 0.4;
+ -webkit-transition: opacity 600ms ease-out;
+ transition: opacity 600ms ease-out;
+ width: 100%;
+}
+.filterable-list-item-drag {
+ color: rgba(0, 0, 0, 0.38);
+}
+.filterable-list-item-secondary-action {
+ color: rgba(0, 0, 0, 0.54);
+}
+.filterable-list-item-btn {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: transparent;
+ border: none;
+ cursor: default;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ height: 48px;
+ padding: 0;
+ text-align: left;
+ vertical-align: middle;
+}
+.clickable .filterable-list-item-btn {
+ cursor: pointer;
+}
+.filterable-list-item-btn:focus {
+ outline: none;
+}
+.filterable-list-item.selected .filterable-list-item-btn {
+ font-weight: bold;
+}
+.filterable-list-item-children {
+ padding: 0;
+}
+
+.filterable-list-item-child {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #ffffff;
+ color: #607d8b;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 16px;
+ position: relative;
+ -webkit-transition: 200ms background-color ease-out;
+ transition: 200ms background-color ease-out;
+}
+.filterable-list-item-child:after {
+ background-color: currentColor;
+ content: '';
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ -webkit-transition: opacity 600ms ease-out;
+ transition: opacity 600ms ease-out;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 0%;
+}
+.filterable-list-item-child.clickable {
+ cursor: pointer;
+}
+.filterable-list-item-child.clickable:hover, .filterable-list-item-child.focused {
+ background-color: #eeeeee;
+}
+.filterable-list-item-child.active:after {
+ opacity: 0.4;
+ -webkit-transition: opacity 600ms ease-out;
+ transition: opacity 600ms ease-out;
+ width: 100%;
+}
+.filterable-list-item-child-secondary-action {
+ color: rgba(0, 0, 0, 0.54);
+}
+.filterable-list-item-child-btn {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: transparent;
+ border: none;
+ cursor: default;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ height: 48px;
+ padding: 0;
+ text-align: left;
+ vertical-align: middle;
+}
+.clickable .filterable-list-item-child-btn {
+ cursor: pointer;
+}
+.filterable-list-item-child-btn:focus {
+ outline: none;
+}
+
+.ui-textbox {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 1rem;
+}
+.ui-textbox:hover:not(.is-disabled) .ui-textbox__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-textbox:hover:not(.is-disabled) .ui-textbox__input,
+ .ui-textbox:hover:not(.is-disabled) .ui-textbox__textarea {
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+}
+.ui-textbox.is-active:not(.is-disabled) .ui-textbox__input,
+ .ui-textbox.is-active:not(.is-disabled) .ui-textbox__textarea {
+ border-bottom-color: #607d8b;
+ border-bottom-width: 2px;
+}
+.ui-textbox.is-active:not(.is-disabled) .ui-textbox__label-text,
+ .ui-textbox.is-active:not(.is-disabled) .ui-textbox__icon-wrapper .ui-icon {
+ color: #607d8b;
+}
+.ui-textbox.has-label .ui-textbox__icon-wrapper {
+ padding-top: 1.5rem;
+}
+.ui-textbox.has-counter .ui-textbox__feedback-text {
+ padding-right: 3rem;
+}
+.ui-textbox.has-floating-label .ui-textbox__label-text {
+ display: table;
+}
+.ui-textbox.has-floating-label .ui-textbox__label-text.is-inline {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: text;
+ -webkit-transform: translateY(1.625rem) scale(1.1);
+ -ms-transform: translateY(1.625rem) scale(1.1);
+ transform: translateY(1.625rem) scale(1.1);
+}
+.ui-textbox.has-floating-label .ui-textbox__label-text.is-floating {
+ -webkit-transform: translateY(0) scale(1);
+ -ms-transform: translateY(0) scale(1);
+ transform: translateY(0) scale(1);
+}
+.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__label-text,
+ .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__icon-wrapper .ui-icon,
+ .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__counter {
+ color: #f44336;
+}
+.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__input,
+ .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__textarea {
+ border-bottom-color: #f44336;
+}
+.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__feedback {
+ color: #f44336;
+}
+.ui-textbox.is-disabled .ui-textbox__input,
+ .ui-textbox.is-disabled .ui-textbox__textarea {
+ border-bottom-style: dotted;
+ border-bottom-width: 2px;
+ color: rgba(0, 0, 0, 0.38);
+}
+.ui-textbox.is-disabled .ui-textbox__icon-wrapper .ui-icon {
+ opacity: 0.6;
+}
+.ui-textbox.is-disabled .ui-textbox__feedback {
+ opacity: 0.8;
+}
+.ui-textbox__label {
+ display: block;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+.ui-textbox__icon-wrapper {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 0.75rem;
+ padding-top: 0.25rem;
+}
+.ui-textbox__icon-wrapper .ui-icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-textbox__content {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-textbox__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: default;
+ font-size: 0.9375rem;
+ line-height: normal;
+ margin-bottom: 0;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ -webkit-transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-textbox__input,
+.ui-textbox__textarea {
+ background: none;
+ border: none;
+ border-bottom-color: rgba(0, 0, 0, 0.12);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ border-radius: 0;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: auto;
+ display: block;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 1rem;
+ font-weight: normal;
+ margin: 0;
+ outline: none;
+ padding: 0;
+ -webkit-transition: border 0.1s ease;
+ transition: border 0.1s ease;
+ width: 100%;
+}
+.ui-textbox__input {
+ height: 2rem;
+}
+.ui-textbox__textarea {
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding-bottom: 0.375rem;
+ resize: vertical;
+}
+.ui-textbox__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0.25rem;
+ position: relative;
+}
+.ui-textbox__counter {
+ position: absolute;
+ right: 0;
+ top: 0.25rem;
+}
+.ui-textbox--icon-position-right .ui-textbox__icon-wrapper {
+ margin-left: 0.5rem;
+ margin-right: 0;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+
+.person-item {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: default;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ padding: 12px 0;
+ width: 100%;
+}
+.person-item.has-primary-action {
+ cursor: pointer;
+}
+.person-image {
+ margin-right: 16px;
+}
+.person-text {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ min-width: 0;
+}
+.person-name {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+}
+.person-subtitle {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+}
+.person-actions {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ color: rgba(0, 0, 0, 0.87);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-left: 16px;
+}
+.person-actions > * + * {
+ margin-left: 4px;
+}
+
+.ui-switch {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ height: 2rem;
+ position: relative;
+}
+.ui-switch.is-checked .ui-switch__thumb {
+ -webkit-transform: translateX(0.875rem);
+ -ms-transform: translateX(0.875rem);
+ transform: translateX(0.875rem);
+}
+.ui-switch.is-disabled .ui-switch__track {
+ background-color: rgba(0, 0, 0, 0.12);
+}
+.ui-switch.is-disabled .ui-switch__thumb {
+ background-color: #bdbdbd;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.ui-switch.is-disabled .ui-switch__input-wrapper,
+ .ui-switch.is-disabled .ui-switch__label-text {
+ color: rgba(0, 0, 0, 0.38);
+ cursor: default;
+}
+.ui-switch__input-wrapper {
+ cursor: pointer;
+ height: 1.25rem;
+ position: relative;
+ width: 2.125rem;
+}
+.ui-switch__input {
+ opacity: 0;
+ position: absolute;
+}
+body[modality="keyboard"] .ui-switch__input:focus + .ui-switch__thumb .ui-switch__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-switch__track {
+ background-color: rgba(0, 0, 0, 0.26);
+ border-radius: 0.5rem;
+ height: 0.875rem;
+ position: absolute;
+ top: 0.1875rem;
+ -webkit-transition: background-color 0.1s linear;
+ transition: background-color 0.1s linear;
+ width: 2.125rem;
+ z-index: -1;
+}
+.ui-switch__thumb {
+ background-color: #fafafa;
+ border-radius: 50%;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
+ height: 1.25rem;
+ position: absolute;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: background-color, -webkit-transform;
+ transition-property: background-color, -webkit-transform;
+ transition-property: background-color, transform;
+ transition-property: background-color, transform, -webkit-transform;
+ -webkit-transition-timing-function: ease;
+ transition-timing-function: ease;
+ width: 1.25rem;
+}
+.ui-switch__focus-ring {
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 50%;
+ height: 2.625rem;
+ left: -0.6875rem;
+ opacity: 0;
+ position: absolute;
+ top: -0.6875rem;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: background-color 0.2s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ transition: background-color 0.2s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ transition: background-color 0.2s ease, transform 0.15s ease, opacity 0.15s ease;
+ transition: background-color 0.2s ease, transform 0.15s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ width: 2.625rem;
+ z-index: -1;
+}
+.ui-switch__label-text {
+ cursor: pointer;
+ font-size: 0.9375rem;
+ margin-left: 1rem;
+}
+.ui-switch--switch-position-right .ui-switch__label-text {
+ margin-left: 0;
+ margin-right: auto;
+ -webkit-box-ordinal-group: 0;
+ -webkit-order: -1;
+ -ms-flex-order: -1;
+ order: -1;
+}
+.ui-switch--color-primary.is-checked:not(.is-disabled) .ui-switch__track {
+ background-color: rgba(96, 125, 139, 0.5);
+}
+.ui-switch--color-primary.is-checked:not(.is-disabled) .ui-switch__thumb {
+ background-color: #607d8b;
+}
+.ui-switch--color-primary.is-checked:not(.is-disabled) .ui-switch__focus-ring {
+ background-color: rgba(96, 125, 139, 0.2);
+}
+.ui-switch--color-accent.is-checked:not(.is-disabled) .ui-switch__track {
+ background-color: rgba(25, 118, 210, 0.5);
+}
+.ui-switch--color-accent.is-checked:not(.is-disabled) .ui-switch__thumb {
+ background-color: #1976d2;
+}
+.ui-switch--color-accent.is-checked:not(.is-disabled) .ui-switch__focus-ring {
+ background-color: rgba(25, 118, 210, 0.2);
+}
+
+.nav-menu-button {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #000000;
+ border: none;
+ border-radius: 0;
+ color: #ffffff;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ font-weight: bold;
+ height: 48px;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ outline: none;
+ padding: 0 16px;
+ position: relative;
+ width: 100%;
+}
+.nav-menu-button.is-large {
+ height: 56px;
+}
+.nav-menu-button.is-selected:not(:hover) {
+ background-color: #37474f;
+}
+.nav-menu-button:hover {
+ background-color: #263238;
+}
+.nav-menu-button .ui-icon {
+ margin-right: 8px;
+}
+
+.ui-alert {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+ line-height: 1.4;
+ margin-bottom: 1rem;
+ overflow: hidden;
+ position: relative;
+ -webkit-transition: margin-bottom 0.3s;
+ transition: margin-bottom 0.3s;
+ width: 100%;
+}
+.ui-alert a {
+ text-decoration: none;
+}
+.ui-alert a:hover, .ui-alert a:focus {
+ text-decoration: underline;
+}
+.ui-alert__icon {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 0.75rem;
+}
+.ui-alert__body {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ color: rgba(0, 0, 0, 0.75);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin-bottom: 0;
+ margin-top: 0;
+ min-height: 3rem;
+ padding: 0.75rem 1rem;
+ -webkit-transition: opacity 0.3s, margin-top 0.4s;
+ transition: opacity 0.3s, margin-top 0.4s;
+ width: 100%;
+}
+.ui-alert__content {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-alert__dismiss-button {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-bottom: -0.25rem;
+ margin-left: 0.5rem;
+ margin-right: -0.5rem;
+ margin-top: -0.25rem;
+}
+.ui-alert--type-info .ui-alert__body {
+ background-color: rgba(33, 150, 243, 0.12);
+}
+.ui-alert--type-info .ui-alert__icon {
+ color: #2196f3;
+}
+.ui-alert--type-info a {
+ color: #2196f3;
+}
+.ui-alert--type-success .ui-alert__body {
+ background-color: rgba(76, 175, 80, 0.12);
+}
+.ui-alert--type-success .ui-alert__icon {
+ color: #4caf50;
+}
+.ui-alert--type-success a {
+ color: #4caf50;
+}
+.ui-alert--type-warning .ui-alert__body {
+ background-color: rgba(255, 152, 0, 0.12);
+}
+.ui-alert--type-warning .ui-alert__icon {
+ color: #ff9800;
+}
+.ui-alert--type-warning a {
+ color: #ff9800;
+}
+.ui-alert--type-error .ui-alert__body {
+ background-color: rgba(244, 67, 54, 0.12);
+}
+.ui-alert--type-error .ui-alert__icon {
+ color: #f44336;
+}
+.ui-alert--type-error a {
+ color: #f44336;
+}
+.ui-alert--transition-toggle-enter,
+.ui-alert--transition-toggle-leave-active {
+ margin-bottom: 0;
+}
+.ui-alert--transition-toggle-enter .ui-alert__body,
+ .ui-alert--transition-toggle-leave-active .ui-alert__body {
+ margin-top: -3.5rem;
+ opacity: 0;
+}
+
+.ui-close-button {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: transparent;
+ background: none;
+ border-radius: 50%;
+ border: none;
+ cursor: pointer;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+}
+.ui-close-button::-moz-focus-inner {
+ border: 0;
+}
+.ui-close-button:hover:not(.is-disabled) {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+body[modality="keyboard"] .ui-close-button:focus .ui-close-button__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-close-button.is-disabled {
+ cursor: default;
+ opacity: 0.6;
+}
+.ui-close-button__icon {
+ position: relative;
+ width: 100%;
+ z-index: 1;
+}
+.ui-close-button__focus-ring {
+ background-color: rgba(0, 0, 0, 0.15);
+ border-radius: 50%;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-close-button--size-small,
+.ui-close-button--size-small .ui-close-button__focus-ring {
+ height: 2rem;
+ width: 2rem;
+}
+.ui-close-button--size-small .ui-icon {
+ font-size: 1.125rem;
+}
+.ui-close-button--size-normal,
+.ui-close-button--size-normal .ui-close-button__focus-ring {
+ height: 2.25rem;
+ width: 2.25rem;
+}
+.ui-close-button--size-normal .ui-icon {
+ font-size: 1.25rem;
+}
+.ui-close-button--size-large,
+.ui-close-button--size-large .ui-close-button__focus-ring {
+ height: 3rem;
+ width: 3rem;
+}
+.ui-close-button--size-large .ui-icon {
+ font-size: 1.5rem;
+}
+body[modality="keyboard"] .ui-close-button--color-black:focus .ui-close-button__icon, .ui-close-button--color-black:hover:not(.is-disabled) .ui-close-button__icon {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-close-button--color-black .ui-close-button__icon {
+ color: rgba(0, 0, 0, 0.38);
+}
+body[modality="keyboard"] .ui-close-button--color-white:focus .ui-close-button__icon, .ui-close-button--color-white:hover:not(.is-disabled) .ui-close-button__icon {
+ color: white;
+}
+.ui-close-button--color-white .ui-close-button__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+
+.ui-autocomplete {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 1rem;
+ position: relative;
+}
+.ui-autocomplete:hover:not(.is-disabled) .ui-autocomplete__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-autocomplete:hover:not(.is-disabled) .ui-autocomplete__input {
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+}
+.ui-autocomplete.is-active:not(.is-disabled) .ui-autocomplete__label-text,
+ .ui-autocomplete.is-active:not(.is-disabled) .ui-autocomplete__icon-wrapper .ui-icon {
+ color: #607d8b;
+}
+.ui-autocomplete.is-active:not(.is-disabled) .ui-autocomplete__input {
+ border-bottom-color: #607d8b;
+ border-bottom-width: 2px;
+}
+.ui-autocomplete.has-floating-label .ui-autocomplete__label-text {
+ display: table;
+}
+.ui-autocomplete.has-floating-label .ui-autocomplete__label-text.is-inline {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: text;
+ -webkit-transform: translateY(1.625rem) scale(1.1);
+ -ms-transform: translateY(1.625rem) scale(1.1);
+ transform: translateY(1.625rem) scale(1.1);
+}
+.ui-autocomplete.has-floating-label .ui-autocomplete__label-text.is-floating {
+ -webkit-transform: translateY(0) scale(1);
+ -ms-transform: translateY(0) scale(1);
+ transform: translateY(0) scale(1);
+}
+.ui-autocomplete.has-label .ui-autocomplete__icon-wrapper {
+ padding-top: 1.5rem;
+}
+.ui-autocomplete.has-label .ui-autocomplete__clear-button {
+ top: 1.6875rem;
+}
+.ui-autocomplete.is-invalid:not(.is-disabled) .ui-autocomplete__label-text,
+ .ui-autocomplete.is-invalid:not(.is-disabled) .ui-autocomplete__icon-wrapper .ui-icon {
+ color: #f44336;
+}
+.ui-autocomplete.is-invalid:not(.is-disabled) .ui-autocomplete__input {
+ border-bottom-color: #f44336;
+}
+.ui-autocomplete.is-invalid:not(.is-disabled) .ui-autocomplete__feedback {
+ color: #f44336;
+}
+.ui-autocomplete.is-disabled .ui-autocomplete__input {
+ border-bottom-style: dotted;
+ border-bottom-width: 2px;
+ color: rgba(0, 0, 0, 0.38);
+}
+.ui-autocomplete.is-disabled .ui-autocomplete__icon-wrapper .ui-icon {
+ opacity: 0.6;
+}
+.ui-autocomplete.is-disabled .ui-autocomplete__feedback {
+ opacity: 0.8;
+}
+.ui-autocomplete__label {
+ display: block;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.ui-autocomplete__icon-wrapper {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 0.75rem;
+ padding-top: 0.25rem;
+}
+.ui-autocomplete__icon-wrapper .ui-icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-autocomplete__content {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-autocomplete__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: default;
+ font-size: 0.9375rem;
+ line-height: normal;
+ margin-bottom: 0;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ -webkit-transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-autocomplete__input {
+ background: none;
+ border: none;
+ border-bottom-color: rgba(0, 0, 0, 0.12);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ border-radius: 0;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: auto;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 1rem;
+ font-weight: normal;
+ height: 2rem;
+ outline: none;
+ padding: 0;
+ -webkit-transition: border 0.1s ease;
+ transition: border 0.1s ease;
+ width: 100%;
+}
+.ui-autocomplete__input::-ms-clear {
+ display: none;
+}
+.ui-autocomplete__clear-button {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: pointer;
+ font-size: 1.125rem;
+ position: absolute;
+ right: 0;
+ top: 0.4375rem;
+}
+.ui-autocomplete__clear-button:hover {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-autocomplete__suggestions {
+ background-color: white;
+ -webkit-box-shadow: 1px 2px 8px #757575;
+ box-shadow: 1px 2px 8px #757575;
+ color: rgba(0, 0, 0, 0.87);
+ display: block;
+ list-style-type: none;
+ margin: 0;
+ margin-bottom: 0.5rem;
+ min-width: 100%;
+ padding: 0;
+ position: absolute;
+ z-index: 1000000040;
+}
+.ui-autocomplete__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0.25rem;
+ position: relative;
+}
+.ui-autocomplete--icon-position-right .ui-autocomplete__icon-wrapper {
+ margin-left: 0.5rem;
+ margin-right: 0;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+
+.ui-autocomplete-suggestion {
+ cursor: pointer;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+ padding: 0.5rem 0.75rem;
+}
+.ui-autocomplete-suggestion:hover {
+ background-color: rgba(0, 0, 0, 0.06);
+}
+.ui-autocomplete-suggestion.is-highlighted {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.ui-autocomplete-suggestion__image {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+.ui-autocomplete-suggestion__image-object {
+ background-position: 50%;
+ background-size: cover;
+ border-radius: 50%;
+ height: 2rem;
+ margin-right: 0.75rem;
+ width: 2rem;
+}
+
+.ui-checkbox {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-weight: normal;
+ margin: 0;
+ margin-bottom: 0.5rem;
+ position: relative;
+}
+.ui-checkbox:not(.is-disabled):not(.is-checked):hover .ui-checkbox__checkmark::before, .ui-checkbox:not(.is-disabled):not(.is-checked).is-active .ui-checkbox__checkmark::before {
+ border-color: rgba(0, 0, 0, 0.6);
+}
+.ui-checkbox.is-checked .ui-checkbox__checkmark::after {
+ border-bottom: 0.125rem solid white;
+ border-right: 0.125rem solid white;
+ opacity: 1;
+}
+.ui-checkbox.is-disabled .ui-checkbox__checkmark,
+ .ui-checkbox.is-disabled .ui-checkbox__label-text {
+ color: rgba(0, 0, 0, 0.38);
+ cursor: default;
+}
+.ui-checkbox.is-disabled .ui-checkbox__checkmark::before {
+ border-color: rgba(0, 0, 0, 0.26);
+}
+.ui-checkbox.is-disabled.is-checked .ui-checkbox__checkmark::before {
+ background-color: rgba(0, 0, 0, 0.26);
+ border: none;
+}
+.ui-checkbox__label-text {
+ cursor: pointer;
+ font-size: 1rem;
+ margin-left: 0.5rem;
+}
+.ui-checkbox__checkmark {
+ background-color: white;
+ cursor: pointer;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ height: 1.25rem;
+ position: relative;
+ width: 1.25rem;
+}
+.ui-checkbox__checkmark::before {
+ border-radius: 0.125rem;
+ border: 0.125rem solid rgba(0, 0, 0, 0.38);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ content: "";
+ display: block;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ width: 100%;
+}
+.ui-checkbox__checkmark::after {
+ bottom: 0.3125rem;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ content: "";
+ display: block;
+ height: 0.8125rem;
+ left: 0.4375rem;
+ opacity: 0;
+ position: absolute;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ -webkit-transition-delay: 0.1s;
+ transition-delay: 0.1s;
+ -webkit-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+ width: 0.375rem;
+}
+.ui-checkbox__input {
+ position: absolute;
+ opacity: 0;
+}
+body[modality="keyboard"] .ui-checkbox__input:focus + .ui-checkbox__checkmark .ui-checkbox__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-checkbox__focus-ring {
+ border-radius: 50%;
+ height: 2.625rem;
+ margin-left: -0.6875rem;
+ margin-top: -0.6875rem;
+ opacity: 0;
+ position: absolute;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition-duration: 0.15s;
+ transition-duration: 0.15s;
+ -webkit-transition-property: opacity, -webkit-transform;
+ transition-property: opacity, -webkit-transform;
+ transition-property: opacity, transform;
+ transition-property: opacity, transform, -webkit-transform;
+ -webkit-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+ width: 2.625rem;
+ background-color: rgba(0, 0, 0, 0.12);
+}
+.ui-checkbox--box-position-right .ui-checkbox__label-text {
+ margin-left: 0;
+ margin-right: auto;
+ -webkit-box-ordinal-group: 0;
+ -webkit-order: -1;
+ -ms-flex-order: -1;
+ order: -1;
+}
+.ui-checkbox--color-primary:not(.is-disabled).is-checked:hover .ui-checkbox__checkmark::before, .ui-checkbox--color-primary:not(.is-disabled).is-checked.is-active .ui-checkbox__checkmark::before {
+ background-color: #566f7c;
+ border-color: #566f7c;
+}
+.ui-checkbox--color-primary.is-checked .ui-checkbox__checkmark::before {
+ background-color: #607d8b;
+ border-color: #607d8b;
+}
+.ui-checkbox--color-primary.is-checked .ui-checkbox__focus-ring {
+ background-color: rgba(96, 125, 139, 0.18);
+}
+.ui-checkbox--color-accent:not(.is-disabled).is-checked:hover .ui-checkbox__checkmark::before, .ui-checkbox--color-accent:not(.is-disabled).is-checked.is-active .ui-checkbox__checkmark::before {
+ background-color: #1669bb;
+ border-color: #1669bb;
+}
+.ui-checkbox--color-accent.is-checked .ui-checkbox__checkmark::before {
+ background-color: #1976d2;
+ border-color: #1976d2;
+}
+.ui-checkbox--color-accent.is-checked .ui-checkbox__focus-ring {
+ background-color: rgba(25, 118, 210, 0.18);
+}
+
+.ui-checkbox-group {
+ font-family: "Noto Sans", Arial, sans-serif;
+ line-height: normal;
+}
+.ui-checkbox-group:not(.is-disabled):not(.is-invalid):hover .ui-checkbox-group__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-checkbox-group:not(.is-disabled):not(.is-invalid).is-active .ui-checkbox-group__label-text {
+ color: #607d8b;
+}
+.ui-checkbox-group.is-vertical .ui-checkbox-group__checkboxes {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding-top: 0.5rem;
+}
+.ui-checkbox-group.is-vertical .ui-checkbox-group__checkbox {
+ margin-bottom: 0.75rem;
+ margin-left: 0;
+ width: 100%;
+}
+.ui-checkbox-group.is-invalid .ui-checkbox-group__label-text {
+ color: #f44336;
+}
+.ui-checkbox-group.is-invalid .ui-checkbox-group__feedback {
+ color: #f44336;
+}
+.ui-checkbox-group.is-disabled .ui-checkbox-group__feedback {
+ opacity: 0.8;
+}
+.ui-checkbox-group__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.9375rem;
+ -webkit-transition: color 0.1s ease;
+ transition: color 0.1s ease;
+}
+.ui-checkbox-group__checkboxes {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ min-height: 2rem;
+}
+.ui-checkbox.ui-checkbox-group__checkbox {
+ margin-bottom: 0;
+ margin-left: 1.5rem;
+}
+.ui-checkbox.ui-checkbox-group__checkbox:first-child {
+ margin-left: 0;
+}
+.ui-checkbox-group__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0rem;
+ position: relative;
+}
+.ui-checkbox-group--box-position-right:not(.is-vertical) .ui-checkbox__label-text {
+ margin-right: 0.5rem;
+}
+
+.ui-collapsible {
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 0.5rem;
+ width: 100%;
+}
+.ui-collapsible:not(.is-disabled) .ui-collapsible__header:hover,
+ body[modality="keyboard"] .ui-collapsible:not(.is-disabled) .ui-collapsible__header:focus {
+ background-color: #e0e0e0;
+}
+.ui-collapsible.is-open .ui-collapsible__header-icon {
+ -webkit-transform: rotate(-180deg);
+ -ms-transform: rotate(-180deg);
+ transform: rotate(-180deg);
+}
+.ui-collapsible.is-disabled .ui-collapsible__header {
+ cursor: default;
+ opacity: 0.6;
+}
+.ui-collapsible.is-disabled .ui-collapsible__header-icon {
+ cursor: default;
+}
+.ui-collapsible__header {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #eeeeee;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 0.9375rem;
+ line-height: 1.5;
+ margin: 0;
+ min-height: 3rem;
+ padding: 0.75rem 1rem;
+ position: relative;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ width: 100%;
+}
+.ui-collapsible__header .ui-ripple-ink__ink {
+ opacity: 0.1;
+}
+.ui-collapsible__header-content {
+ padding-right: 0.5rem;
+}
+.ui-collapsible__header-icon {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: pointer;
+ margin-left: auto;
+ margin-right: -0.25rem;
+ -webkit-transition: -webkit-transform 0.3s ease;
+ transition: -webkit-transform 0.3s ease;
+ transition: transform 0.3s ease;
+ transition: transform 0.3s ease, -webkit-transform 0.3s ease;
+}
+.ui-collapsible__body-wrapper {
+ height: initial;
+ overflow: hidden;
+}
+.ui-collapsible__body {
+ border-top: 0;
+ border: 1px solid #eeeeee;
+ display: block;
+ padding: 1rem;
+ width: 100%;
+}
+.ui-collapsible--transition-toggle-enter-active,
+.ui-collapsible--transition-toggle-leave-active {
+ -webkit-transition: height 0.3s ease;
+ transition: height 0.3s ease;
+}
+.ui-collapsible--transition-toggle-enter,
+.ui-collapsible--transition-toggle-leave-active {
+ height: 0 !important;
+}
+
+.ui-confirm__message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+}
+.ui-confirm__footer {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.ui-modal {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.875rem;
+}
+.ui-modal.has-footer .ui-modal__body {
+ max-height: calc(100vh - 7.875rem);
+}
+.ui-modal:not(.has-footer) .ui-modal__body {
+ padding: 1rem 1.5rem 1.5rem;
+}
+.ui-modal--is-open {
+ overflow: hidden;
+}
+.ui-modal__mask {
+ background-color: rgba(0, 0, 0, 0.4);
+ display: table;
+ height: 100%;
+ left: 0;
+ position: fixed;
+ top: 0;
+ -webkit-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+ width: 100%;
+ z-index: 1000000030;
+}
+.ui-modal__wrapper {
+ display: table-cell;
+ vertical-align: middle;
+ overflow-x: hidden;
+}
+.ui-modal__wrapper.has-dummy-scrollbar {
+ overflow-y: scroll;
+}
+.ui-modal__container {
+ background-color: white;
+ border-radius: 0.125rem;
+ -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
+ margin: 0 auto;
+ max-height: 100vh;
+ max-width: 100vw;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ width: 33rem;
+}
+.ui-modal__header {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #F5F5F5;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 3.5rem;
+ padding: 0 1.5rem;
+ position: relative;
+ z-index: 1;
+}
+.ui-modal__header-text {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ font-size: 1.125rem;
+ font-weight: normal;
+ margin: 0;
+}
+.ui-modal__close-button {
+ margin-left: auto;
+ margin-right: -0.5rem;
+}
+.ui-modal__body {
+ max-height: calc(100vh - 3.5rem);
+ overflow-y: auto;
+ padding: 1rem 1.5rem;
+}
+.ui-modal__footer {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 4.375rem;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ padding: 0 1.5rem;
+}
+.ui-modal__footer .ui-button {
+ margin-left: 0.5rem;
+}
+.ui-modal__footer .ui-button:first-child {
+ margin-left: 0;
+}
+.ui-modal--size-large .ui-modal__container {
+ width: 53rem;
+}
+.ui-modal--size-small .ui-modal__container {
+ width: 20rem;
+}
+.ui-modal--transition-fade-enter,
+.ui-modal--transition-fade-leave-active {
+ opacity: 0;
+}
+.ui-modal--transition-scale-enter,
+.ui-modal--transition-scale-leave-active {
+ opacity: 0;
+}
+.ui-modal--transition-scale-enter .ui-modal__container,
+ .ui-modal--transition-scale-leave-active .ui-modal__container {
+ -webkit-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ transform: scale(1.1);
+}
+
+.ui-datepicker {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 1rem;
+ outline: none;
+ position: relative;
+}
+.ui-datepicker:hover:not(.is-disabled) .ui-datepicker__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-datepicker:hover:not(.is-disabled) .ui-datepicker__display {
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+}
+.ui-datepicker:hover:not(.is-disabled) .ui-datepicker__dropdown-button {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-datepicker.is-active:not(.is-disabled) .ui-datepicker__label-text,
+ .ui-datepicker.is-active:not(.is-disabled) .ui-datepicker__icon-wrapper .ui-icon {
+ color: #607d8b;
+}
+.ui-datepicker.is-active:not(.is-disabled) .ui-datepicker__display {
+ border-bottom-color: #607d8b;
+ border-bottom-width: 2px;
+}
+.ui-datepicker.has-floating-label .ui-datepicker__label-text {
+ display: table;
+}
+.ui-datepicker.has-floating-label .ui-datepicker__label-text.is-inline {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: pointer;
+ -webkit-transform: translateY(1.625rem) scale(1.1);
+ -ms-transform: translateY(1.625rem) scale(1.1);
+ transform: translateY(1.625rem) scale(1.1);
+}
+.ui-datepicker.has-floating-label .ui-datepicker__label-text.is-floating {
+ -webkit-transform: translateY(0) scale(1);
+ -ms-transform: translateY(0) scale(1);
+ transform: translateY(0) scale(1);
+}
+.ui-datepicker.has-label .ui-datepicker__icon-wrapper {
+ padding-top: 1.5rem;
+}
+.ui-datepicker.has-label .ui-datepicker__dropdown-button {
+ top: 1.6875rem;
+}
+.ui-datepicker.is-invalid:not(.is-disabled) .ui-datepicker__label-text,
+ .ui-datepicker.is-invalid:not(.is-disabled) .ui-datepicker__icon-wrapper .ui-icon {
+ color: #f44336;
+}
+.ui-datepicker.is-invalid:not(.is-disabled) .ui-datepicker__display {
+ border-bottom-color: #f44336;
+}
+.ui-datepicker.is-invalid:not(.is-disabled) .ui-datepicker__feedback {
+ color: #f44336;
+}
+.ui-datepicker.is-disabled .ui-datepicker__display {
+ border-bottom-style: dotted;
+ border-bottom-width: 2px;
+ color: rgba(0, 0, 0, 0.38);
+ cursor: default;
+}
+.ui-datepicker.is-disabled .ui-datepicker__dropdown-button,
+ .ui-datepicker.is-disabled .ui-datepicker__display-value.is-placeholder {
+ color: rgba(0, 0, 0, 0.38);
+ opacity: 0.6;
+}
+.ui-datepicker.is-disabled .ui-datepicker__icon-wrapper .ui-icon {
+ opacity: 0.6;
+}
+.ui-datepicker.is-disabled .ui-datepicker__feedback {
+ opacity: 0.8;
+}
+.ui-datepicker .ui-modal:not(.has-footer) .ui-modal__body {
+ padding: 0;
+}
+.ui-datepicker .ui-modal:not(.has-footer) .ui-modal__body .ui-calendar__body {
+ height: 21.75rem;
+}
+.ui-datepicker .ui-modal__container {
+ width: 16.75rem;
+}
+.ui-datepicker__label {
+ display: block;
+ margin: 0;
+ outline: none;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.ui-datepicker__icon-wrapper {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 0.75rem;
+ padding-top: 0.25rem;
+}
+.ui-datepicker__icon-wrapper .ui-icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-datepicker__content {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-datepicker__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: default;
+ font-size: 0.9375rem;
+ line-height: normal;
+ margin-bottom: 0;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ -webkit-transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-datepicker__display {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border: none;
+ border-bottom-color: rgba(0, 0, 0, 0.12);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 1rem;
+ font-weight: normal;
+ height: 2rem;
+ line-height: 1;
+ padding: 0;
+ -webkit-transition: border 0.1s ease;
+ transition: border 0.1s ease;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 100%;
+}
+.ui-datepicker__display-value {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-datepicker__display-value.is-placeholder {
+ color: rgba(0, 0, 0, 0.38);
+}
+.ui-datepicker__dropdown-button {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.125rem;
+ margin-left: auto;
+ margin-right: -0.25rem;
+}
+.ui-datepicker__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0.25rem;
+ position: relative;
+}
+.ui-datepicker__modal-buttons {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.ui-datepicker__modal-buttons .ui-button {
+ min-width: 4rem;
+}
+.ui-datepicker--icon-position-right .ui-datepicker__icon-wrapper {
+ margin-left: 0.5rem;
+ margin-right: 0;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.ui-datepicker--orientation-landscape .ui-modal__container {
+ width: 24.75rem;
+}
+
+.ui-calendar {
+ color: rgba(0, 0, 0, 0.87);
+ font-family: "Noto Sans", Arial, sans-serif;
+}
+.ui-calendar__header {
+ color: white;
+ line-height: 1;
+ padding: 1rem;
+}
+.ui-calendar__header-year,
+.ui-calendar__header-details {
+ cursor: pointer;
+ opacity: 0.75;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+}
+.ui-calendar__header-year:hover,
+ body[modality="keyboard"] .ui-calendar__header-year:focus, .ui-calendar__header-year.is-active,
+ .ui-calendar__header-details:hover,
+ body[modality="keyboard"]
+ .ui-calendar__header-details:focus,
+ .ui-calendar__header-details.is-active {
+ opacity: 1;
+}
+body[modality="keyboard"] .ui-calendar__header-year:focus, body[modality="keyboard"]
+ .ui-calendar__header-details:focus {
+ outline: 1px dotted white;
+ outline-offset: 1px;
+}
+.ui-calendar__header-year {
+ font-size: 0.9375rem;
+ font-weight: 500;
+ margin-bottom: 0.5rem;
+}
+.ui-calendar__header-details {
+ font-size: 1.375rem;
+}
+.ui-calendar__body {
+ height: 19.5rem;
+ overflow: hidden;
+ padding: 0.5rem;
+ position: relative;
+ width: 16.75rem;
+}
+.ui-calendar__years {
+ height: 19.5rem;
+ list-style: none;
+ margin: -0.5rem;
+ overflow-y: auto;
+ padding: 0.5rem 0;
+}
+.ui-calendar__year {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 1rem;
+ height: 2.25rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ outline: none;
+}
+.ui-calendar__year.is-selected {
+ font-size: 1.5rem;
+ font-weight: 500;
+ height: 2.5rem;
+}
+.ui-calendar--orientation-landscape {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+.ui-calendar--orientation-landscape .ui-calendar__header {
+ min-width: 8rem;
+}
+.ui-calendar--orientation-landscape .ui-calendar__header-date {
+ margin-bottom: 0.75rem;
+}
+.ui-calendar--orientation-landscape .ui-calendar__header-date {
+ display: block;
+ padding-top: 0.25rem;
+}
+.ui-calendar--color-primary .ui-calendar__header {
+ background-color: #607d8b;
+}
+.ui-calendar--color-primary .ui-calendar__year:hover,
+body[modality="keyboard"] .ui-calendar--color-primary .ui-calendar__year:focus {
+ color: #607d8b;
+}
+.ui-calendar--color-primary .ui-calendar__year.is-selected {
+ color: #607d8b;
+}
+.ui-calendar--color-primary .ui-calendar-week__date.is-today {
+ color: #607d8b;
+}
+.ui-calendar--color-primary .ui-calendar-week__date.is-selected,
+body[modality="keyboard"] .ui-calendar--color-primary .ui-calendar-week__date.is-selected {
+ background-color: #607d8b;
+}
+.ui-calendar--color-accent .ui-calendar__header {
+ background-color: #1976d2;
+}
+.ui-calendar--color-accent .ui-calendar__year:hover,
+body[modality="keyboard"] .ui-calendar--color-accent .ui-calendar__year:focus {
+ color: #1976d2;
+}
+.ui-calendar--color-accent .ui-calendar__year.is-selected {
+ color: #1976d2;
+}
+.ui-calendar--color-accent .ui-calendar-week__date.is-today {
+ color: #1976d2;
+}
+.ui-calendar--color-accent .ui-calendar-week__date.is-selected,
+body[modality="keyboard"] .ui-calendar--color-accent .ui-calendar-week__date.is-selected {
+ background-color: #1976d2;
+}
+
+.ui-calendar-controls {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 2.5rem;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.ui-calendar-controls__month-and-year {
+ font-size: 0.9375rem;
+}
+
+.ui-calendar-month {
+ height: 16rem;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+}
+.ui-calendar-month__header {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 2.5rem;
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ width: 100%;
+}
+.ui-calendar-month__header span {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ color: rgba(0, 0, 0, 0.54);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 0.875rem;
+ height: 2.25rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-transform: uppercase;
+ width: 2.25rem;
+}
+.ui-calendar-month__week {
+ position: absolute;
+ width: 15.75rem;
+}
+.ui-calendar-month__week.is-current {
+ left: 0;
+}
+.ui-calendar-month__week.is-other {
+ left: 15.75rem;
+}
+.ui-calendar-month__week.is-other.ui-calendar-month--slide-right {
+ left: -15.75rem;
+}
+.ui-calendar-month__week.is-sliding {
+ -webkit-transition: -webkit-transform 250ms ease;
+ transition: -webkit-transform 250ms ease;
+ transition: transform 250ms ease;
+ transition: transform 250ms ease, -webkit-transform 250ms ease;
+}
+.ui-calendar-month__week.is-sliding.ui-calendar-month--slide-left {
+ -webkit-transform: translate3d(-15.75rem, 0, 0);
+ transform: translate3d(-15.75rem, 0, 0);
+}
+.ui-calendar-month__week.is-sliding.ui-calendar-month--slide-right {
+ -webkit-transform: translate3d(15.75rem, 0, 0);
+ transform: translate3d(15.75rem, 0, 0);
+}
+
+.ui-calendar-week {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 0.875rem;
+ width: 100%;
+}
+.ui-calendar-week__date {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border-radius: 50%;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 2.25rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ outline: none;
+ text-align: center;
+ width: 2.25rem;
+}
+.ui-calendar-week__date:hover,
+ body[modality="keyboard"] .ui-calendar-week__date:focus {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.ui-calendar-week__date.is-in-other-month {
+ visibility: hidden;
+}
+.ui-calendar-week__date.is-today {
+ font-weight: bold;
+}
+.ui-calendar-week__date.is-today.is-selected {
+ color: white;
+}
+.ui-calendar-week__date.is-selected {
+ color: white;
+}
+.ui-calendar-week__date.is-disabled {
+ background-color: transparent;
+ cursor: default;
+ opacity: 0.4;
+}
+
+.ui-fileupload {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border-radius: 0.125rem;
+ cursor: pointer;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.875rem;
+ font-weight: 500;
+ height: 2.25rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ letter-spacing: 0.02em;
+ line-height: 1;
+ min-width: 5rem;
+ overflow: hidden;
+ padding: 0;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ position: relative;
+ text-transform: uppercase;
+}
+.ui-fileupload.has-focus-ring.is-active .ui-fileupload__focus-ring,
+ body[modality="keyboard"] .ui-fileupload.is-active .ui-fileupload__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-fileupload:not(.is-multiple) .ui-fileupload__display-text {
+ text-transform: none;
+}
+.ui-fileupload.is-raised {
+ -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ -webkit-transition: -webkit-box-shadow 0.1s;
+ transition: -webkit-box-shadow 0.1s;
+ transition: box-shadow 0.1s;
+ transition: box-shadow 0.1s, -webkit-box-shadow 0.1s;
+}
+.ui-fileupload.is-raised.has-focus-ring.is-active,
+ body[modality="keyboard"] .ui-fileupload.is-raised.is-active {
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.22), 0 3px 6px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.22), 0 3px 6px rgba(0, 0, 0, 0.3);
+}
+.ui-fileupload.is-disabled {
+ cursor: default;
+ opacity: 0.6;
+}
+.ui-fileupload__input {
+ height: 0.1px;
+ opacity: 0;
+ overflow: hidden;
+ position: absolute;
+ z-index: -1;
+ width: 0.1px;
+}
+.ui-fileupload__content {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+ z-index: 1;
+}
+.ui-fileupload__icon {
+ margin-left: -0.25rem;
+ margin-right: 0.375rem;
+ margin-top: -0.125rem;
+}
+.ui-fileupload__focus-ring {
+ background-color: rgba(0, 0, 0, 0.12);
+ border-radius: 50%;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-fileupload--icon-position-right .ui-fileupload__icon {
+ margin-left: 0.375rem;
+ margin-right: -0.25rem;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.ui-fileupload--size-small {
+ font-size: 0.875rem;
+ height: 2rem;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+.ui-fileupload--size-small .ui-fileupload__icon {
+ margin-left: 0;
+ margin-top: 0;
+}
+.ui-fileupload--size-small .ui-fileupload__icon .ui-icon {
+ font-size: 1.125rem;
+}
+.ui-fileupload--size-small.ui-fileupload--icon-position-right .ui-fileupload__icon {
+ margin-left: 0.375rem;
+ margin-right: 0;
+}
+.ui-fileupload--size-large {
+ font-size: 1rem;
+ height: 3rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.ui-fileupload--size-large .ui-fileupload__icon {
+ margin-left: -0.25rem;
+ margin-right: 0.5rem;
+}
+.ui-fileupload--size-large.ui-fileupload--icon-position-right .ui-fileupload__icon {
+ margin-left: 0.5rem;
+ margin-right: -0.25rem;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-default {
+ background-color: #eeeeee;
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-fileupload--type-primary.ui-fileupload--color-default:hover:not(.is-disabled), .ui-fileupload--type-primary.ui-fileupload--color-default.has-focus-ring.is-active,
+ body[modality="keyboard"] .ui-fileupload--type-primary.ui-fileupload--color-default.is-active {
+ background-color: #dbdbdb;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-default .ui-ripple-ink__ink {
+ opacity: 0.2;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-default .ui-fileupload__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-fileupload--type-primary.ui-fileupload--color-primary, .ui-fileupload--type-primary.ui-fileupload--color-accent {
+ color: white;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-primary .ui-ripple-ink__ink, .ui-fileupload--type-primary.ui-fileupload--color-accent .ui-ripple-ink__ink {
+ opacity: 0.4;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-primary {
+ background-color: #607d8b;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-primary:hover:not(.is-disabled), .ui-fileupload--type-primary.ui-fileupload--color-primary.has-focus-ring.is-active,
+ body[modality="keyboard"] .ui-fileupload--type-primary.ui-fileupload--color-primary.is-active {
+ background-color: #4b626d;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-accent {
+ background-color: #1976d2;
+}
+.ui-fileupload--type-primary.ui-fileupload--color-accent:hover:not(.is-disabled), .ui-fileupload--type-primary.ui-fileupload--color-accent.has-focus-ring.is-active,
+ body[modality="keyboard"] .ui-fileupload--type-primary.ui-fileupload--color-accent.is-active {
+ background-color: #145ca4;
+}
+.ui-fileupload--type-secondary {
+ background-color: transparent;
+}
+.ui-fileupload--type-secondary:hover:not(.is-disabled), .ui-fileupload--type-secondary.has-focus-ring.is-active,
+ body[modality="keyboard"] .ui-fileupload--type-secondary.is-active {
+ background-color: #e6e6e6;
+}
+.ui-fileupload--type-secondary.ui-fileupload--color-default {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-fileupload--type-secondary.ui-fileupload--color-default .ui-fileupload__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-fileupload--type-secondary.ui-fileupload--color-primary {
+ color: #607d8b;
+}
+.ui-fileupload--type-secondary.ui-fileupload--color-accent {
+ color: #1976d2;
+}
+
+.ui-menu {
+ background-color: white;
+ border: 0.0625rem solid rgba(0, 0, 0, 0.08);
+ font-family: "Noto Sans", Arial, sans-serif;
+ list-style: none;
+ margin: 0;
+ max-height: 100vh;
+ max-width: 17rem;
+ min-width: 10.5rem;
+ outline: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0.25rem 0;
+}
+.ui-menu.is-raised {
+ border: none;
+ -webkit-box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);
+}
+.ui-menu.has-secondary-text {
+ min-width: 15rem;
+ max-width: 19rem;
+}
+.ui-menu__focus-redirector {
+ position: absolute;
+ opacity: 0;
+}
+
+.ui-menu-option {
+ display: block;
+ font-family: "Noto Sans", Arial, sans-serif;
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 100%;
+}
+.ui-menu-option.is-divider {
+ background-color: rgba(0, 0, 0, 0.08);
+ display: block;
+ height: 0.0625rem;
+ margin: 0.375rem 0;
+ padding: 0;
+}
+.ui-menu-option:not(.is-divider) {
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ font-size: 0.9375rem;
+ font-weight: normal;
+ min-height: 2.5rem;
+ outline: none;
+}
+.ui-menu-option:not(.is-divider):hover:not(.is-disabled),
+ body[modality="keyboard"] .ui-menu-option:not(.is-divider):focus {
+ background-color: #EEEEEE;
+}
+.ui-menu-option:not(.is-divider).is-disabled {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: default;
+ opacity: 0.5;
+}
+.ui-menu-option:not(.is-divider).is-disabled .ui-menu-option__secondary-text {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-menu-option__content {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 2.5rem;
+ padding: 0 1rem;
+}
+.ui-menu-option__icon {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.125rem;
+ margin-right: 1rem;
+}
+.ui-menu-option__text {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-menu-option__secondary-text {
+ color: rgba(0, 0, 0, 0.38);
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ font-size: 0.8125rem;
+ margin-left: 0.25rem;
+}
+
+.ui-radio-group {
+ font-family: "Noto Sans", Arial, sans-serif;
+}
+.ui-radio-group:not(.is-disabled):not(.is-invalid):hover .ui-radio-group__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-radio-group:not(.is-disabled):not(.is-invalid).is-active .ui-radio-group__label-text {
+ color: #607d8b;
+}
+.ui-radio-group.is-vertical .ui-radio-group__radios {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding-top: 0.5rem;
+}
+.ui-radio-group.is-vertical .ui-radio-group__radio {
+ margin-bottom: 0.75rem;
+ margin-left: 0;
+ width: 100%;
+}
+.ui-radio-group.is-invalid .ui-radio-group__label-text {
+ color: #f44336;
+}
+.ui-radio-group.is-invalid .ui-radio-group__feedback {
+ color: #f44336;
+}
+.ui-radio-group.is-disabled .ui-radio-group__feedback {
+ opacity: 0.8;
+}
+.ui-radio-group__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.9375rem;
+ line-height: normal;
+ -webkit-transition: color 0.1s ease;
+ transition: color 0.1s ease;
+}
+.ui-radio-group__radios {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ min-height: 2rem;
+}
+.ui-radio.ui-radio-group__radio {
+ margin-left: 1.5rem;
+}
+.ui-radio.ui-radio-group__radio:first-child {
+ margin-left: 0;
+}
+.ui-radio-group__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0rem;
+ position: relative;
+}
+.ui-radio-group--button-position-right:not(.is-vertical) .ui-radio__label-text {
+ margin-right: 0.5rem;
+}
+
+.ui-radio {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+ height: 1.25rem;
+ margin: 0;
+}
+.ui-radio:hover:not(.is-disabled):not(.is-checked) .ui-radio__outer-circle {
+ border: 0.125rem solid rgba(0, 0, 0, 0.54);
+}
+.ui-radio.is-checked .ui-radio__inner-circle {
+ opacity: 1;
+ -webkit-transform: scale(0.5);
+ -ms-transform: scale(0.5);
+ transform: scale(0.5);
+ z-index: 0;
+}
+.ui-radio.is-disabled {
+ opacity: 0.5;
+}
+.ui-radio.is-disabled .ui-radio__input-wrapper,
+ .ui-radio.is-disabled .ui-radio__label-text {
+ cursor: default;
+}
+.ui-radio__input-wrapper {
+ cursor: pointer;
+ height: 1.25rem;
+ position: relative;
+ width: 1.25rem;
+}
+.ui-radio__input {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ height: 1px;
+ left: 0;
+ margin: 0;
+ opacity: 0;
+ outline: none;
+ padding: 0;
+ position: absolute;
+ top: 0;
+ width: 1px;
+}
+body[modality="keyboard"] .ui-radio__input:focus + .ui-radio__focus-ring {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-radio__outer-circle {
+ background-color: transparent;
+ border-radius: 50%;
+ border: 0.125rem solid rgba(0, 0, 0, 0.38);
+ height: 1.25rem;
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: border-color 0.2s;
+ transition: border-color 0.2s;
+ width: 1.25rem;
+}
+.ui-radio__inner-circle {
+ background-color: rgba(0, 0, 0, 0.38);
+ border-radius: 50%;
+ height: 1.25rem;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform: scale(1.2);
+ -ms-transform: scale(1.2);
+ transform: scale(1.2);
+ -webkit-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+ -webkit-transition-property: opacity, background-color, -webkit-transform;
+ transition-property: opacity, background-color, -webkit-transform;
+ transition-property: transform, opacity, background-color;
+ transition-property: transform, opacity, background-color, -webkit-transform;
+ width: 1.25rem;
+ z-index: -1;
+}
+.ui-radio__focus-ring {
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 50%;
+ height: 2.625rem;
+ left: -0.6875rem;
+ opacity: 0;
+ position: absolute;
+ top: -0.6875rem;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: background-color 0.2s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ transition: background-color 0.2s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ transition: background-color 0.2s ease, transform 0.15s ease, opacity 0.15s ease;
+ transition: background-color 0.2s ease, transform 0.15s ease, opacity 0.15s ease, -webkit-transform 0.15s ease;
+ width: 2.625rem;
+ z-index: -1;
+}
+.ui-radio__label-text {
+ cursor: pointer;
+ font-size: 1rem;
+ margin-left: 0.5rem;
+}
+.ui-radio--button-position-right .ui-radio__label-text {
+ margin-left: 0;
+ margin-right: auto;
+ -webkit-box-ordinal-group: 0;
+ -webkit-order: -1;
+ -ms-flex-order: -1;
+ order: -1;
+}
+.ui-radio--color-primary.is-checked:not(.is-disabled) .ui-radio__outer-circle {
+ border-color: #607d8b;
+}
+.ui-radio--color-primary.is-checked:not(.is-disabled) .ui-radio__inner-circle {
+ background-color: #607d8b;
+}
+.ui-radio--color-primary.is-checked:not(.is-disabled) .ui-radio__focus-ring {
+ background-color: rgba(96, 125, 139, 0.2);
+}
+.ui-radio--color-accent.is-checked:not(.is-disabled) .ui-radio__outer-circle {
+ border-color: #1976d2;
+}
+.ui-radio--color-accent.is-checked:not(.is-disabled) .ui-radio__inner-circle {
+ background-color: #1976d2;
+}
+.ui-radio--color-accent.is-checked:not(.is-disabled) .ui-radio__focus-ring {
+ background-color: rgba(25, 118, 210, 0.2);
+}
+
+.ui-select {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 1rem;
+ outline: none;
+ position: relative;
+}
+.ui-select:hover:not(.is-disabled) .ui-select__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.ui-select:hover:not(.is-disabled) .ui-select__display {
+ border-bottom-color: rgba(0, 0, 0, 0.3);
+}
+.ui-select:hover:not(.is-disabled) .ui-select__dropdown-button {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-select.is-active:not(.is-disabled) .ui-select__label-text,
+ .ui-select.is-active:not(.is-disabled) .ui-select__icon-wrapper .ui-icon {
+ color: #607d8b;
+}
+.ui-select.is-active:not(.is-disabled) .ui-select__display {
+ border-bottom-color: #607d8b;
+ border-bottom-width: 2px;
+}
+.ui-select.has-floating-label .ui-select__label-text {
+ display: table;
+}
+.ui-select.has-floating-label .ui-select__label-text.is-inline {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: pointer;
+ -webkit-transform: translateY(1.625rem) scale(1.1);
+ -ms-transform: translateY(1.625rem) scale(1.1);
+ transform: translateY(1.625rem) scale(1.1);
+}
+.ui-select.has-floating-label .ui-select__label-text.is-floating {
+ -webkit-transform: translateY(0) scale(1);
+ -ms-transform: translateY(0) scale(1);
+ transform: translateY(0) scale(1);
+}
+.ui-select.has-label .ui-select__icon-wrapper {
+ padding-top: 1.5rem;
+}
+.ui-select.has-label .ui-select__dropdown-button {
+ top: 1.6875rem;
+}
+.ui-select:not(.is-multiple) .ui-select__display {
+ height: 2rem;
+ line-height: 1;
+}
+.ui-select.is-multiple .ui-select__display {
+ line-height: 1.4;
+ padding-bottom: 0.25rem;
+ padding-top: 0.25rem;
+}
+.ui-select.is-invalid:not(.is-disabled) .ui-select__label-text,
+ .ui-select.is-invalid:not(.is-disabled) .ui-select__icon-wrapper .ui-icon {
+ color: #f44336;
+}
+.ui-select.is-invalid:not(.is-disabled) .ui-select__display {
+ border-bottom-color: #f44336;
+}
+.ui-select.is-invalid:not(.is-disabled) .ui-select__feedback {
+ color: #f44336;
+}
+.ui-select.is-disabled .ui-select__display {
+ border-bottom-style: dotted;
+ border-bottom-width: 2px;
+ color: rgba(0, 0, 0, 0.38);
+ cursor: default;
+}
+.ui-select.is-disabled .ui-select__dropdown-button,
+ .ui-select.is-disabled .ui-select__display-value.is-placeholder {
+ color: rgba(0, 0, 0, 0.38);
+ opacity: 0.6;
+}
+.ui-select.is-disabled .ui-select__icon-wrapper .ui-icon {
+ opacity: 0.6;
+}
+.ui-select.is-disabled .ui-select__feedback {
+ opacity: 0.8;
+}
+.ui-select__label {
+ display: block;
+ margin: 0;
+ outline: none;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.ui-select__icon-wrapper {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 0.75rem;
+ padding-top: 0.25rem;
+}
+.ui-select__icon-wrapper .ui-icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-select__content {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-select__label-text {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: default;
+ font-size: 0.9375rem;
+ line-height: normal;
+ margin-bottom: 0;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ -webkit-transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, -webkit-transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease;
+ transition: color 0.1s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
+}
+.ui-select__display {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border: none;
+ border-bottom-color: rgba(0, 0, 0, 0.12);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 1rem;
+ font-weight: normal;
+ padding: 0;
+ -webkit-transition: border 0.1s ease;
+ transition: border 0.1s ease;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 100%;
+}
+.ui-select__display-value {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-select__display-value.is-placeholder {
+ color: rgba(0, 0, 0, 0.38);
+}
+.ui-select__dropdown-button {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.125rem;
+ margin-left: auto;
+ margin-right: -0.25rem;
+}
+.ui-select__dropdown {
+ background-color: white;
+ -webkit-box-shadow: 1px 2px 8px #757575;
+ box-shadow: 1px 2px 8px #757575;
+ color: rgba(0, 0, 0, 0.87);
+ display: block;
+ list-style-type: none;
+ margin: 0;
+ margin-bottom: 0.5rem;
+ min-width: 11.25rem;
+ outline: none;
+ padding: 0;
+ position: absolute;
+ width: 100%;
+ z-index: 1000000040;
+}
+.ui-select__search-input {
+ background: none;
+ border: none;
+ border-bottom-color: rgba(0, 0, 0, 0.12);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ border-radius: 0;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: auto;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+ font-weight: normal;
+ height: 2.25rem;
+ outline: none;
+ padding: 0 0.75rem;
+ padding-left: 2.5rem;
+ -webkit-transition: border 0.1s ease;
+ transition: border 0.1s ease;
+ width: 100%;
+}
+.ui-select__search-input::-ms-clear {
+ display: none;
+}
+.ui-select__search-input:focus + .ui-select__search-icon {
+ color: #607d8b;
+}
+.ui-select__search-icon,
+.ui-select__search-progress {
+ position: absolute;
+ top: 0.5rem;
+}
+.ui-select__search-icon {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.25rem;
+ left: 0.75rem;
+}
+.ui-select__search-progress {
+ right: 0.75rem;
+}
+.ui-select__options {
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87);
+ display: block;
+ list-style-type: none;
+ margin: 0;
+ max-height: 16rem;
+ min-width: 100%;
+ overflow-y: auto;
+ padding: 0;
+ position: relative;
+}
+.ui-select__no-results {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ padding: 0.5rem 0.75rem;
+ width: 100%;
+}
+.ui-select__feedback {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 0.875rem;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0.25rem;
+ position: relative;
+}
+.ui-select--icon-position-right .ui-select__icon-wrapper {
+ margin-left: 0.5rem;
+ margin-right: 0;
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.ui-select--transition-fade-enter-active,
+.ui-select--transition-fade-leave-active {
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+}
+.ui-select--transition-fade-enter,
+.ui-select--transition-fade-leave-active {
+ opacity: 0;
+}
+
+.ui-select-option {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 0.9375rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ui-select-option.is-selected {
+ background-color: rgba(0, 0, 0, 0.05);
+ color: #607d8b;
+ font-weight: 500;
+}
+.ui-select-option.is-selected .ui-select-option__checkbox {
+ color: #607d8b;
+}
+.ui-select-option.is-highlighted {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.ui-select-option__basic,
+.ui-select-option__image-text {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-select-option__image {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.ui-select-option__image-object {
+ background-position: 50%;
+ background-size: cover;
+ border-radius: 50%;
+ height: 2rem;
+ margin-right: 0.75rem;
+ width: 2rem;
+}
+.ui-select-option__checkbox {
+ color: rgba(0, 0, 0, 0.38);
+ margin-left: auto;
+}
+.ui-select-option--type-basic {
+ padding: 0.375rem 0.75rem;
+}
+.ui-select-option--type-image {
+ padding: 0.25rem 0.75rem;
+}
+
+.ui-slider {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ outline: none;
+}
+.ui-slider:not(.is-disabled).is-active:not(.has-marker) .ui-slider__thumb::before, .ui-slider:not(.is-disabled).is-dragging:not(.has-marker) .ui-slider__thumb::before {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.ui-slider:not(.is-disabled).is-active .ui-slider__marker, .ui-slider:not(.is-disabled).is-dragging .ui-slider__marker {
+ opacity: 1;
+ -webkit-transform: scale(1) translateY(-1.625rem);
+ -ms-transform: scale(1) translateY(-1.625rem);
+ transform: scale(1) translateY(-1.625rem);
+}
+.ui-slider:not(.is-disabled).is-active .ui-slider__marker-text, .ui-slider:not(.is-disabled).is-dragging .ui-slider__marker-text {
+ color: white;
+}
+.ui-slider:not(.is-disabled).is-active .ui-slider__snap-point, .ui-slider:not(.is-disabled).is-dragging .ui-slider__snap-point {
+ opacity: 1;
+}
+.ui-slider:not(.is-disabled).is-active .ui-slider__icon .ui-icon, .ui-slider:not(.is-disabled).is-dragging .ui-slider__icon .ui-icon {
+ color: #607d8b;
+}
+.ui-slider.is-disabled .ui-slider__icon {
+ opacity: 0.6;
+}
+.ui-slider.is-disabled .ui-slider__track {
+ cursor: default;
+}
+.ui-slider.is-disabled .ui-slider__track-fill {
+ background-color: transparent;
+}
+.ui-slider.is-disabled .ui-slider__thumb {
+ background-color: #DDD;
+ border: 0.125rem solid white;
+}
+.ui-slider__icon {
+ margin-right: 1rem;
+}
+.ui-slider__icon .ui-icon {
+ color: rgba(0, 0, 0, 0.54);
+ -webkit-transition: color 0.2s ease;
+ transition: color 0.2s ease;
+}
+.ui-slider__track {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 1.125rem;
+ margin: 0 auto;
+ position: relative;
+ width: 100%;
+}
+.ui-slider__track-background,
+.ui-slider__track-fill {
+ content: '';
+ display: block;
+ height: 0.1875rem;
+ left: 0;
+ position: absolute;
+ top: 0.46875rem;
+}
+.ui-slider__track-background {
+ background-color: rgba(0, 0, 0, 0.12);
+ width: 100%;
+}
+.ui-slider__snap-point {
+ background-color: rgba(0, 0, 0, 0.75);
+ height: 0.1875rem;
+ opacity: 0;
+ position: absolute;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ width: 0.125rem;
+ z-index: 1;
+}
+.ui-slider__track-fill {
+ background-color: #607d8b;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ width: 100%;
+}
+.ui-slider__thumb {
+ background-color: #607d8b;
+ border-radius: 50%;
+ cursor: inherit;
+ display: block;
+ height: 0.875rem;
+ left: 0;
+ position: relative;
+ width: 0.875rem;
+ z-index: 1;
+}
+.ui-slider__thumb::before {
+ background-color: rgba(96, 125, 139, 0.38);
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 2.25rem;
+ margin-left: -0.6875rem;
+ margin-top: -0.6875rem;
+ position: absolute;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: -webkit-transform 0.2s ease;
+ transition: -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease;
+ transition: transform 0.2s ease, -webkit-transform 0.2s ease;
+ width: 2.25rem;
+}
+.ui-slider__marker {
+ height: 2.25rem;
+ margin-left: -0.6875rem;
+ margin-top: -0.6875rem;
+ opacity: 0;
+ position: absolute;
+ -webkit-transform: scale(0) translateY(0);
+ -ms-transform: scale(0) translateY(0);
+ transform: scale(0) translateY(0);
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 2.25rem;
+}
+.ui-slider__marker svg {
+ fill: #607d8b;
+ height: 2.25rem;
+ width: 2.25rem;
+}
+.ui-slider__marker-text {
+ color: #607d8b;
+ font-size: 0.8125rem;
+ font-weight: 500;
+ left: 0;
+ position: absolute;
+ text-align: center;
+ top: 0.25rem;
+ -webkit-transition: color 0.2s ease;
+ transition: color 0.2s ease;
+ width: 2.25rem;
+}
+.ui-slider--is-dragging {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.ui-tabs {
+ margin-bottom: 1.5rem;
+ width: 100%;
+}
+.ui-tabs.is-fullwidth .ui-tab-header-item {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-tabs.is-raised {
+ border: none;
+ -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+}
+.ui-tabs.is-raised .ui-tabs__body {
+ border: none;
+}
+.ui-tabs__header {
+ position: relative;
+ width: 100%;
+}
+.ui-tabs__header-items {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.ui-tabs__active-tab-indicator {
+ bottom: 0;
+ -webkit-box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.05);
+ height: 0.125rem;
+ position: absolute;
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+}
+.ui-tabs__body {
+ background-color: white;
+ border-radius: 0;
+ border: 0.0625rem solid #eeeeee;
+ border-top: 0;
+ margin: 0;
+ padding: 1rem;
+}
+.ui-tabs--background-color-default .ui-tabs__header {
+ background-color: #eeeeee;
+}
+body[modality="keyboard"] .ui-tabs--background-color-default .ui-tab-header-item:focus {
+ outline: 1px solid #607d8b;
+}
+body[modality="keyboard"] .ui-tabs--background-color-primary .ui-tab-header-item:focus, body[modality="keyboard"]
+.ui-tabs--background-color-accent .ui-tab-header-item:focus, body[modality="keyboard"]
+.ui-tabs--background-color-clear .ui-tab-header-item:focus {
+ outline: 1px solid white;
+}
+.ui-tabs--background-color-primary .ui-ripple-ink__ink.is-held,
+.ui-tabs--background-color-accent .ui-ripple-ink__ink.is-held,
+.ui-tabs--background-color-clear .ui-ripple-ink__ink.is-held {
+ opacity: 0.7;
+}
+.ui-tabs--background-color-primary .ui-tabs__header {
+ background-color: #607d8b;
+}
+.ui-tabs--background-color-accent .ui-tabs__header {
+ background-color: #1976d2;
+}
+.ui-tabs--background-color-clear .ui-tabs__header {
+ background-color: transparent;
+}
+.ui-tabs--background-color-clear .ui-tabs__header + .ui-tabs__body {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+}
+.ui-tabs--text-color-black .ui-tab-header-item {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-tabs--text-color-black .ui-tab-header-item__icon {
+ color: rgba(0, 0, 0, 0.54);
+}
+.ui-tabs--text-color-white .ui-tab-header-item {
+ color: rgba(255, 255, 255, 0.65);
+}
+.ui-tabs--text-color-white .ui-tab-header-item__icon {
+ color: rgba(255, 255, 255, 0.65);
+}
+.ui-tabs--text-color-active-white .ui-tab-header-item.is-active {
+ color: white;
+}
+.ui-tabs--text-color-active-white .ui-tab-header-item.is-active .ui-tab-header-item__icon {
+ color: white;
+}
+.ui-tabs--text-color-active-primary .ui-tab-header-item.is-active {
+ color: #607d8b;
+}
+.ui-tabs--text-color-active-primary .ui-tab-header-item.is-active .ui-tab-header-item__icon {
+ color: #607d8b;
+}
+.ui-tabs--text-color-active-accent .ui-tab-header-item.is-active {
+ color: #1976d2;
+}
+.ui-tabs--text-color-active-accent .ui-tab-header-item.is-active .ui-tab-header-item__icon {
+ color: #1976d2;
+}
+.ui-tabs--indicator-color-primary .ui-tabs__active-tab-indicator {
+ background-color: #607d8b;
+}
+.ui-tabs--indicator-color-accent .ui-tabs__active-tab-indicator {
+ background-color: #1976d2;
+}
+.ui-tabs--indicator-color-white .ui-tabs__active-tab-indicator {
+ background-color: white;
+}
+
+.ui-tab-header-item {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ height: 3rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ min-width: 5rem;
+ padding: 0 0.75rem;
+ position: relative;
+ text-transform: uppercase;
+}
+.ui-tab-header-item:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.ui-tab-header-item.is-disabled {
+ background-color: transparent;
+ cursor: default;
+ opacity: 0.4;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ui-tab-header-item--type-icon-and-text {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: 4.5rem;
+}
+.ui-tab-header-item--type-icon-and-text .ui-tab-header-item__icon {
+ margin-bottom: 0.25rem;
+}
+.ui-tab-header-item__text {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 0.9375rem;
+ font-weight: 500;
+}
+.ui-tab-header-item__icon {
+ height: 1.5rem;
+ width: 1.5rem;
+}
+.ui-tab-header-item__icon .ui-icon {
+ cursor: inherit;
+}
+
+.ui-tab {
+ outline: none;
+}
+
+.autocomplete-item {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: transparent;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 8px 12px;
+ text-align: left;
+ top: 100%;
+ width: 100%;
+}
+.autocomplete-item:hover {
+ background-color: rgba(0, 0, 0, 0.06);
+}
+.autocomplete-item.selected {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.autocomplete-item .item-value {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ line-height: 32px;
+}
+.autocomplete-item .item-actions {
+ -webkit-box-align: end;
+ -webkit-align-items: flex-end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+}
+
+.autocomplete {
+ background-color: #ffffff;
+ -webkit-box-shadow: 1px 2px 8px #757575;
+ box-shadow: 1px 2px 8px #757575;
+ display: block;
+ list-style: none;
+ margin: 0 0 8px;
+ padding: 0;
+ position: absolute;
+ top: 100%;
+ width: 100%;
+ z-index: 1;
+}
+
+.editor-no-options {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ color: rgba(0, 0, 0, 0.38);
+}
+/* BASICS */
+
+.CodeMirror {
+ /* Set height, width, borders, and global font properties here */
+ font-family: monospace;
+ height: 300px;
+ color: black;
+ direction: ltr;
+}
+
+/* PADDING */
+
+.CodeMirror-lines {
+ padding: 4px 0; /* Vertical padding around content */
+}
+.CodeMirror pre {
+ padding: 0 4px; /* Horizontal padding of content */
+}
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ background-color: white; /* The little square between H and V scrollbars */
+}
+
+/* GUTTER */
+
+.CodeMirror-gutters {
+ border-right: 1px solid #ddd;
+ background-color: #f7f7f7;
+ white-space: nowrap;
+}
+.CodeMirror-linenumbers {}
+.CodeMirror-linenumber {
+ padding: 0 3px 0 5px;
+ min-width: 20px;
+ text-align: right;
+ color: #999;
+ white-space: nowrap;
+}
+
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
+/* CURSOR */
+
+.CodeMirror-cursor {
+ border-left: 1px solid black;
+ border-right: none;
+ width: 0;
+}
+/* Shown when moving in bi-directional text */
+.CodeMirror div.CodeMirror-secondarycursor {
+ border-left: 1px solid silver;
+}
+.cm-fat-cursor .CodeMirror-cursor {
+ width: auto;
+ border: 0 !important;
+ background: #7e7;
+}
+.cm-fat-cursor div.CodeMirror-cursors {
+ z-index: 1;
+}
+.cm-fat-cursor-mark {
+ background-color: rgba(20, 255, 20, 0.5);
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+}
+.cm-animate-fat-cursor {
+ width: auto;
+ border: 0;
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+ background-color: #7e7;
+}
+@-moz-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@-webkit-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.CodeMirror-overwrite .CodeMirror-cursor {}
+
+.cm-tab { display: inline-block; text-decoration: inherit; }
+
+.CodeMirror-rulers {
+ position: absolute;
+ left: 0; right: 0; top: -50px; bottom: -20px;
+ overflow: hidden;
+}
+.CodeMirror-ruler {
+ border-left: 1px solid #ccc;
+ top: 0; bottom: 0;
+ position: absolute;
+}
+
+/* DEFAULT THEME */
+
+.cm-s-default .cm-header {color: blue;}
+.cm-s-default .cm-quote {color: #090;}
+.cm-negative {color: #d44;}
+.cm-positive {color: #292;}
+.cm-header, .cm-strong {font-weight: bold;}
+.cm-em {font-style: italic;}
+.cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
+
+.cm-s-default .cm-keyword {color: #708;}
+.cm-s-default .cm-atom {color: #219;}
+.cm-s-default .cm-number {color: #164;}
+.cm-s-default .cm-def {color: #00f;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
+.cm-s-default .cm-variable-2 {color: #05a;}
+.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
+.cm-s-default .cm-comment {color: #a50;}
+.cm-s-default .cm-string {color: #a11;}
+.cm-s-default .cm-string-2 {color: #f50;}
+.cm-s-default .cm-meta {color: #555;}
+.cm-s-default .cm-qualifier {color: #555;}
+.cm-s-default .cm-builtin {color: #30a;}
+.cm-s-default .cm-bracket {color: #997;}
+.cm-s-default .cm-tag {color: #170;}
+.cm-s-default .cm-attribute {color: #00c;}
+.cm-s-default .cm-hr {color: #999;}
+.cm-s-default .cm-link {color: #00c;}
+
+.cm-s-default .cm-error {color: #f00;}
+.cm-invalidchar {color: #f00;}
+
+.CodeMirror-composing { border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
+.CodeMirror-activeline-background {background: #e8f2ff;}
+
+/* STOP */
+
+/* The rest of this file contains styles related to the mechanics of
+ the editor. You probably shouldn't touch them. */
+
+.CodeMirror {
+ position: relative;
+ overflow: hidden;
+ background: white;
+}
+
+.CodeMirror-scroll {
+ overflow: scroll !important; /* Things will break if this is overridden */
+ /* 30px is the magic margin used to hide the element's real scrollbars */
+ /* See overflow: hidden in .CodeMirror */
+ margin-bottom: -30px; margin-right: -30px;
+ padding-bottom: 30px;
+ height: 100%;
+ outline: none; /* Prevent dragging from highlighting the element */
+ position: relative;
+}
+.CodeMirror-sizer {
+ position: relative;
+ border-right: 30px solid transparent;
+}
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+ before actual scrolling happens, thus preventing shaking and
+ flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ position: absolute;
+ z-index: 6;
+ display: none;
+}
+.CodeMirror-vscrollbar {
+ right: 0; top: 0;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+.CodeMirror-hscrollbar {
+ bottom: 0; left: 0;
+ overflow-y: hidden;
+ overflow-x: scroll;
+}
+.CodeMirror-scrollbar-filler {
+ right: 0; bottom: 0;
+}
+.CodeMirror-gutter-filler {
+ left: 0; bottom: 0;
+}
+
+.CodeMirror-gutters {
+ position: absolute; left: 0; top: 0;
+ min-height: 100%;
+ z-index: 3;
+}
+.CodeMirror-gutter {
+ white-space: normal;
+ height: 100%;
+ display: inline-block;
+ vertical-align: top;
+ margin-bottom: -30px;
+}
+.CodeMirror-gutter-wrapper {
+ position: absolute;
+ z-index: 4;
+ background: none !important;
+ border: none !important;
+}
+.CodeMirror-gutter-background {
+ position: absolute;
+ top: 0; bottom: 0;
+ z-index: 4;
+}
+.CodeMirror-gutter-elt {
+ position: absolute;
+ cursor: default;
+ z-index: 4;
+}
+.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
+.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
+
+.CodeMirror-lines {
+ cursor: text;
+ min-height: 1px; /* prevents collapsing before first draw */
+}
+.CodeMirror pre {
+ /* Reset some styles that the rest of the page might have set */
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+ border-width: 0;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+ line-height: inherit;
+ color: inherit;
+ z-index: 2;
+ position: relative;
+ overflow: visible;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-font-variant-ligatures: contextual;
+ font-variant-ligatures: contextual;
+}
+.CodeMirror-wrap pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: normal;
+}
+
+.CodeMirror-linebackground {
+ position: absolute;
+ left: 0; right: 0; top: 0; bottom: 0;
+ z-index: 0;
+}
+
+.CodeMirror-linewidget {
+ position: relative;
+ z-index: 2;
+ padding: 0.1px; /* Force widget margins to stay inside of the container */
+}
+
+.CodeMirror-widget {}
+
+.CodeMirror-rtl pre { direction: rtl; }
+
+.CodeMirror-code {
+ outline: none;
+}
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+.CodeMirror-measure {
+ position: absolute;
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.CodeMirror-cursor {
+ position: absolute;
+ pointer-events: none;
+}
+.CodeMirror-measure pre { position: static; }
+
+div.CodeMirror-cursors {
+ visibility: hidden;
+ position: relative;
+ z-index: 3;
+}
+div.CodeMirror-dragcursors {
+ visibility: visible;
+}
+
+.CodeMirror-focused div.CodeMirror-cursors {
+ visibility: visible;
+}
+
+.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
+.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
+.cm-searching {
+ background-color: #ffa;
+ background-color: rgba(255, 255, 0, .4);
+}
+
+/* Used to force a border model for a node */
+.cm-force-border { padding-right: .1px; }
+
+@media print {
+ /* Hide the cursor when printing */
+ .CodeMirror div.CodeMirror-cursors {
+ visibility: hidden;
+ }
+}
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }
+
+.codemirror-wrapper .CodeMirror {
+ font-family: monospace;
+ padding: 0;
+ -webkit-transition: all 200ms ease;
+ transition: all 200ms ease;
+}
+.codemirror-wrapper .ui-textbox__feedback {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ -webkit-transition: all 200ms ease;
+ transition: all 200ms ease;
+}
+.codemirror-wrapper:hover:not(.is-disabled) .ui-textbox__feedback {
+ border-top: 1px solid rgba(0, 0, 0, 0.3);
+}
+.codemirror-wrapper.is-active:not(.is-disabled) .ui-textbox__feedback {
+ border-top: 2px solid #607d8b;
+}
+.codemirror-wrapper.is-invalid:not(.is-disabled) .CodeMirror {
+ border-bottom: 1px solid #f44336;
+}
+.codemirror-wrapper.is-disabled .ui-textbox__feedback {
+ border-top: 1px dotted rgba(0, 0, 0, 0.12);
+}
+
+.complex-list-item {
+ border: 1px solid rgba(0, 0, 0, 0.12);
+ border-radius: 2px;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ padding: 16px 16px 0;
+ -webkit-transition: -webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: -webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.complex-list-item:hover {
+ -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
+}
+.complex-list-item.is-current {
+ -webkit-box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);
+}
+.complex-list-item-hidden {
+ height: 100px;
+}
+.complex-list-item-collapsed {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ padding-bottom: 16px;
+}
+.complex-list-item-collapsed-index {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: rgba(0, 0, 0, 0.54);
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+.complex-list-item-collapsed-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: rgba(0, 0, 0, 0.87);
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ overflow: hidden;
+ padding: 0 16px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.complex-list-item-collapsed-caret {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+.complex-list-item-inner {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ cursor: auto;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ min-width: 100px;
+ padding: 0;
+ position: relative;
+ z-index: 1;
+}
+.complex-list-item-inner > form {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ height: 100%;
+ overflow: visible;
+ padding: 0;
+ width: 100%;
+}
+.complex-list-item-inner > form:before, .complex-list-item-inner > form:after {
+ content: '';
+ display: table;
+}
+.complex-list-item-inner > form:after {
+ clear: both;
+}
+.complex-list-item-inner .input-container {
+ -webkit-align-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: auto;
+ padding: 18px;
+}
+.complex-list-item-inner .hidden-submit {
+ display: none;
+}
+.complex-list-item + .complex-list-item {
+ margin-top: 10px;
+}
+.complex-list-item-actions {
+ border-top: 1px solid #eeeeee;
+ margin: 16px -16px 0;
+ padding: 8px 16px;
+ width: calc(100% + 32px);
+}
+.complex-list-item-actions-inner {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ width: 100%;
+}
+.complex-list-item-actions-left {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ color: rgba(0, 0, 0, 0.54);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ height: 36px;
+}
+.complex-list-item-position {
+ color: rgba(0, 0, 0, 0.54);
+ margin: 0 4px;
+}
+.complex-list-item-actions-right {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+
+.complex-list {
+ margin: 0;
+ width: 100%;
+}
+.complex-list > .ui-textbox {
+ margin-bottom: 10px;
+}
+.hide-show-enter,
+.hide-show-leave-to {
+ opacity: 0;
+}
+.hide-show-enter-to,
+.hide-show-leave {
+ opacity: 1;
+}
+.hide-show-enter-active,
+.hide-show-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+ box-sizing: border-box;
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ height: 100%;
+ margin: 0px;
+ position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+ visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+ pointer-events: none;
+}
+.ql-clipboard {
+ left: -100000px;
+ height: 1px;
+ overflow-y: hidden;
+ position: absolute;
+ top: 50%;
+}
+.ql-clipboard p {
+ margin: 0;
+ padding: 0;
+}
+.ql-editor {
+ box-sizing: border-box;
+ line-height: 1.42;
+ height: 100%;
+ outline: none;
+ overflow-y: auto;
+ padding: 12px 15px;
+ tab-size: 4;
+ -moz-tab-size: 4;
+ text-align: left;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+.ql-editor > * {
+ cursor: text;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+ margin: 0;
+ padding: 0;
+ counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+ padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+ list-style-type: none;
+}
+.ql-editor ul > li::before {
+ content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+ pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+ pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+ color: #777;
+ cursor: pointer;
+ pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+ content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+ content: '\2610';
+}
+.ql-editor li::before {
+ display: inline-block;
+ white-space: nowrap;
+ width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+ margin-left: -1.5em;
+ margin-right: 0.3em;
+ text-align: right;
+}
+.ql-editor li.ql-direction-rtl::before {
+ margin-left: 0.3em;
+ margin-right: -1.5em;
+}
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+ padding-left: 1.5em;
+}
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+ padding-right: 1.5em;
+}
+.ql-editor ol li {
+ counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+ counter-increment: list-0;
+}
+.ql-editor ol li:before {
+ content: counter(list-0, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+ counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+ content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+ counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+ counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+ content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+ counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+ counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+ content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+ counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+ counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+ content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+ counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+ counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+ content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+ counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+ counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+ content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+ counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+ counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+ content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+ counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+ counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+ content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+ counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+ counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+ content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+ padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+ padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+ padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+ padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+ padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+ padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+ padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+ padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+ padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+ padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+ padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+ padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+ padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+ padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+ padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+ padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+ padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+ padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+ padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+ padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+ padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+ padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+ padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+ padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+ padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+ padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+ padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+ padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+ padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+ padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+ padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+ padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+ padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+ padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+ padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+ padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+ display: block;
+ max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+ margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+ margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+ background-color: #000;
+}
+.ql-editor .ql-bg-red {
+ background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+ background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+ background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+ background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+ background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+ background-color: #93f;
+}
+.ql-editor .ql-color-white {
+ color: #fff;
+}
+.ql-editor .ql-color-red {
+ color: #e60000;
+}
+.ql-editor .ql-color-orange {
+ color: #f90;
+}
+.ql-editor .ql-color-yellow {
+ color: #ff0;
+}
+.ql-editor .ql-color-green {
+ color: #008a00;
+}
+.ql-editor .ql-color-blue {
+ color: #06c;
+}
+.ql-editor .ql-color-purple {
+ color: #93f;
+}
+.ql-editor .ql-font-serif {
+ font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+ font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-size-small {
+ font-size: 0.75em;
+}
+.ql-editor .ql-size-large {
+ font-size: 1.5em;
+}
+.ql-editor .ql-size-huge {
+ font-size: 2.5em;
+}
+.ql-editor .ql-direction-rtl {
+ direction: rtl;
+ text-align: inherit;
+}
+.ql-editor .ql-align-center {
+ text-align: center;
+}
+.ql-editor .ql-align-justify {
+ text-align: justify;
+}
+.ql-editor .ql-align-right {
+ text-align: right;
+}
+.ql-editor.ql-blank::before {
+ color: rgba(0,0,0,0.6);
+ content: attr(data-placeholder);
+ font-style: italic;
+ left: 15px;
+ pointer-events: none;
+ position: absolute;
+ right: 15px;
+}
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+ box-sizing: border-box;
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ height: 100%;
+ margin: 0px;
+ position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+ visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+ pointer-events: none;
+}
+.ql-clipboard {
+ left: -100000px;
+ height: 1px;
+ overflow-y: hidden;
+ position: absolute;
+ top: 50%;
+}
+.ql-clipboard p {
+ margin: 0;
+ padding: 0;
+}
+.ql-editor {
+ box-sizing: border-box;
+ line-height: 1.42;
+ height: 100%;
+ outline: none;
+ overflow-y: auto;
+ padding: 12px 15px;
+ tab-size: 4;
+ -moz-tab-size: 4;
+ text-align: left;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+.ql-editor > * {
+ cursor: text;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+ margin: 0;
+ padding: 0;
+ counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+ padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+ list-style-type: none;
+}
+.ql-editor ul > li::before {
+ content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+ pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+ pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+ color: #777;
+ cursor: pointer;
+ pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+ content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+ content: '\2610';
+}
+.ql-editor li::before {
+ display: inline-block;
+ white-space: nowrap;
+ width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+ margin-left: -1.5em;
+ margin-right: 0.3em;
+ text-align: right;
+}
+.ql-editor li.ql-direction-rtl::before {
+ margin-left: 0.3em;
+ margin-right: -1.5em;
+}
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+ padding-left: 1.5em;
+}
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+ padding-right: 1.5em;
+}
+.ql-editor ol li {
+ counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+ counter-increment: list-0;
+}
+.ql-editor ol li:before {
+ content: counter(list-0, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+ counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+ content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+ counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+ counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+ content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+ counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+ counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+ content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+ counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+ counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+ content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+ counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+ counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+ content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+ counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+ counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+ content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+ counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+ counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+ content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+ counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+ counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+ content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+ counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+ counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+ content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+ padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+ padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+ padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+ padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+ padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+ padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+ padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+ padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+ padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+ padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+ padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+ padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+ padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+ padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+ padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+ padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+ padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+ padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+ padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+ padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+ padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+ padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+ padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+ padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+ padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+ padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+ padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+ padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+ padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+ padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+ padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+ padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+ padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+ padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+ padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+ padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+ display: block;
+ max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+ margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+ margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+ background-color: #000;
+}
+.ql-editor .ql-bg-red {
+ background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+ background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+ background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+ background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+ background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+ background-color: #93f;
+}
+.ql-editor .ql-color-white {
+ color: #fff;
+}
+.ql-editor .ql-color-red {
+ color: #e60000;
+}
+.ql-editor .ql-color-orange {
+ color: #f90;
+}
+.ql-editor .ql-color-yellow {
+ color: #ff0;
+}
+.ql-editor .ql-color-green {
+ color: #008a00;
+}
+.ql-editor .ql-color-blue {
+ color: #06c;
+}
+.ql-editor .ql-color-purple {
+ color: #93f;
+}
+.ql-editor .ql-font-serif {
+ font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+ font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-size-small {
+ font-size: 0.75em;
+}
+.ql-editor .ql-size-large {
+ font-size: 1.5em;
+}
+.ql-editor .ql-size-huge {
+ font-size: 2.5em;
+}
+.ql-editor .ql-direction-rtl {
+ direction: rtl;
+ text-align: inherit;
+}
+.ql-editor .ql-align-center {
+ text-align: center;
+}
+.ql-editor .ql-align-justify {
+ text-align: justify;
+}
+.ql-editor .ql-align-right {
+ text-align: right;
+}
+.ql-editor.ql-blank::before {
+ color: rgba(0,0,0,0.6);
+ content: attr(data-placeholder);
+ font-style: italic;
+ left: 15px;
+ pointer-events: none;
+ position: absolute;
+ right: 15px;
+}
+.ql-bubble.ql-toolbar:after,
+.ql-bubble .ql-toolbar:after {
+ clear: both;
+ content: '';
+ display: table;
+}
+.ql-bubble.ql-toolbar button,
+.ql-bubble .ql-toolbar button {
+ background: none;
+ border: none;
+ cursor: pointer;
+ display: inline-block;
+ float: left;
+ height: 24px;
+ padding: 3px 5px;
+ width: 28px;
+}
+.ql-bubble.ql-toolbar button svg,
+.ql-bubble .ql-toolbar button svg {
+ float: left;
+ height: 100%;
+}
+.ql-bubble.ql-toolbar button:active:hover,
+.ql-bubble .ql-toolbar button:active:hover {
+ outline: none;
+}
+.ql-bubble.ql-toolbar input.ql-image[type=file],
+.ql-bubble .ql-toolbar input.ql-image[type=file] {
+ display: none;
+}
+.ql-bubble.ql-toolbar button:hover,
+.ql-bubble .ql-toolbar button:hover,
+.ql-bubble.ql-toolbar button:focus,
+.ql-bubble .ql-toolbar button:focus,
+.ql-bubble.ql-toolbar button.ql-active,
+.ql-bubble .ql-toolbar button.ql-active,
+.ql-bubble.ql-toolbar .ql-picker-label:hover,
+.ql-bubble .ql-toolbar .ql-picker-label:hover,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble.ql-toolbar .ql-picker-item:hover,
+.ql-bubble .ql-toolbar .ql-picker-item:hover,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected {
+ color: #fff;
+}
+.ql-bubble.ql-toolbar button:hover .ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
+ fill: #fff;
+}
+.ql-bubble.ql-toolbar button:hover .ql-stroke,
+.ql-bubble .ql-toolbar button:hover .ql-stroke,
+.ql-bubble.ql-toolbar button:focus .ql-stroke,
+.ql-bubble .ql-toolbar button:focus .ql-stroke,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
+ stroke: #fff;
+}
+@media (pointer: coarse) {
+ .ql-bubble.ql-toolbar button:hover:not(.ql-active),
+ .ql-bubble .ql-toolbar button:hover:not(.ql-active) {
+ color: #ccc;
+ }
+ .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,
+ .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,
+ .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
+ .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
+ fill: #ccc;
+ }
+ .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+ .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+ .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
+ .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
+ stroke: #ccc;
+ }
+}
+.ql-bubble {
+ box-sizing: border-box;
+}
+.ql-bubble * {
+ box-sizing: border-box;
+}
+.ql-bubble .ql-hidden {
+ display: none;
+}
+.ql-bubble .ql-out-bottom,
+.ql-bubble .ql-out-top {
+ visibility: hidden;
+}
+.ql-bubble .ql-tooltip {
+ position: absolute;
+ transform: translateY(10px);
+}
+.ql-bubble .ql-tooltip a {
+ cursor: pointer;
+ text-decoration: none;
+}
+.ql-bubble .ql-tooltip.ql-flip {
+ transform: translateY(-10px);
+}
+.ql-bubble .ql-formats {
+ display: inline-block;
+ vertical-align: middle;
+}
+.ql-bubble .ql-formats:after {
+ clear: both;
+ content: '';
+ display: table;
+}
+.ql-bubble .ql-stroke {
+ fill: none;
+ stroke: #ccc;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+ stroke-width: 2;
+}
+.ql-bubble .ql-stroke-miter {
+ fill: none;
+ stroke: #ccc;
+ stroke-miterlimit: 10;
+ stroke-width: 2;
+}
+.ql-bubble .ql-fill,
+.ql-bubble .ql-stroke.ql-fill {
+ fill: #ccc;
+}
+.ql-bubble .ql-empty {
+ fill: none;
+}
+.ql-bubble .ql-even {
+ fill-rule: evenodd;
+}
+.ql-bubble .ql-thin,
+.ql-bubble .ql-stroke.ql-thin {
+ stroke-width: 1;
+}
+.ql-bubble .ql-transparent {
+ opacity: 0.4;
+}
+.ql-bubble .ql-direction svg:last-child {
+ display: none;
+}
+.ql-bubble .ql-direction.ql-active svg:last-child {
+ display: inline;
+}
+.ql-bubble .ql-direction.ql-active svg:first-child {
+ display: none;
+}
+.ql-bubble .ql-editor h1 {
+ font-size: 2em;
+}
+.ql-bubble .ql-editor h2 {
+ font-size: 1.5em;
+}
+.ql-bubble .ql-editor h3 {
+ font-size: 1.17em;
+}
+.ql-bubble .ql-editor h4 {
+ font-size: 1em;
+}
+.ql-bubble .ql-editor h5 {
+ font-size: 0.83em;
+}
+.ql-bubble .ql-editor h6 {
+ font-size: 0.67em;
+}
+.ql-bubble .ql-editor a {
+ text-decoration: underline;
+}
+.ql-bubble .ql-editor blockquote {
+ border-left: 4px solid #ccc;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding-left: 16px;
+}
+.ql-bubble .ql-editor code,
+.ql-bubble .ql-editor pre {
+ background-color: #f0f0f0;
+ border-radius: 3px;
+}
+.ql-bubble .ql-editor pre {
+ white-space: pre-wrap;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding: 5px 10px;
+}
+.ql-bubble .ql-editor code {
+ font-size: 85%;
+ padding: 2px 4px;
+}
+.ql-bubble .ql-editor pre.ql-syntax {
+ background-color: #23241f;
+ color: #f8f8f2;
+ overflow: visible;
+}
+.ql-bubble .ql-editor img {
+ max-width: 100%;
+}
+.ql-bubble .ql-picker {
+ color: #ccc;
+ display: inline-block;
+ float: left;
+ font-size: 14px;
+ font-weight: 500;
+ height: 24px;
+ position: relative;
+ vertical-align: middle;
+}
+.ql-bubble .ql-picker-label {
+ cursor: pointer;
+ display: inline-block;
+ height: 100%;
+ padding-left: 8px;
+ padding-right: 2px;
+ position: relative;
+ width: 100%;
+}
+.ql-bubble .ql-picker-label::before {
+ display: inline-block;
+ line-height: 22px;
+}
+.ql-bubble .ql-picker-options {
+ background-color: #444;
+ display: none;
+ min-width: 100%;
+ padding: 4px 8px;
+ position: absolute;
+ white-space: nowrap;
+}
+.ql-bubble .ql-picker-options .ql-picker-item {
+ cursor: pointer;
+ display: block;
+ padding-bottom: 5px;
+ padding-top: 5px;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label {
+ color: #777;
+ z-index: 2;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill {
+ fill: #777;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
+ stroke: #777;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-options {
+ display: block;
+ margin-top: -1px;
+ top: 100%;
+ z-index: 1;
+}
+.ql-bubble .ql-color-picker,
+.ql-bubble .ql-icon-picker {
+ width: 28px;
+}
+.ql-bubble .ql-color-picker .ql-picker-label,
+.ql-bubble .ql-icon-picker .ql-picker-label {
+ padding: 2px 4px;
+}
+.ql-bubble .ql-color-picker .ql-picker-label svg,
+.ql-bubble .ql-icon-picker .ql-picker-label svg {
+ right: 4px;
+}
+.ql-bubble .ql-icon-picker .ql-picker-options {
+ padding: 4px 0px;
+}
+.ql-bubble .ql-icon-picker .ql-picker-item {
+ height: 24px;
+ width: 24px;
+ padding: 2px 4px;
+}
+.ql-bubble .ql-color-picker .ql-picker-options {
+ padding: 3px 5px;
+ width: 152px;
+}
+.ql-bubble .ql-color-picker .ql-picker-item {
+ border: 1px solid transparent;
+ float: left;
+ height: 16px;
+ margin: 2px;
+ padding: 0px;
+ width: 16px;
+}
+.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
+ position: absolute;
+ margin-top: -9px;
+ right: 0;
+ top: 50%;
+ width: 18px;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
+ content: attr(data-label);
+}
+.ql-bubble .ql-picker.ql-header {
+ width: 98px;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item::before {
+ content: 'Normal';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+ content: 'Heading 1';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+ content: 'Heading 2';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+ content: 'Heading 3';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+ content: 'Heading 4';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+ content: 'Heading 5';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+ content: 'Heading 6';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+ font-size: 2em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+ font-size: 1.5em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+ font-size: 1.17em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+ font-size: 1em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+ font-size: 0.83em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+ font-size: 0.67em;
+}
+.ql-bubble .ql-picker.ql-font {
+ width: 108px;
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item::before {
+ content: 'Sans Serif';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+ content: 'Serif';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+ content: 'Monospace';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+ font-family: Georgia, Times New Roman, serif;
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+ font-family: Monaco, Courier New, monospace;
+}
+.ql-bubble .ql-picker.ql-size {
+ width: 98px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item::before {
+ content: 'Normal';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+ content: 'Small';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+ content: 'Large';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+ content: 'Huge';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+ font-size: 10px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+ font-size: 18px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+ font-size: 32px;
+}
+.ql-bubble .ql-color-picker.ql-background .ql-picker-item {
+ background-color: #fff;
+}
+.ql-bubble .ql-color-picker.ql-color .ql-picker-item {
+ background-color: #000;
+}
+.ql-bubble .ql-toolbar .ql-formats {
+ margin: 8px 12px 8px 0px;
+}
+.ql-bubble .ql-toolbar .ql-formats:first-child {
+ margin-left: 12px;
+}
+.ql-bubble .ql-color-picker svg {
+ margin: 1px;
+}
+.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,
+.ql-bubble .ql-color-picker .ql-picker-item:hover {
+ border-color: #fff;
+}
+.ql-bubble .ql-tooltip {
+ background-color: #444;
+ border-radius: 25px;
+ color: #fff;
+}
+.ql-bubble .ql-tooltip-arrow {
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ content: " ";
+ display: block;
+ left: 50%;
+ margin-left: -6px;
+ position: absolute;
+}
+.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow {
+ border-bottom: 6px solid #444;
+ top: -6px;
+}
+.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow {
+ border-top: 6px solid #444;
+ bottom: -6px;
+}
+.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor {
+ display: block;
+}
+.ql-bubble .ql-tooltip.ql-editing .ql-formats {
+ visibility: hidden;
+}
+.ql-bubble .ql-tooltip-editor {
+ display: none;
+}
+.ql-bubble .ql-tooltip-editor input[type=text] {
+ background: transparent;
+ border: none;
+ color: #fff;
+ font-size: 13px;
+ height: 100%;
+ outline: none;
+ padding: 10px 20px;
+ position: absolute;
+ width: 100%;
+}
+.ql-bubble .ql-tooltip-editor a {
+ top: 10px;
+ position: absolute;
+ right: 20px;
+}
+.ql-bubble .ql-tooltip-editor a:before {
+ color: #ccc;
+ content: "\D7";
+ font-size: 16px;
+ font-weight: bold;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a {
+ position: relative;
+ white-space: nowrap;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::before {
+ background-color: #444;
+ border-radius: 15px;
+ top: -5px;
+ font-size: 12px;
+ color: #fff;
+ content: attr(href);
+ font-weight: normal;
+ overflow: hidden;
+ padding: 5px 15px;
+ text-decoration: none;
+ z-index: 1;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::after {
+ border-top: 6px solid #444;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ top: 0;
+ content: " ";
+ height: 0;
+ width: 0;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::before,
+.ql-container.ql-bubble:not(.ql-disabled) a::after {
+ left: 0;
+ margin-left: 50%;
+ position: absolute;
+ transform: translate(-50%, -100%);
+ transition: visibility 0s ease 200ms;
+ visibility: hidden;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a:hover::before,
+.ql-container.ql-bubble:not(.ql-disabled) a:hover::after {
+ visibility: visible;
+}
+
+.editor-inline .wysiwyg-input {
+ color: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ word-break: inherit;
+ cursor: text;
+ min-height: 19px;
+ outline: none;
+ white-space: normal;
+}
+.editor-inline .wysiwyg-input::-moz-selection {
+ background-color: #81d4fa;
+}
+.editor-inline .wysiwyg-input::selection {
+ background-color: #81d4fa;
+}
+.editor-inline .ql-container,
+.editor-inline .ql-editor {
+ color: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ word-break: inherit;
+}
+.wysiwyg-input *::-moz-selection {
+ background-color: #81d4fa;
+}
+.wysiwyg-input *::selection {
+ background-color: #81d4fa;
+}
+.ql-editor {
+ overflow: visible;
+ padding: 0;
+}
+.kiln-overlay-form .ql-container {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ font-size: 16px;
+ letter-spacing: normal;
+ line-height: normal;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a {
+ white-space: inherit;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::before {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ color: #ffffff;
+}
+.ql-bubble .ql-tooltip {
+ z-index: 1;
+}
+.ql-bubble.ql-toolbar button,
+.ql-bubble .ql-toolbar button {
+ height: 32px;
+ width: 32px;
+}
+.kiln-phrase-button {
+ color: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ word-break: inherit;
+ color: #ccc;
+ font-size: 21px;
+ font-weight: bold;
+}
+.kiln-phrase-button:hover {
+ color: #fff;
+}
+.ql-editor .kiln-phrase {
+ background-color: #fff2a8;
+}
+.ql-editor .clay-annotated {
+ background-color: #a8d1ff;
+}
+.ql-editor .clay-designed {
+ background-color: #ffb7b7;
+}
+.ui-textbox__input.wysiwyg-content {
+ height: auto;
+ min-height: 32px;
+}
+.ui-textbox__counter--wysiwyg {
+ font-size: 16px;
+ background-color: rgba(227, 242, 253, 0.75);
+ color: #1976d2;
+ line-height: 1em;
+ padding: .5em 1em;
+ top: auto;
+ mix-blend-mode: multiply;
+ font-family: "Noto Sans", Arial, sans-serif;
+}
+.ui-textbox__counter--wysiwyg-error {
+ background-color: rgba(255, 235, 238, 0.75);
+ color: #f44336;
+}
+
+.magic-button-icon svg {
+ fill: rgba(0, 0, 0, 0.87);
+ height: 18px;
+ margin-left: 3px;
+ margin-top: 3px;
+ -webkit-transition: 100ms fill ease;
+ transition: 100ms fill ease;
+ width: 20px;
+}
+.is-active .magic-button-icon svg {
+ fill: #607d8b;
+}
+.is-disabled .magic-button-icon {
+ pointer-events: none;
+}
+.is-disabled .magic-button-icon svg {
+ fill: rgba(0, 0, 0, 0.38);
+}
+.is-invalid .magic-button-icon svg {
+ fill: #f44336;
+}
+
+.editor-no-options {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ color: rgba(0, 0, 0, 0.38);
+}
+/* use variables and styling from KeenUI's UISlider component */
+.editor-range .noUi-target {
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-touch-callout: none;
+ background: rgba(0, 0, 0, 0.12);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 3px;
+ margin: 20px 0;
+ position: relative;
+ -ms-touch-action: none;
+ touch-action: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.editor-range .noUi-base,
+.editor-range .noUi-connects {
+ height: 100%;
+ position: relative;
+ width: 100%;
+ z-index: 2;
+}
+.editor-range .noUi-connects {
+ overflow: hidden;
+ z-index: 0;
+}
+.editor-range .noUi-connect,
+.editor-range .noUi-origin {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+ width: 100%;
+ will-change: transform;
+ z-index: 1;
+}
+.editor-range .noUi-connect {
+ background: #1976d2;
+}
+.editor-range .noUi-origin {
+ height: 0;
+ left: auto;
+ right: 0;
+}
+.editor-range .noUi-handle {
+ background: #1976d2;
+ border-radius: 50%;
+ cursor: default;
+ height: 14px;
+ left: auto;
+ position: absolute;
+ right: -7px;
+ top: -6px;
+ width: 14px;
+ z-index: 2;
+}
+.editor-range .noUi-handle:before {
+ background-color: rgba(25, 118, 210, 0.38);
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 36px;
+ left: -11px;
+ position: absolute;
+ top: -11px;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transition: -webkit-transform 0.2s ease;
+ transition: -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease;
+ transition: transform 0.2s ease, -webkit-transform 0.2s ease;
+ width: 36px;
+}
+.editor-range .noUi-state-tap .noUi-connect,
+.editor-range .noUi-state-tap .noUi-origin {
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s;
+}
+.editor-range .noUi-state-drag * {
+ cursor: inherit;
+}
+.editor-range .noUi-draggable {
+ cursor: ew-resize;
+}
+.editor-range:not(.has-tooltips) .noUi-active:before,
+.editor-range:not(.has-tooltips) .noUi-handle:focus:before {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.editor-range .noUi-tooltip {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36'%3E%3Cpath fill='%231976d2' d='M11 .5c-1.7.2-3.4.9-4.7 2-1.1.9-2 2-2.5 3.2-1.2 2.4-1.2 5.1-.1 7.7 1.1 2.6 2.8 5 5.3 7.5 1.2 1.2 2.8 2.7 3 2.7 0 0 .3-.2.6-.5 3.2-2.7 5.6-5.6 7.1-8.5.8-1.5 1.1-2.6 1.3-3.8.2-1.4 0-2.9-.5-4.3-1.2-3.2-4.1-5.4-7.5-5.8-.5-.2-1.5-.2-2-.2z'/%3E%3C/svg%3E");
+ background-size: 36px 36px;
+ color: #ffffff;
+ display: block;
+ font-size: 13px;
+ font-weight: 600;
+ height: 36px;
+ line-height: 13px;
+ margin-left: -11px;
+ margin-top: -11px;
+ opacity: 0;
+ padding-top: 8px;
+ position: absolute;
+ text-align: center;
+ -webkit-transform: scale(0) translateY(0);
+ -ms-transform: scale(0) translateY(0);
+ transform: scale(0) translateY(0);
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap;
+ width: 36px;
+}
+.editor-range .noUi-active .noUi-tooltip,
+.editor-range .noUi-handle:focus .noUi-tooltip {
+ opacity: 1;
+ -webkit-transform: scale(1) translateY(-26px);
+ -ms-transform: scale(1) translateY(-26px);
+ transform: scale(1) translateY(-26px);
+}
+.editor-range .noUi-pips {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.editor-range .noUi-value {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 11px;
+ position: absolute;
+ white-space: nowrap;
+ text-align: center;
+}
+.editor-range .noUi-value:nth-of-type(2) {
+ -webkit-transform: translate(0, 50%);
+ -ms-transform: translate(0, 50%);
+ transform: translate(0, 50%);
+}
+.editor-range .noUi-value:last-of-type {
+ -webkit-transform: translate(-100%, 50%);
+ -ms-transform: translate(-100%, 50%);
+ transform: translate(-100%, 50%);
+}
+.editor-range .noUi-marker {
+ background-color: rgba(0, 0, 0, 0.75);
+ height: 3px;
+ position: absolute;
+ -webkit-transition: opacity .2s ease;
+ transition: opacity .2s ease;
+ width: 2px;
+ z-index: 1;
+}
+
+.segmented-button-group {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 16px;
+}
+.segmented-button-group .reveal-enter,
+ .segmented-button-group .reveal-leave-to {
+ opacity: 0;
+}
+.segmented-button-group .reveal-enter-to,
+ .segmented-button-group .reveal-leave {
+ opacity: 1;
+}
+.segmented-button-group .reveal-enter-active,
+ .segmented-button-group .reveal-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.segmented-button-group .ui-textbox__label {
+ width: 100%;
+}
+.segmented-button-group .ui-textbox__label:before, .segmented-button-group .ui-textbox__label:after {
+ content: '';
+ display: table;
+}
+.segmented-button-group .ui-textbox__label:after {
+ clear: both;
+}
+.segmented-button-group:hover .ui-textbox__label-text {
+ color: rgba(0, 0, 0, 0.75);
+}
+.segmented-button-group.has-floating-label .ui-textbox__label-text {
+ display: table;
+}
+.segmented-button-group.is-invalid .ui-textbox__label-text {
+ color: #f44336;
+}
+.segmented-button-group.is-invalid .ui-textbox__feedback {
+ color: #f44336;
+}
+.segmented-button-group-input .segmented-button {
+ margin-bottom: 0;
+}
+.segmented-button-group-input .ui-textbox__label-text {
+ font-size: 14px;
+}
+
+.segmented-button {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin-bottom: 16px;
+}
+.segmented-button .ui-textbox__label {
+ width: 100%;
+}
+.segmented-button .ui-textbox__label:before, .segmented-button .ui-textbox__label:after {
+ content: '';
+ display: table;
+}
+.segmented-button .ui-textbox__label:after {
+ clear: both;
+}
+.segmented-button .button-toggle {
+ background-color: #ffffff;
+ border-radius: 2px;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ float: left;
+ margin: 10px 0;
+ -webkit-transition: 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+ transition: 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+ will-change: background, box-shadow;
+}
+.segmented-button .button-toggle.is-selected {
+ -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2), 0 2px 2px rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12);
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2), 0 2px 2px rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12);
+}
+.segmented-button.has-floating-label .ui-textbox__label-text {
+ display: table;
+}
+.segmented-button.is-invalid .ui-textbox__label-text {
+ color: #f44336;
+}
+.segmented-button.is-invalid .ui-textbox__feedback {
+ color: #f44336;
+}
+
+.segmented-button-segment {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: transparent;
+ border: none;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 36px;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 auto;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ opacity: .4;
+ outline: 0;
+ padding: 0 8px;
+ position: relative;
+ -webkit-transition: color 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+ transition: color 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+}
+.segmented-button-segment:before {
+ border-radius: inherit;
+ color: inherit;
+ content: '';
+ height: 100%;
+ left: 0;
+ opacity: .12;
+ position: absolute;
+ top: 0;
+ -webkit-transition: 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+ transition: 250ms cubic-bezier(0.25, 0.8, 0.5, 1);
+ width: 100%;
+}
+.segmented-button-segment:first-child {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+}
+.segmented-button-segment:not(:last-child) {
+ border-right: 1px solid transparent;
+}
+.segmented-button-segment:last-child {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.segmented-button-segment:hover:before, .segmented-button-segment:focus:before, .segmented-button-segment.is-checked:before {
+ background-color: currentColor;
+}
+.segmented-button-segment.is-checked {
+ opacity: 1;
+}
+.segmented-button-segment .segmented-button-img {
+ height: auto;
+ min-height: 22px;
+ width: 24px;
+}
+.segmented-button-segment .segmented-button-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ height: auto;
+ min-height: 14px;
+}
+
+.editor-no-options {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ color: rgba(0, 0, 0, 0.38);
+}
+
+.simple-list-input {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ height: 32px;
+ margin-bottom: 5px;
+ min-width: 100px;
+ position: relative;
+}
+.simple-list-input .simple-list-add {
+ border-bottom: none;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ width: auto;
+}
+
+.simple-list-item {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #e0e0e0;
+ border: none;
+ border-radius: 16px;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ font-size: 13px;
+ height: 32px;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 5px 5px 5px 0;
+ padding: 0;
+ -webkit-transition: all 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: all 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap;
+}
+.simple-list-item:focus {
+ outline: none;
+}
+.simple-list-item:hover:not(.is-disabled) {
+ background-color: #bdbdbd;
+}
+.simple-list-item:active:not(.is-disabled), .simple-list-item.is-current:not(.is-disabled) {
+ -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);
+ box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);
+}
+.simple-list-item .primary-badge {
+ background-color: #757575;
+ border-radius: 50%;
+ color: #ffffff;
+ display: none;
+ line-height: 32px;
+ height: 32px;
+ margin-right: -4px;
+ overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ width: 32px;
+}
+.simple-list-item .primary-badge.is-text {
+ color: #ffffff;
+ font-weight: bold;
+}
+.simple-list-item.is-primary .primary-badge {
+ display: block;
+}
+.simple-list-item .item-text {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: inherit;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 12px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap;
+}
+.simple-list-item .simple-list-remove {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: rgba(0, 0, 0, 0.26);
+ border: none;
+ border-radius: 50%;
+ color: #e0e0e0;
+ cursor: inherit;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 20px;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin-right: 6px;
+ padding: 0 0 0 1px;
+ -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ width: 20px;
+}
+.simple-list-item .simple-list-remove .ui-icon {
+ font-size: 14px;
+}
+.simple-list-item.is-disabled {
+ background-color: #fafafa;
+ color: rgba(0, 0, 0, 0.38);
+}
+.simple-list-item.is-disabled .simple-list-remove {
+ background-color: rgba(0, 0, 0, 0.38);
+}
+.simple-list-item .badge-enter,
+ .simple-list-item .badge-leave-to {
+ opacity: 0;
+}
+.simple-list-item .badge-enter-to,
+ .simple-list-item .badge-leave {
+ opacity: 1;
+}
+.simple-list-item .badge-enter-active,
+ .simple-list-item .badge-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.simple-list .simple-list-items {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ height: auto;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+.simple-list .simple-list-items-wrapper {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ max-width: 100%;
+}
+.simple-list .list-items-enter,
+.simple-list .list-items-leave-to {
+ opacity: 0;
+}
+.simple-list .list-items-enter-to,
+.simple-list .list-items-leave {
+ opacity: 1;
+}
+.simple-list .list-items-enter-active,
+.simple-list .list-items-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.static-input *::-moz-selection {
+ background-color: #81d4fa;
+}
+.static-input *::selection {
+ background-color: #81d4fa;
+}
+.static-input-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ height: 2rem;
+}
+.kiln-hide {
+ display: none !important; }
+
+.kiln-clearfix:before, .kiln-clearfix:after {
+ content: '';
+ display: table; }
+
+.kiln-clearfix:after {
+ clear: both; }
+
+.kiln-normal-text {
+ color: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ word-break: inherit; }
+
+.kiln-display1 {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 34px;
+ letter-spacing: normal;
+ line-height: 40px; }
+
+.kiln-headline {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 24px;
+ letter-spacing: normal;
+ line-height: 32px; }
+
+.kiln-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 18px;
+ letter-spacing: 0.005em;
+ line-height: 20px; }
+
+.kiln-subheading {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px; }
+
+.kiln-body {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px; }
+
+.kiln-caption {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px; }
+
+.kiln-button {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase; }
+
+.kiln-list-header {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 12px;
+ text-transform: uppercase; }
+
+.kiln-link {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ color: rgba(33, 150, 243, 0.87);
+ text-decoration: none; }
+ .kiln-link:active, .kiln-link:visited {
+ color: rgba(33, 150, 243, 0.87);
+ text-decoration: none; }
+ .kiln-link:hover {
+ color: rgba(33, 150, 243, 0.54);
+ text-decoration: none; }
+
+.kiln-link-invalid {
+ color: #FF0000 !important; }
+
+.kiln-keyboard {
+ background-color: #f5f5f5;
+ border: 1px solid #bdbdbd;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ color: rgba(0, 0, 0, 0.87);
+ display: inline-block;
+ font-size: 14px;
+ font-family: monospace, sans-serif;
+ font-weight: normal;
+ padding: 4px 8px;
+ line-height: 13px; }
+
+.kiln-code {
+ color: rgba(0, 0, 0, 0.87);
+ font-family: 'Consolas', 'Menlo', monospace;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 20px;
+ text-decoration: none; }
+
+.kiln-primary-color {
+ color: #607d8b; }
+
+.kiln-accent-color {
+ color: #1976d2; }
+
+.ui-tooltip {
+ font-family: "Noto Sans", Arial, sans-serif; }
+
+.ui-textbox__feedback {
+ font-family: "Noto Sans", Arial, sans-serif; }
+
+.ui-textbox {
+ margin: 0; }
+
+.ui-button__content {
+ font-weight: 600; }
+
+.ui-button--type-primary.ui-button--color-default .ui-button__icon,
+.ui-button--type-primary.ui-button--color-default .ui-button__dropdown-icon {
+ color: rgba(0, 0, 0, 0.87); }
+
+html.component-selector-wrapper {
+ font-size: 16px; }
+/* mirror is the element added while you are dragging. */
+.gu-mirror {
+ background-color: rgba(0, 0, 0, 0.3);
+ cursor: move;
+ cursor: -webkit-grab;
+ cursor: grab;
+ margin: 10px;
+ padding: 10px;
+ position: fixed !important;
+ -webkit-transition: opacity 0.4s ease-in-out;
+ transition: opacity 0.4s ease-in-out;
+ z-index: 9999 !important; }
+
+.gu-hide {
+ display: none !important; }
+
+.gu-unselectable {
+ -webkit-user-select: none !important;
+ -moz-user-select: none !important;
+ -ms-user-select: none !important;
+ user-select: none !important; }
+
+.gu-transit {
+ opacity: 0.2;
+ filter: alpha(opacity=20); }
+
+.gu-mirror {
+ opacity: 0.8;
+ filter: alpha(opacity=80); }
+
+/* Custom classes triggered by events (drag, cancel, drop) */
+/* Widen the drop area. */
+.dragula-drop-area:before {
+ bottom: 0;
+ content: '';
+ left: -30px;
+ position: absolute;
+ top: 0;
+ width: 30px; }
+
+/* The item while it is being dragged. */
+/* Indicate that the re-ordering has not been saved. */
+.dragula-not-saved {
+ background: rgba(96, 125, 139, 0.41) !important;
+ -webkit-transition: background-color 250ms linear;
+ transition: background-color 250ms linear; }
+
+.iframe-overlay-div {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%; }
+
+.complex-list-trash {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: #eceff1;
+ bottom: 50px;
+ color: #607d8b;
+ display: none;
+ height: 300px;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ left: 50px;
+ position: fixed;
+ width: 300px;
+ z-index: 9998; }
+ .complex-list-trash li {
+ /* hide item to be deleted while it's on the trash item */
+ display: none; }
+
+.complex-list-trash .material-icons {
+ content: 'delete';
+ font-size: 150px; }
+
+.complex-list-trash.dragula-drop-area .material-icons:not(:only-child) {
+ background: #ffebee;
+ color: #f44336;
+ font-size: 300px;
+ height: 100%;
+ width: 100%; }
+
+.complex-list-trash.dragula-drop-area {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex; }
+
+.complex-list-trash > .gu-transit {
+ display: block;
+ max-width: 200px;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ position: absolute; }
+@-webkit-keyframes fadeInKilnLogo {
+ 0% {
+ opacity: 0; }
+ 100% {
+ opacity: 1; } }
+
+@keyframes fadeInKilnLogo {
+ 0% {
+ opacity: 0; }
+ 100% {
+ opacity: 1; } }
+
+.clay-kiln-logo {
+ background-color: rgba(255, 255, 255, 0.8);
+ display: none;
+ height: 100vh;
+ left: 0;
+ opacity: 0;
+ position: fixed;
+ top: 0;
+ width: 100vw;
+ z-index: 99999; }
+
+.clay-kiln-logo.show {
+ -webkit-animation: 200ms ease forwards fadeInKilnLogo;
+ animation: 200ms ease forwards fadeInKilnLogo;
+ display: block; }
+
+.clay-kiln-logo svg {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 110px;
+ left: calc(50vw - 155px);
+ position: fixed;
+ top: calc(50vh - 55px);
+ width: 310px; }
+
+body {
+ padding-top: 56px !important;
+}
+.kiln-wrapper {
+ z-index: 1000000030;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ left: 0;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+.kiln-wrapper .ui-snackbar-container {
+ z-index: 1000000060;
+ bottom: 0;
+ position: fixed;
+}
+.kiln-wrapper .alert-container {
+ pointer-events: none;
+}
+.kiln-wrapper .alert-container > * {
+ pointer-events: all;
+}
+.kiln-progress {
+ height: 3px;
+ left: 0;
+ position: relative;
+ top: 0;
+ width: 100%;
+}
+.toolbar-action-menu.ui-icon-button {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+}
+.toolbar-action-menu.ui-icon-button.drawerOpen {
+ background: rgba(0, 0, 0, 0.1);
+}
+@media screen and (min-width: 600px) {
+.toolbar-action-menu.ui-icon-button {
+ display: none;
+}
+}
+.toolbar-action-button.ui-icon-button {
+ display: none;
+}
+.toolbar-action-button.ui-icon-button.is-open-drawer {
+ background-color: rgba(0, 0, 0, 0.3);
+}
+@media screen and (min-width: 600px) {
+.toolbar-action-button.ui-icon-button {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+}
+}
+.toolbar-publish-button.is-open-drawer {
+ background-color: rgba(0, 0, 0, 0.3);
+}
+.toolbar-button-text {
+ font-weight: bold;
+}
+.kiln-toolbar-actions .toolbar-publish-button {
+ display: none;
+}
+@media screen and (min-width: 600px) {
+.kiln-toolbar-actions .toolbar-publish-button {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+}
+}
+.ui-menu-option__content.activeMenuButton {
+ background: #eeeeee;
+}
+
+.nprogress-container {
+ left: 0;
+ overflow: visible;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.nprogress-container.nprogress-custom-parent {
+ overflow: visible;
+ position: absolute;
+}
+.nprogress-container #nprogress .bar {
+ z-index: 1000000030;
+ background-color: #1976d2;
+ -webkit-box-shadow: 0 0 10px 0 #1976d2;
+ box-shadow: 0 0 10px 0 #1976d2;
+ height: 3px;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+/* Make clicks pass-through */
+#nprogress {
+ pointer-events: none;
+}
+
+#nprogress .bar {
+ background: #29d;
+
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+
+ width: 100%;
+ height: 2px;
+}
+
+/* Fancy blur effect */
+#nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0px;
+ width: 100px;
+ height: 100%;
+ box-shadow: 0 0 10px #29d, 0 0 5px #29d;
+ opacity: 1.0;
+
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
+ -ms-transform: rotate(3deg) translate(0px, -4px);
+ transform: rotate(3deg) translate(0px, -4px);
+}
+
+/* Remove these to get rid of the spinner */
+#nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 15px;
+ right: 15px;
+}
+
+#nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
+ animation: nprogress-spinner 400ms linear infinite;
+}
+
+.nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+}
+
+.nprogress-custom-parent #nprogress .spinner,
+.nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+}
+
+@-webkit-keyframes nprogress-spinner {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+@keyframes nprogress-spinner {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+
+
+.editor-overlay-background {
+ z-index: 1000000040;
+ background-color: rgba(0, 0, 0, 0.4);
+ display: block;
+ height: 100%;
+ left: 0;
+ opacity: 1;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+.fade-enter-active, .fade-leave-active {
+ -webkit-transition: opacity 350ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 350ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.fade-enter, .fade-leave-to {
+ opacity: 0;
+}
+
+/* don't scroll the page when overlay (or pane) is open */
+.noscroll {
+ height: 100%;
+ overflow: hidden;
+}
+
+.kiln-overlay-form {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ cursor: auto;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ min-width: 100px;
+ padding: 0;
+ position: relative;
+ z-index: 1;
+ z-index: 1000000040;
+ background-color: #ffffff;
+ border-radius: 2px;
+ -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+ min-height: 50px;
+ min-width: 100px;
+ display: block;
+ height: auto;
+ max-height: calc(100vh - 100px);
+ max-width: 100vw;
+ opacity: 0;
+ position: fixed;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+ width: 600px;
+}
+.kiln-overlay-form > form {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ height: 100%;
+ overflow: visible;
+ padding: 0;
+ width: 100%;
+}
+.kiln-overlay-form > form:before, .kiln-overlay-form > form:after {
+ content: '';
+ display: table;
+}
+.kiln-overlay-form > form:after {
+ clear: both;
+}
+.kiln-overlay-form .input-container {
+ -webkit-align-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: auto;
+ padding: 18px;
+}
+.kiln-overlay-form .hidden-submit {
+ display: none;
+}
+.kiln-overlay-form .form-header {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #f5f5f5;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 56px;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ opacity: 0;
+ padding: 0 14px 0 24px;
+ position: relative;
+ width: 100%;
+}
+.kiln-overlay-form .form-header-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 18px;
+ letter-spacing: 0.005em;
+ line-height: 20px;
+ margin: 0;
+}
+.kiln-overlay-form .form-header-actions {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.kiln-overlay-form .form-close-divider {
+ border-left: 1px solid rgba(0, 0, 0, 0.12);
+ height: 22px;
+ margin-left: 10px;
+ width: 10px;
+}
+.kiln-overlay-form .form-contents {
+ display: block;
+ height: calc(100% - 56px);
+ opacity: 0;
+ position: relative;
+ width: 100%;
+}
+.kiln-overlay-form .form-contents .ui-tabs {
+ height: 100%;
+ margin: 0;
+}
+.kiln-overlay-form .form-contents .ui-tabs__body {
+ border: none;
+ height: 100%;
+ padding: 0;
+}
+.kiln-overlay-form .input-container-wrapper {
+ height: 100%;
+ margin: 0;
+ overflow: auto;
+ padding: 0;
+ width: 100%;
+}
+.kiln-overlay-form .input-container {
+ height: auto;
+ min-height: 100%;
+ padding: 16px 24px 24px;
+ position: relative;
+ width: 100%;
+}
+.kiln-overlay-form .required-footer {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ margin-top: 10px;
+ width: 100%;
+}
+
+.add-component-modal {
+ z-index: 1000000040;
+ background-color: #ffffff;
+ border-radius: 2px;
+ -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+ min-height: 50px;
+ min-width: 100px;
+ display: block;
+ height: auto;
+ max-height: calc(100vh - 100px);
+ max-width: 100vw;
+ opacity: 0;
+ position: fixed;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+ width: 600px;
+}
+.add-component-modal .add-component-header {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #f5f5f5;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 56px;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ opacity: 0;
+ padding: 0 14px 0 24px;
+ position: relative;
+ width: 100%;
+}
+.add-component-modal .add-component-header-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 18px;
+ letter-spacing: 0.005em;
+ line-height: 20px;
+ margin: 0;
+}
+.add-component-modal .add-component-header-actions {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.add-component-modal .add-component-close-divider {
+ border-left: 1px solid rgba(0, 0, 0, 0.12);
+ height: 22px;
+ margin-left: 10px;
+ width: 10px;
+}
+.add-component-modal .add-component-list {
+ display: block;
+ height: 500px;
+ opacity: 0;
+ padding: 8px;
+ position: relative;
+ width: 100%;
+}
+
+.simple-modal.ui-modal__mask {
+ z-index: 1000000060;
+ position: fixed;
+}
+.simple-modal.ui-modal__mask .ui-modal__container,
+ .simple-modal.ui-modal__mask .ui-modal__body {
+ overflow: visible;
+}
+
+.info-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ line-height: 20px;
+ margin: 0;
+}
+.info-text ul {
+ margin: 0;
+ padding-left: 17px;
+}
+.info-text a {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ color: rgba(33, 150, 243, 0.87);
+ text-decoration: none;
+}
+.info-text a:active, .info-text a:visited {
+ color: rgba(33, 150, 243, 0.87);
+ text-decoration: none;
+}
+.info-text a:hover {
+ color: rgba(33, 150, 243, 0.54);
+ text-decoration: none;
+}
+.info-text kbd {
+ background-color: #f5f5f5;
+ border: 1px solid #bdbdbd;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ color: rgba(0, 0, 0, 0.87);
+ display: inline-block;
+ font-size: 14px;
+ font-family: monospace, sans-serif;
+ font-weight: normal;
+ padding: 4px 8px;
+ line-height: 13px;
+}
+.info-text code {
+ color: rgba(0, 0, 0, 0.87);
+ font-family: 'Consolas', 'Menlo', monospace;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 20px;
+ text-decoration: none;
+}
+
+.keyboard-shortcuts .shortcut {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ padding: 10px 17px 10px;
+}
+.keyboard-shortcuts .shortcut + .shortcut {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ margin-top: 10px;
+}
+.keyboard-shortcuts .shortcut:first-of-type {
+ padding-top: 20px;
+}
+.keyboard-shortcuts .shortcut:last-of-type {
+ padding-bottom: 20px;
+}
+.keyboard-shortcuts .shortcut-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: #424242;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+}
+.keyboard-shortcuts .shortcut-keys {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ margin-left: 5px;
+}
+.keyboard-shortcuts .shortcut-key {
+ background-color: #f5f5f5;
+ border: 1px solid #bdbdbd;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 2px #ffffff inset;
+ color: rgba(0, 0, 0, 0.87);
+ display: inline-block;
+ font-size: 14px;
+ font-family: monospace, sans-serif;
+ font-weight: normal;
+ padding: 4px 8px;
+ line-height: 13px;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-left: 5px;
+}
+.keyboard-shortcuts .shortcut-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 100%;
+ -ms-flex: 1 0 100%;
+ flex: 1 0 100%;
+ margin-top: 5px;
+}
+
+.add-contributor {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: calc(100vh - 88px);
+}
+.invite-filter {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 16px 16px 0;
+}
+.invite-list {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ padding: 16px 16px 0;
+ overflow-y: scroll;
+}
+
+.add-page-modal .add-page-button {
+ margin-top: 16px;
+}
+
+.add-user-modal {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.add-user-modal .add-user-provider,
+ .add-user-modal .add-user-admin {
+ margin: 16px 0 0;
+ z-index: 0;
+}
+.add-user-modal .add-user-info {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ margin-top: 16px;
+}
+.add-user-modal .add-user-button {
+ margin-top: 16px;
+}
+
+.type-confirm .type-confirm-input {
+ margin: 8px 0 16px;
+}
+.type-confirm .ui-confirm__footer {
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.type-confirm .ui-confirm__footer .ui-button {
+ margin-left: 16px;
+}
+
+.type-reason .type-reason-input {
+ margin: 8px 0 16px;
+}
+.type-reason .ui-reason__footer {
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.type-reason .ui-reason__footer .ui-button {
+ margin-left: 16px;
+}
+
+.type-reason .type-reason-input {
+ margin: 8px 0 16px;
+}
+.type-reason .ui-reason__footer {
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.type-reason .ui-reason__footer .ui-button {
+ margin-left: 16px;
+}
+
+.add-bookmark-modal .add-bookmark-button {
+ margin-top: 16px;
+}
+
+.ui-toolbar {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 1.125rem;
+ height: 3.5rem;
+ padding-left: 1rem;
+ position: relative;
+}
+.ui-toolbar.is-raised {
+ -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
+}
+.ui-toolbar:not(.is-raised).ui-toolbar--type-default {
+ border-bottom: 0.0625rem solid rgba(0, 0, 0, 0.12);
+}
+.ui-toolbar .ui-icon-button {
+ height: 3rem;
+ width: 3rem;
+}
+.ui-toolbar__left {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+}
+.ui-toolbar__nav-icon {
+ margin-left: -1rem;
+ margin-right: 0.5rem;
+}
+.ui-toolbar__brand {
+ min-width: 10rem;
+}
+.ui-toolbar__brand-text {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ padding-right: 0.5rem;
+}
+.ui-toolbar__body {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-toolbar__body.has-brand-divider {
+ border-left-style: solid;
+ border-left-width: 0.0625rem;
+ padding-left: 1.5rem;
+}
+.ui-toolbar__right {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-left: auto;
+}
+.ui-toolbar__progress {
+ bottom: 0;
+ height: 0.1875rem;
+ left: 0;
+ position: absolute;
+ right: 0;
+}
+.ui-toolbar--type-default {
+ background-color: white;
+}
+.ui-toolbar--type-colored {
+ background-color: #607d8b;
+}
+.ui-toolbar--type-clear {
+ background-color: transparent;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.ui-toolbar--text-color-black {
+ color: rgba(0, 0, 0, 0.87);
+}
+.ui-toolbar--text-color-black .ui-toolbar__body {
+ border-left-color: rgba(0, 0, 0, 0.15);
+}
+.ui-toolbar--text-color-white {
+ color: white;
+}
+.ui-toolbar--text-color-white .ui-toolbar__body {
+ border-color: rgba(255, 255, 255, 0.4);
+}
+.ui-toolbar--progress-position-top .ui-toolbar__progress {
+ top: 0;
+}
+
+.ui-progress-linear {
+ display: block;
+ height: 0.25rem;
+ overflow: hidden;
+ position: relative;
+ -webkit-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+ -webkit-transition-property: height, opacity;
+ transition-property: height, opacity;
+ -webkit-transition-timing-function: ease;
+ transition-timing-function: ease;
+ width: 100%;
+}
+.ui-progress-linear__progress-bar.is-determinate {
+ height: 0.25rem;
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transform-origin: left;
+ -ms-transform-origin: left;
+ transform-origin: left;
+ -webkit-transition: -webkit-transform 0.2s linear;
+ transition: -webkit-transform 0.2s linear;
+ transition: transform 0.2s linear;
+ transition: transform 0.2s linear, -webkit-transform 0.2s linear;
+ width: 100%;
+}
+.ui-progress-linear__progress-bar.is-indeterminate::before {
+ -webkit-animation: ui-progress-linear-indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ animation: ui-progress-linear-indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ background-color: inherit;
+ content: '';
+ height: 0.25rem;
+ left: 0;
+ position: absolute;
+ top: 0;
+}
+.ui-progress-linear__progress-bar.is-indeterminate::after {
+ -webkit-animation-delay: 1.15s;
+ animation-delay: 1.15s;
+ -webkit-animation: ui-progress-linear-indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ animation: ui-progress-linear-indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ background-color: inherit;
+ content: '';
+ height: 0.25rem;
+ left: 0;
+ position: absolute;
+ top: 0;
+}
+@-webkit-keyframes ui-progress-linear-indeterminate {
+0% {
+ left: -35%;
+ right: 100%;
+}
+60% {
+ left: 100%;
+ right: -90%;
+}
+100% {
+ left: 100%;
+ right: -90%;
+}
+}
+@keyframes ui-progress-linear-indeterminate {
+0% {
+ left: -35%;
+ right: 100%;
+}
+60% {
+ left: 100%;
+ right: -90%;
+}
+100% {
+ left: 100%;
+ right: -90%;
+}
+}
+@-webkit-keyframes ui-progress-linear-indeterminate-short {
+0% {
+ left: -200%;
+ right: 100%;
+}
+60% {
+ left: 107%;
+ right: -8%;
+}
+100% {
+ left: 107%;
+ right: -8%;
+}
+}
+@keyframes ui-progress-linear-indeterminate-short {
+0% {
+ left: -200%;
+ right: 100%;
+}
+60% {
+ left: 107%;
+ right: -8%;
+}
+100% {
+ left: 107%;
+ right: -8%;
+}
+}
+.ui-progress-linear--transition-fade-enter-active,
+.ui-progress-linear--transition-fade-leave-active {
+ -webkit-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+}
+.ui-progress-linear--transition-fade-enter,
+.ui-progress-linear--transition-fade-leave-active {
+ opacity: 0;
+}
+.ui-progress-linear--color-primary {
+ background-color: rgba(96, 125, 139, 0.4);
+}
+.ui-progress-linear--color-primary .ui-progress-linear__progress-bar {
+ background-color: #607d8b;
+}
+.ui-progress-linear--color-accent {
+ background-color: rgba(25, 118, 210, 0.4);
+}
+.ui-progress-linear--color-accent .ui-progress-linear__progress-bar {
+ background-color: #1976d2;
+}
+.ui-progress-linear--color-black {
+ background-color: rgba(97, 97, 97, 0.4);
+}
+.ui-progress-linear--color-black .ui-progress-linear__progress-bar {
+ background-color: #616161;
+}
+.ui-progress-linear--color-white {
+ background-color: rgba(255, 255, 255, 0.4);
+}
+.ui-progress-linear--color-white .ui-progress-linear__progress-bar {
+ background-color: white;
+}
+
+.ui-snackbar-container {
+ bottom: 0;
+ left: 0.5rem;
+ overflow: hidden;
+ position: absolute;
+}
+.ui-snackbar-container .ui-snackbar {
+ margin: 0.25rem 0.25rem 0.75rem 0.25rem;
+}
+.ui-snackbar-container--position-right {
+ left: initial;
+ right: 0.5rem;
+}
+.ui-snackbar-container--position-center {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ left: 0.5rem;
+ right: 0.5rem;
+}
+
+.ui-snackbar {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #323232;
+ border-radius: 0.125rem;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ font-family: "Noto Sans", Arial, sans-serif;
+ max-width: 35.5rem;
+ min-height: 3rem;
+ min-width: 18rem;
+ padding: 0.875rem 1.5rem;
+}
+.ui-snackbar__message {
+ color: white;
+ cursor: default;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.ui-snackbar__action {
+ margin-left: auto;
+ margin: -0.5625rem -0.75rem;
+ padding-left: 3rem;
+}
+.ui-snackbar__action-button {
+ margin: 0;
+ min-height: initial;
+ min-width: initial;
+ padding: 0.75rem;
+}
+.ui-snackbar__action-button:hover:not(.is-disabled) {
+ background-color: rgba(255, 255, 255, 0.05);
+}
+body[modality="keyboard"] .ui-snackbar__action-button:focus {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+.ui-snackbar--transition-slide-enter-active,
+.ui-snackbar--transition-slide-leave-active {
+ -webkit-transition: -webkit-transform 0.4s ease;
+ transition: -webkit-transform 0.4s ease;
+ transition: transform 0.4s ease;
+ transition: transform 0.4s ease, -webkit-transform 0.4s ease;
+}
+.ui-snackbar--transition-slide-enter,
+.ui-snackbar--transition-slide-leave-active {
+ -webkit-transform: translateY(5.25rem);
+ -ms-transform: translateY(5.25rem);
+ transform: translateY(5.25rem);
+}
+.ui-snackbar--transition-fade-enter-active,
+.ui-snackbar--transition-fade-leave-active {
+ -webkit-transition: opacity 0.4s ease;
+ transition: opacity 0.4s ease;
+}
+.ui-snackbar--transition-fade-enter,
+.ui-snackbar--transition-fade-leave-active {
+ opacity: 0;
+}
+
+.right-drawer {
+ background-color: #ffffff;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ height: calc(100vh - 56px);
+ position: fixed;
+ right: 0;
+ top: 56px;
+ width: 320px;
+}
+.right-drawer.ui-tabs {
+ margin-bottom: 0;
+ width: 320px;
+}
+.right-drawer .ui-tabs__body {
+ border: none;
+ height: calc(100% - 48px);
+ padding: 0;
+}
+.right-drawer .ui-tab {
+ height: 100%;
+ max-height: 100%;
+ overflow-y: scroll;
+}
+.drawer-enter,
+.drawer-leave-to {
+ -webkit-transform: translateX(330px);
+ -ms-transform: translateX(330px);
+ transform: translateX(330px);
+}
+.drawer-enter-to,
+.drawer-leave {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+}
+.drawer-enter-active {
+ -webkit-transition: -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: transform 150ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+}
+.drawer-leave-active {
+ -webkit-transition: -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: transform 120ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+}
+
+.contributors-list {
+ height: 100%;
+ padding: 0;
+}
+.contributors-list .person-item {
+ padding: 12px 16px;
+}
+.contributors-list .add-contributor-wrapper {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ padding: 16px;
+}
+.contributors-list .add-contributor-wrapper .add-contributor-button {
+ width: 100%;
+}
+
+.page-history-list {
+ padding: 0;
+}
+.page-history-list .page-history-event {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin: 12px 16px;
+}
+.page-history-list .page-history-event .person-image.stacked {
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 10px rgba(0, 0, 0, 0.54);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 10px rgba(0, 0, 0, 0.54);
+}
+.page-history-list .page-history-event-info {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.page-history-list .page-history-event-action, .page-history-list .page-history-event-time {
+ font-size: 12px;
+}
+.page-history-list .page-history-event-action {
+ color: rgba(0, 0, 0, 0.87);
+ font-weight: bold;
+ text-transform: uppercase;
+}
+.page-history-list .page-history-event-action-published {
+ color: #4caf50;
+}
+.page-history-list .page-history-event-action-scheduled {
+ color: #ff9800;
+}
+.page-history-list .page-history-event-action-archived, .page-history-list .page-history-event-action-unarchived, .page-history-list .page-history-event-action-unpublished, .page-history-list .page-history-event-action-unscheduled {
+ color: #f44336;
+}
+.page-history-list .page-history-event-action-edited + .page-history-event-time {
+ display: none;
+}
+.page-history-list .page-history-event-users {
+ font-size: 11px;
+}
+.page-history-list .page-history-event-time {
+ color: rgba(0, 0, 0, 0.54);
+}
+.page-history-list .page-history-event-users {
+ color: rgba(0, 0, 0, 0.87);
+}
+.page-history-list .page-history-event-users p {
+ margin: 0;
+}
+
+.preview {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: 100%;
+}
+.preview .preview-link {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #ffffff;
+ color: rgba(0, 0, 0, 0.54);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 48px;
+ padding: 0 16px;
+ position: relative;
+ text-decoration: none;
+ -webkit-transition: 200ms background-color ease-out;
+ transition: 200ms background-color ease-out;
+ width: 100%;
+}
+.preview .preview-link:hover {
+ background-color: #eeeeee;
+ cursor: pointer;
+}
+.preview .preview-link .preview-link-size {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-right: 16px;
+}
+.preview .preview-link .preview-link-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+}
+.preview .preview-link .preview-link-icon {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-left: 16px;
+}
+.preview .preview-share {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 16px;
+}
+
+@charset "UTF-8";
+.health-drawer {
+ height: 100%;
+ overflow-y: scroll;
+ padding: 16px 0;
+}
+.health-drawer .validation-info {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ color: rgba(0, 0, 0, 0.87);
+ font-weight: bold;
+ margin: 16px 0 8px 16px;
+ text-transform: uppercase;
+}
+.health-drawer .validation-items {
+ list-style: none;
+ margin: 0 0 0 16px;
+ padding: 0;
+}
+.health-drawer .validation-item {
+ padding-left: 16px;
+ position: relative;
+}
+.health-drawer .validation-item:before {
+ color: #607d8b;
+ content: '\2022 ';
+ left: 0;
+ position: absolute;
+ top: 2px;
+}
+.health-drawer .validation-item + .validation-item {
+ margin-top: 8px;
+}
+.health-drawer .validation-item-location {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+}
+.health-drawer .validation-item-location.validation-item-link {
+ color: #607d8b;
+ cursor: pointer;
+ font-weight: bold;
+ text-decoration: underline;
+}
+.health-drawer .validation-item-preview {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ font-style: italic;
+ margin-left: 4px;
+}
+.publish-valid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 0 16px;
+}
+.publish-valid .valid-label {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: #4caf50;
+ margin-bottom: 8px;
+}
+.publish-valid .valid-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+}
+.publish-error,
+.publish-metadata-errors {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 16px;
+}
+.publish-error .error-label,
+ .publish-metadata-errors .error-label {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: #f44336;
+ margin-bottom: 8px;
+}
+.publish-error .error-description,
+ .publish-metadata-errors .error-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+}
+.publish-warning,
+.publish-metadata-warnings {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 16px;
+}
+.publish-warning .warning-label,
+ .publish-metadata-warnings .warning-label {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ color: #ff9800;
+ margin-bottom: 8px;
+}
+.publish-warning .warning-description,
+ .publish-metadata-warnings .warning-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+}
+
+.publish-drawer {
+ padding: 16px 0;
+}
+.publish-drawer .section-heading {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+}
+.publish-drawer .section-text {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ margin-top: 8px;
+}
+.publish-drawer .action-button {
+ margin-top: 16px;
+}
+.publish-status {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 0 16px 16px;
+}
+.publish-status .status-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+}
+.publish-status .status-time {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ margin-top: 8px;
+}
+.publish-status .status-link {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ color: #607d8b;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ margin-top: 8px;
+}
+.publish-status .status-link .status-link-text {
+ margin-left: 4px;
+ text-decoration: underline;
+}
+.publish-status .status-undo-button {
+ margin-top: 16px;
+}
+.publish-actions {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 16px;
+}
+.publish-actions .action-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 32px;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin-top: -6px;
+}
+.publish-actions .schedule-form {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin-top: 8px;
+ width: 100%;
+}
+.publish-actions .schedule-form .schedule-date,
+ .publish-actions .schedule-form .schedule-time {
+ margin: 0;
+ width: 48%;
+}
+.publish-actions .action-error-message,
+ .publish-actions .action-warning-message,
+ .publish-actions .action-info-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ cursor: pointer;
+ margin-top: 16px;
+}
+.publish-actions .action-info-message {
+ text-align: center;
+}
+.publish-actions .action-error-message {
+ color: #f44336;
+}
+.publish-actions .action-warning-message {
+ color: #ff9800;
+}
+.publish-section {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ margin-bottom: 0;
+ padding: 0;
+}
+.publish-section .ui-collapsible__header {
+ background-color: #ffffff;
+}
+.publish-section .ui-collapsible__body {
+ border: none;
+}
+.publish-location .publish-location-form {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.publish-location .location-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+}
+.publish-location .location-input {
+ margin-top: 8px;
+}
+.publish-location .location-submit {
+ margin-top: 16px;
+}
+.publish-title .publish-title-form {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.publish-title .title-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+}
+.publish-title .title-input {
+ margin-top: 8px;
+}
+.publish-title .title-submit {
+ margin-top: 16px;
+}
+.publish-archive .ui-collapsible__body {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.publish-archive .archive-help {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+}
+.publish-archive .archive-submit {
+ margin-top: 16px;
+}
+
+.publish-drawer {
+ padding: 16px 0;
+}
+.publish-status {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 0 16px 16px;
+}
+.publish-status .status-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+}
+.publish-status .status-time {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ margin-top: 8px;
+}
+.publish-status .status-undo-button {
+ margin-top: 16px;
+}
+.publish-actions {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 16px;
+}
+.publish-actions .action-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 15px;
+ letter-spacing: 0.01em;
+ line-height: 22.5px;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 32px;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin-top: -6px;
+}
+.publish-actions .schedule-form {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin-top: 8px;
+ width: 100%;
+}
+.publish-actions .schedule-form .schedule-date,
+ .publish-actions .schedule-form .schedule-time {
+ margin: 0;
+ width: 48%;
+}
+.publish-actions .action-button {
+ margin-top: 16px;
+}
+.publish-actions .action-error-message,
+ .publish-actions .action-warning-message,
+ .publish-actions .action-info-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ cursor: pointer;
+ margin-top: 16px;
+}
+.publish-actions .action-info-message {
+ text-align: center;
+}
+.publish-actions .action-error-message {
+ color: #f44336;
+}
+.publish-actions .action-warning-message {
+ color: #ff9800;
+}
+.publish-section {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ margin-bottom: 0;
+ padding: 0;
+}
+.publish-section .ui-collapsible__header {
+ background-color: #ffffff;
+}
+.publish-section .ui-collapsible__body {
+ border: none;
+}
+.publish-title .publish-title-form {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.publish-title .title-description {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+}
+.publish-title .title-input {
+ margin-top: 8px;
+}
+.publish-title .title-submit {
+ margin-top: 16px;
+}
+
+.layout-history-list {
+ padding: 0;
+}
+.layout-history-list .layout-history-event {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ font-family: "Noto Sans", Arial, sans-serif;
+ margin: 12px 16px;
+}
+.layout-history-list .layout-history-event .person-image.stacked {
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 10px rgba(0, 0, 0, 0.54);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 10px rgba(0, 0, 0, 0.54);
+}
+.layout-history-list .layout-history-event-info {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.layout-history-list .layout-history-event-action, .layout-history-list .layout-history-event-time {
+ font-size: 12px;
+}
+.layout-history-list .layout-history-event-action {
+ color: rgba(0, 0, 0, 0.87);
+ font-weight: bold;
+ text-transform: uppercase;
+}
+.layout-history-list .layout-history-event-action-published {
+ color: #4caf50;
+}
+.layout-history-list .layout-history-event-action-scheduled {
+ color: #ff9800;
+}
+.layout-history-list .layout-history-event-action-archived, .layout-history-list .layout-history-event-action-unarchived, .layout-history-list .layout-history-event-action-unpublished, .layout-history-list .layout-history-event-action-unscheduled {
+ color: #f44336;
+}
+.layout-history-list .layout-history-event-action-edited + .layout-history-event-time {
+ display: none;
+}
+.layout-history-list .layout-history-event-users {
+ font-size: 11px;
+}
+.layout-history-list .layout-history-event-time {
+ color: rgba(0, 0, 0, 0.54);
+}
+.layout-history-list .layout-history-event-users {
+ color: rgba(0, 0, 0, 0.87);
+}
+.layout-history-list .layout-history-event-users p {
+ margin: 0;
+}
+
+.nav-background {
+ z-index: 1000000040;
+ background-color: rgba(38, 50, 56, 0.87);
+ display: block;
+ height: 100%;
+ left: 0;
+ opacity: 1;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+.nav-fade-enter-active, .nav-fade-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.nav-fade-enter, .nav-fade-leave-to {
+ opacity: 0;
+}
+
+/* dont scroll the page when left nav is open */
+.nav-noscroll {
+ height: 100%;
+ overflow: hidden;
+}
+
+.nav-menu {
+ z-index: 1000000050;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #000000;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ height: 48px;
+ left: 0;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+.nav-menu .nav-menu-button,
+ .nav-menu .nav-menu-divider {
+ display: none;
+}
+.nav-menu .nav-menu-button-small {
+ display: block;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+}
+.nav-menu .nav-menu-divider-small {
+ display: block;
+}
+.nav-menu .nav-menu-button-small-white {
+ color: #ffffff;
+}
+.nav-menu .nav-menu-button-small-white:hover:not(.is-disabled), .nav-menu .nav-menu-button-small-white.has-dropdown-open, .nav-menu .nav-menu-button-small-white.has-focus-ring:focus,
+ body[modality="keyboard"] .nav-menu .nav-menu-button-small-white:focus {
+ background-color: #263238;
+}
+.nav-menu .nav-menu-button-small-white .ui-button__icon,
+ .nav-menu .nav-menu-button-small-white .ui-button__dropdown-icon {
+ color: #ffffff;
+}
+.nav-menu .nav-menu-button-small-white .ui-ripple-ink__ink {
+ opacity: 0.4;
+}
+.nav-menu .nav-button-small-text {
+ font-weight: bold;
+}
+@media screen and (min-width: 600px) {
+.nav-menu {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: 100%;
+ width: 200px;
+}
+.nav-menu .nav-menu-button,
+ .nav-menu .nav-menu-divider {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+.nav-menu .nav-menu-button-small,
+ .nav-menu .nav-menu-divider-small {
+ display: none;
+}
+}
+.nav-menu-divider,
+.nav-menu-divider-small {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+}
+.nav-menu-enter-to,
+.nav-menu-leave {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+}
+.nav-menu-enter,
+.nav-menu-leave-to {
+ -webkit-transform: translateX(-210px);
+ -ms-transform: translateX(-210px);
+ transform: translateX(-210px);
+}
+.nav-menu-enter-active {
+ -webkit-transition: -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: transform 150ms cubic-bezier(0, 0, 0.2, 1);
+ transition: transform 150ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0, 0, 0.2, 1);
+}
+.nav-menu-leave-active {
+ -webkit-transition: -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+ transition: transform 120ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms cubic-bezier(0.4, 0, 0.6, 1);
+}
+.mobile-nav-dropdown .ui-menu-option__text {
+ text-transform: capitalize;
+}
+
+.nav-content {
+ z-index: 1000000050;
+ background-color: #ffffff;
+ height: calc(100vh - 48px);
+ max-width: 100vw;
+ position: fixed;
+ left: 0;
+ top: 48px;
+ width: 100%;
+}
+@media screen and (min-width: 600px) {
+.nav-content {
+ height: 100%;
+ left: 200px;
+ top: 0;
+ width: auto;
+}
+}
+.nav-content-enter,
+.nav-content-leave-to {
+ opacity: 0;
+}
+.nav-content-enter-to,
+.nav-content-leave {
+ opacity: 1;
+}
+.nav-content-enter-active,
+.nav-content-leave-active {
+ -webkit-transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.new-page-nav {
+ width: 400px;
+}
+
+.users-nav {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: 400px;
+}
+.users-nav .users-input {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin: 16px;
+}
+.users-nav .users-headers {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 12px;
+ text-transform: uppercase;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #fafafa;
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 8px 16px;
+}
+.users-nav .users-headers .users-header-name {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ padding-left: 56px;
+}
+.users-nav .users-headers .users-header-admin {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 36px;
+ -ms-flex: 0 0 36px;
+ flex: 0 0 36px;
+}
+.users-nav .users-headers .users-header-remove {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 36px;
+ -ms-flex: 0 0 36px;
+ flex: 0 0 36px;
+}
+.users-nav .users-list {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding: 0;
+}
+.users-nav .person-item {
+ padding: 12px 16px;
+}
+.users-nav .add-user-wrapper {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 16px;
+}
+.users-nav .add-user-wrapper .add-user-button {
+ width: 100%;
+}
+
+.page-list {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: 100%;
+}
+@media screen and (min-width: 664px) {
+.page-list {
+ max-width: calc(100vw - 200px);
+}
+}
+@media screen and (min-width: 1128px) {
+.page-list {
+ max-width: 928px;
+}
+}
+.page-list-controls {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 8px;
+ width: 100%;
+}
+@media screen and (min-width: 864px) {
+.page-list-controls {
+ padding: 16px 16px 16px 8px;
+}
+}
+.page-list-sites {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-right: 8px;
+ max-width: 140px;
+}
+@media screen and (min-width: 864px) {
+.page-list-sites {
+ max-width: 300px;
+}
+}
+.page-list-search {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+}
+.page-list-status-small {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-left: 8px;
+}
+@media screen and (min-width: 1128px) {
+.page-list-status-small {
+ display: none;
+}
+}
+.status-selector.page-list-status-large {
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ margin-left: 8px;
+}
+.status-selector.page-list-status-large .status-selector-radio:first-child {
+ margin-left: 0;
+}
+@media screen and (min-width: 1128px) {
+.status-selector.page-list-status-large {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+}
+.page-list-headers {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 12px;
+ text-transform: uppercase;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #fafafa;
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding: 8px 16px;
+}
+@media screen and (min-width: 864px) {
+.page-list-headers {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+}
+.page-list-headers .page-list-header-site {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 120px;
+ -ms-flex: 0 0 120px;
+ flex: 0 0 120px;
+}
+.page-list-headers .page-list-header-title {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 400px;
+ -ms-flex: 1 1 400px;
+ flex: 1 1 400px;
+}
+.page-list-headers .page-list-header-byline {
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 144px;
+ -ms-flex: 0 0 144px;
+ flex: 0 0 144px;
+}
+@media screen and (min-width: 1008px) {
+.page-list-headers .page-list-header-byline {
+ display: inline;
+}
+}
+.page-list-headers .page-list-header-status {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 144px;
+ -ms-flex: 0 0 144px;
+ flex: 0 0 144px;
+ text-align: right;
+}
+@media screen and (min-width: 1128px) {
+.page-list-headers .page-list-header-status {
+ text-align: left;
+}
+}
+.page-list-headers .page-list-header-collaborators {
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 120px;
+ -ms-flex: 0 0 120px;
+ flex: 0 0 120px;
+}
+@media screen and (min-width: 1128px) {
+.page-list-headers .page-list-header-collaborators {
+ display: inline;
+}
+}
+.page-list-readout {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 1 100%;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ overflow-y: scroll;
+}
+.page-list-readout .page-list-load-more {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ padding: 16px;
+}
+
+.site-selector {
+ max-width: 100vw;
+ width: 500px;
+}
+@media screen and (min-width: 600px) {
+.site-selector {
+ max-width: calc(100vw - 200px);
+}
+}
+.site-selector-body {
+ -webkit-column-count: 2;
+ column-count: 2;
+ -webkit-column-gap: 16px;
+ column-gap: 16px;
+ display: block;
+ padding: 16px;
+}
+.site-selector-footer {
+ padding: 0 16px 16px;
+ width: 100%;
+}
+
+.status-selector {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+.status-selector .status-selector-radio {
+ margin-left: 16px;
+}
+.status-selector.is-vertical {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 8px 16px;
+}
+.status-selector.is-vertical .status-selector-radio {
+ margin-left: 0;
+}
+.status-selector.is-vertical .status-selector-radio + .status-selector-radio {
+ margin-top: 8px;
+}
+
+.page-list-item {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ max-height: 100px;
+ min-height: 48px;
+ padding: 0 16px;
+}
+@media screen and (min-width: 1008px) {
+.page-list-item {
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 48px;
+ -ms-flex: 0 0 48px;
+ flex: 0 0 48px;
+}
+}
+.page-list-item-site {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ cursor: pointer;
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 120px;
+ -ms-flex: 0 0 120px;
+ flex: 0 0 120px;
+ overflow: hidden;
+ padding-right: 16px;
+ text-overflow: ellipsis;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+@media screen and (min-width: 1008px) {
+.page-list-item-site {
+ display: block;
+}
+}
+.page-list-item-title {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ display: block;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 1 400px;
+ -ms-flex: 1 1 400px;
+ flex: 1 1 400px;
+ min-width: 0;
+ padding: 16px 16px 16px 0;
+}
+.page-list-item-title-inner {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+}
+.page-list-item-title .no-title {
+ color: rgba(0, 0, 0, 0.54);
+ font-style: italic;
+}
+.page-list-item-title .page-list-item-site-small {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ text-transform: uppercase;
+ display: block;
+ text-transform: uppercase;
+ width: 100%;
+}
+@media screen and (min-width: 1008px) {
+.page-list-item-title .page-list-item-site-small {
+ display: none;
+}
+}
+.page-list-item-title .page-list-item-byline-small {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ display: block;
+ width: 100%;
+}
+.page-list-item-title .page-list-item-byline-small.no-byline {
+ color: rgba(0, 0, 0, 0.54);
+ font-style: italic;
+}
+@media screen and (min-width: 1008px) {
+.page-list-item-title .page-list-item-byline-small {
+ display: none;
+}
+}
+.page-list-item-byline {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 20px;
+ cursor: pointer;
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 144px;
+ -ms-flex: 0 0 144px;
+ flex: 0 0 144px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.page-list-item-byline.no-byline {
+ color: rgba(0, 0, 0, 0.54);
+ cursor: normal;
+}
+@media screen and (min-width: 1008px) {
+.page-list-item-byline {
+ display: inline;
+}
+}
+@media screen and (min-width: 1128px) {
+.page-list-item-byline {
+ padding-right: 16px;
+}
+}
+.page-list-item-status {
+ -webkit-box-align: end;
+ -webkit-align-items: flex-end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 144px;
+ -ms-flex: 0 0 144px;
+ flex: 0 0 144px;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ min-width: 0;
+ padding: 16px 0;
+}
+@media screen and (min-width: 1128px) {
+.page-list-item-status {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+}
+}
+.page-list-item-status .status-message {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+.page-list-item-status .status-message.scheduled {
+ color: #ff9800;
+}
+.page-list-item-status .status-message.published {
+ color: #4caf50;
+}
+.page-list-item-status .status-message.archived {
+ color: #f44336;
+}
+.page-list-item-status .status-time {
+ font-family: "Noto Sans", Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: none;
+ text-rendering: optimizeLegibility;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 12px;
+ line-height: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+.page-list-item-collaborators {
+ display: none;
+ -webkit-box-flex: 0;
+ -webkit-flex: 0 0 120px;
+ -ms-flex: 0 0 120px;
+ flex: 0 0 120px;
+}
+@media screen and (min-width: 1128px) {
+.page-list-item-collaborators {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+}
+.page-list-item-collaborator {
+ cursor: pointer;
+}
+
+.collaborator {
+ position: relative;
+}
+.collaborator + .collaborator {
+ margin-left: 8px;
+}
+
+.kiln-confirm {
+ z-index: 1000000060;
+ position: fixed;
+}
+
+.alert-container {
+ z-index: 1000000030;
+ left: 0;
+ position: fixed;
+ top: 64px;
+ width: 100%;
+}
+.alert-container .ui-alert {
+ z-index: 1000000030;
+ background-color: #ffffff;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ margin: 0 auto 8px;
+ max-width: 768px;
+}
diff --git a/dist/clay-kiln-edit.js b/dist/clay-kiln-edit.js
new file mode 100644
index 000000000..9aea52e1f
--- /dev/null
+++ b/dist/clay-kiln-edit.js
@@ -0,0 +1,153540 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 803);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+/* globals __VUE_SSR_CONTEXT__ */
+
+// IMPORTANT: Do NOT use ES2015 features in this file.
+// This module is a runtime utility for cleaner component module output and will
+// be included in the final webpack user bundle.
+
+module.exports = function normalizeComponent (
+ rawScriptExports,
+ compiledTemplate,
+ functionalTemplate,
+ injectStyles,
+ scopeId,
+ moduleIdentifier /* server only */
+) {
+ var esModule
+ var scriptExports = rawScriptExports = rawScriptExports || {}
+
+ // ES6 modules interop
+ var type = typeof rawScriptExports.default
+ if (type === 'object' || type === 'function') {
+ esModule = rawScriptExports
+ scriptExports = rawScriptExports.default
+ }
+
+ // Vue.extend constructor export interop
+ var options = typeof scriptExports === 'function'
+ ? scriptExports.options
+ : scriptExports
+
+ // render functions
+ if (compiledTemplate) {
+ options.render = compiledTemplate.render
+ options.staticRenderFns = compiledTemplate.staticRenderFns
+ options._compiled = true
+ }
+
+ // functional template
+ if (functionalTemplate) {
+ options.functional = true
+ }
+
+ // scopedId
+ if (scopeId) {
+ options._scopeId = scopeId
+ }
+
+ var hook
+ if (moduleIdentifier) { // server build
+ hook = function (context) {
+ // 2.3 injection
+ context =
+ context || // cached call
+ (this.$vnode && this.$vnode.ssrContext) || // stateful
+ (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
+ // 2.2 with runInNewContext: true
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
+ context = __VUE_SSR_CONTEXT__
+ }
+ // inject component styles
+ if (injectStyles) {
+ injectStyles.call(this, context)
+ }
+ // register component module identifier for async chunk inferrence
+ if (context && context._registeredComponents) {
+ context._registeredComponents.add(moduleIdentifier)
+ }
+ }
+ // used by ssr in case component is cached and beforeCreate
+ // never gets called
+ options._ssrRegister = hook
+ } else if (injectStyles) {
+ hook = injectStyles
+ }
+
+ if (hook) {
+ var functional = options.functional
+ var existing = functional
+ ? options.render
+ : options.beforeCreate
+
+ if (!functional) {
+ // inject component registration as beforeCreate hook
+ options.beforeCreate = existing
+ ? [].concat(existing, hook)
+ : [hook]
+ } else {
+ // for template-only hot-reload because in that case the render fn doesn't
+ // go through the normalizer
+ options._injectStyles = hook
+ // register for functioal component in vue file
+ options.render = function renderWithStyleInjection (h, context) {
+ hook.call(context)
+ return existing(h, context)
+ }
+ }
+ }
+
+ return {
+ esModule: esModule,
+ exports: scriptExports,
+ options: options
+ }
+}
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGet = __webpack_require__(97);
+
+/**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
+}
+
+module.exports = get;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.sharpCurve = exports.accelerationCurve = exports.decelerationCurve = exports.standardCurve = exports.collapsibleListClass = exports.dragItemUnsavedClass = exports.dragItemClass = exports.dropAreaClass = exports.permanentPlaceholderClass = exports.placeholderClass = exports.firstFieldClass = exports.fieldClass = exports.inlineFormClass = exports.wrappedClass = exports.selectorClass = exports.overlayClass = exports.pageAreaClass = exports.componentPropClass = exports.contentText = exports.contentJSON = exports.contentHeader = exports.userHeader = exports.hooksExt = exports.editComponentExt = exports.editExt = exports.htmlExt = exports.searchRoute = exports.instancesRoute = exports.schemaRoute = exports.logoutRoute = exports.loginRoute = exports.scheduleRoute = exports.listsRoute = exports.usersBareRoute = exports.usersRoute = exports.urisRoute = exports.pagesRoute = exports.componentRoute = exports.inputProp = exports.behaviorKey = exports.revealProp = exports.subProp = exports.pubProp = exports.variationProp = exports.removeProp = exports.versionProp = exports.devDescProp = exports.descProp = exports.groupsProp = exports.labelProp = exports.placeholderProp = exports.displayProp = exports.componentProp = exports.componentListProp = exports.bookmarkProp = exports.fieldProp = exports.refProp = exports.reorderItemAttr = exports.reorderAttr = exports.hiddenAttr = exports.layoutAttr = exports.placeholderAttr = exports.editAttr = exports.refAttr = undefined;
+
+var _startCase2 = __webpack_require__(78);
+
+var _startCase3 = _interopRequireDefault(_startCase2);
+
+var _get2 = __webpack_require__(1);
+
+var _get3 = _interopRequireDefault(_get2);
+
+exports.getComponentName = getComponentName;
+exports.getComponentByNameAndInstance = getComponentByNameAndInstance;
+exports.getLayoutNameAndInstance = getLayoutNameAndInstance;
+
+var _dom = __webpack_require__(15);
+
+var _dom2 = _interopRequireDefault(_dom);
+
+var _clayutils = __webpack_require__(19);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * wraps clayutils.getComponentName, swallowing the error if an invalid uri is passed
+ *
+ * @param {String} uri
+ * @returns {String}
+ */
+function getComponentName(uri) {
+ try {
+ return (0, _clayutils.getComponentName)(uri);
+ } catch (e) {
+ return false;
+ }
+}
+
+/**
+ * Grab an element in the DOM when you know the name of the
+ * component and the instance of the component.
+ *
+ * @param {object} store
+ * @param {String} name
+ * @param {String} instance
+ * @return {Object|Null}
+ */
+function getComponentByNameAndInstance(store, name, instance) {
+ var sitePrefix = (0, _get3.default)(store, 'state.site.prefix', null),
+ uri;
+
+ if (name && instance && sitePrefix) {
+ uri = sitePrefix + '/_components/' + name + '/instances/' + instance;
+
+ return {
+ uri: uri,
+ el: _dom2.default.find('[' + refAttr + '="' + uri + '"]')
+ };
+ }
+
+ return null;
+}
+
+/**
+ * get name and instance of the layout, as well as the warning message to display when editing the layout
+ * note: the message will use the custom layout name if it has been set
+ * @param {object} store
+ * @return {object}
+ */
+function getLayoutNameAndInstance(store) {
+ var layoutURI = (0, _get3.default)(store, 'state.layout.uri'),
+ layoutName = (0, _startCase3.default)((0, _clayutils.getLayoutName)(layoutURI)),
+ layoutInstance = (0, _startCase3.default)((0, _clayutils.getLayoutInstance)(layoutURI)),
+ layoutTitle = (0, _get3.default)(store, 'state.layout.state.title'),
+ layoutLabel = layoutTitle ? layoutTitle : layoutInstance + ' (' + layoutName + ')';
+
+ return {
+ name: layoutName,
+ instance: layoutInstance,
+ message: 'You are currently editing "' + layoutLabel + '". Changes you make will be reflected on all pages that use this layout.'
+ };
+}
+
+// it's easier to export and declare these in single lines
+/* eslint-disable one-var */
+// attributes
+var refAttr = exports.refAttr = 'data-uri'; // indicated root el of a component. value is the _ref or _self of the component
+var editAttr = exports.editAttr = 'data-editable'; // indicates el is editable when clicked. value is path to data
+var placeholderAttr = exports.placeholderAttr = 'data-placeholder'; // indicates el should have placeholder, but is NOT editable when clicked
+var layoutAttr = exports.layoutAttr = 'data-layout-uri'; // set on element, points to the layout when data-uri points to the page
+var hiddenAttr = exports.hiddenAttr = 'data-kiln-hidden';
+var reorderAttr = exports.reorderAttr = 'data-reorderable';
+var reorderItemAttr = exports.reorderItemAttr = 'data-reorderable-item';
+// properties
+var refProp = exports.refProp = '_ref';
+var fieldProp = exports.fieldProp = '_has'; // used to determine if a node (in the schema) is a field
+var bookmarkProp = exports.bookmarkProp = '_allowBookmarks'; // used to determine if bookmarked instances may be created
+var componentListProp = exports.componentListProp = '_componentList';
+var componentProp = exports.componentProp = '_component';
+var displayProp = exports.displayProp = '_display'; // note: deprecated in kiln 5.x, should be removed in kiln 6.x
+var placeholderProp = exports.placeholderProp = '_placeholder';
+var labelProp = exports.labelProp = '_label';
+var groupsProp = exports.groupsProp = '_groups';
+var descProp = exports.descProp = '_description';
+var devDescProp = exports.devDescProp = '_devDescription';
+var versionProp = exports.versionProp = '_version';
+var removeProp = exports.removeProp = '_confirmRemoval';
+var variationProp = exports.variationProp = 'componentVariation';
+var pubProp = exports.pubProp = '_publish';
+var subProp = exports.subProp = '_subscribe';
+var revealProp = exports.revealProp = '_reveal';
+var behaviorKey = exports.behaviorKey = 'fn'; // note: deprecated in kiln 5.x, should be removed in kiln 6.x
+var inputProp = exports.inputProp = 'input'; // used to determine input name
+// api routes, extensions, and headers
+var componentRoute = exports.componentRoute = '/_components/';
+var pagesRoute = exports.pagesRoute = '/_pages/';
+var urisRoute = exports.urisRoute = '/_uris/';
+var usersRoute = exports.usersRoute = '/_users/';
+var usersBareRoute = exports.usersBareRoute = '/_users';
+var listsRoute = exports.listsRoute = '/_lists/';
+var scheduleRoute = exports.scheduleRoute = '/_schedule'; // no ending slash
+var loginRoute = exports.loginRoute = '/_auth/login';
+var logoutRoute = exports.logoutRoute = '/_auth/logout';
+var schemaRoute = exports.schemaRoute = '/schema'; // no ending slash
+var instancesRoute = exports.instancesRoute = '/instances'; // no ending slash
+var searchRoute = exports.searchRoute = '/_search';
+var htmlExt = exports.htmlExt = '.html';
+var editExt = exports.editExt = '?edit=true';
+var editComponentExt = exports.editComponentExt = editExt + '&sitecss=false&js=false'; // ask for edit mode html from the server, sans js or site css
+var hooksExt = exports.hooksExt = '?hooks=false'; // flag to disable running component save()/render() hooks on the server
+var userHeader = exports.userHeader = 'X-Clay-User';
+var contentHeader = exports.contentHeader = 'Content-Type';
+var contentJSON = exports.contentJSON = 'application/json; charset=UTF-8';
+var contentText = exports.contentText = 'text/plain; charset=UTF-8';
+// reused classes
+var componentPropClass = exports.componentPropClass = 'component-prop-wrapper';
+var pageAreaClass = exports.pageAreaClass = 'kiln-page-area';
+var overlayClass = exports.overlayClass = 'iframe-overlay';
+var selectorClass = exports.selectorClass = 'mini-selector';
+var wrappedClass = exports.wrappedClass = 'hidden-wrapped';
+var inlineFormClass = exports.inlineFormClass = 'editor-inline';
+var fieldClass = exports.fieldClass = 'kiln-field';
+var firstFieldClass = exports.firstFieldClass = 'first-field';
+var placeholderClass = exports.placeholderClass = 'kiln-placeholder';
+var permanentPlaceholderClass = exports.permanentPlaceholderClass = 'kiln-permanent-placeholder';
+var dropAreaClass = exports.dropAreaClass = 'dragula-drop-area';
+var dragItemClass = exports.dragItemClass = 'dragula-item';
+var dragItemUnsavedClass = exports.dragItemUnsavedClass = 'dragula-not-saved';
+var collapsibleListClass = exports.collapsibleListClass = 'collapsible-component-list';
+// animations
+// standard curve - "ease in out", used for growing and shrinking material,
+// and other property changes inside the viewport
+var standardCurve = exports.standardCurve = [0.4, 0.0, 0.2, 1];
+// deceleration curve - "ease out", used for elements entering the viewport
+var decelerationCurve = exports.decelerationCurve = [0, 0, 0.2, 1];
+// acceleration curve - "ease in", used for elements leaving the viewport permanently
+var accelerationCurve = exports.accelerationCurve = [0.4, 0, 1, 1];
+// sharp curve - "ease in out", used for elements leaving the viewport temporarily
+var sharpCurve = exports.sharpCurve = [0.4, 0, 0.6, 1];
+/* eslint-enable one-var */
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+module.exports = isArray;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return value != null && (type == 'object' || type == 'function');
+}
+
+module.exports = isObject;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGetTag = __webpack_require__(50),
+ isArray = __webpack_require__(3),
+ isObjectLike = __webpack_require__(41);
+
+/** `Object#toString` result references. */
+var stringTag = '[object String]';
+
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+ return typeof value == 'string' ||
+ (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
+}
+
+module.exports = isString;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var arrayMap = __webpack_require__(43),
+ baseIteratee = __webpack_require__(31),
+ baseMap = __webpack_require__(208),
+ isArray = __webpack_require__(3);
+
+/**
+ * Creates an array of values by running each element in `collection` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
+ * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
+ * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
+ * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * _.map([4, 8], square);
+ * // => [16, 64]
+ *
+ * _.map({ 'a': 4, 'b': 8 }, square);
+ * // => [16, 64] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */
+function map(collection, iteratee) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ return func(collection, baseIteratee(iteratee, 3));
+}
+
+module.exports = map;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseIndexOf = __webpack_require__(143),
+ isArrayLike = __webpack_require__(44),
+ isString = __webpack_require__(5),
+ toInteger = __webpack_require__(51),
+ values = __webpack_require__(213);
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Checks if `value` is in `collection`. If `collection` is a string, it's
+ * checked for a substring of `value`, otherwise
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * is used for equality comparisons. If `fromIndex` is negative, it's used as
+ * the offset from the end of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+ * @returns {boolean} Returns `true` if `value` is found, else `false`.
+ * @example
+ *
+ * _.includes([1, 2, 3], 1);
+ * // => true
+ *
+ * _.includes([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.includes({ 'a': 1, 'b': 2 }, 1);
+ * // => true
+ *
+ * _.includes('abcd', 'bc');
+ * // => true
+ */
+function includes(collection, value, fromIndex, guard) {
+ collection = isArrayLike(collection) ? collection : values(collection);
+ fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
+
+ var length = collection.length;
+ if (fromIndex < 0) {
+ fromIndex = nativeMax(length + fromIndex, 0);
+ }
+ return isString(collection)
+ ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
+ : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
+}
+
+module.exports = includes;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var moment = __webpack_require__(11);
+
+function ParsedResult(result){
+ result = result || {};
+
+ this.ref = result.ref;
+ this.index = result.index;
+ this.text = result.text;
+ this.tags = result.tags || {};
+
+ this.start = new ParsedComponents(result.start, result.ref)
+ if(result.end){
+ this.end = new ParsedComponents(result.end, result.ref)
+ }
+}
+
+ParsedResult.prototype.clone = function() {
+ var result = new ParsedResult(this);
+ result.tags = JSON.parse(JSON.stringify(this.tags));
+ result.start = this.start.clone();
+ if (this.end) {
+ result.end = this.end.clone();
+ }
+}
+
+ParsedResult.prototype.hasPossibleDates = function() {
+ return this.start.isPossibleDate() && (!this.end || this.end.isPossibleDate());
+}
+
+
+function ParsedComponents (components, ref){
+
+ this.knownValues = {};
+ this.impliedValues = {};
+
+ if (components) {
+ for (key in components) {
+ this.knownValues[key] = components[key];
+ }
+ }
+
+ if (ref) {
+ ref = moment(ref);
+ this.imply('day', ref.date())
+ this.imply('month', ref.month() + 1)
+ this.imply('year', ref.year())
+ }
+
+
+ this.imply('hour', 12);
+ this.imply('minute', 0);
+ this.imply('second', 0);
+ this.imply('millisecond', 0);
+}
+
+ParsedComponents.prototype.clone = function () {
+ var component = new ParsedComponents();
+ component.knownValues = JSON.parse(JSON.stringify(this.knownValues));
+ component.impliedValues = JSON.parse(JSON.stringify(this.impliedValues));
+ return component;
+};
+
+ParsedComponents.prototype.get = function(component, value) {
+ if (component in this.knownValues) return this.knownValues[component];
+ if (component in this.impliedValues) return this.impliedValues[component];
+};
+
+ParsedComponents.prototype.assign = function(component, value) {
+ this.knownValues[component] = value;
+ delete this.impliedValues[component];
+};
+
+ParsedComponents.prototype.imply = function(component, value) {
+ if (component in this.knownValues) return;
+ this.impliedValues[component] = value;
+};
+
+ParsedComponents.prototype.isCertain = function(component) {
+ return component in this.knownValues;
+};
+
+ParsedComponents.prototype.isPossibleDate = function() {
+ var dateMoment = this.moment();
+ if (this.isCertain('timezoneOffset')) {
+ dateMoment.utcOffset(this.get('timezoneOffset'))
+ }
+
+ if (dateMoment.get('year') != this.get('year')) return false;
+ if (dateMoment.get('month') != this.get('month')-1) return false;
+ if (dateMoment.get('date') != this.get('day')) return false;
+ if (dateMoment.get('hour') != this.get('hour')) return false;
+ if (dateMoment.get('minute') != this.get('minute')) return false;
+
+ return true;
+};
+
+ParsedComponents.prototype.date = function() {
+ var dateMoment = this.moment();
+ return dateMoment.toDate();
+};
+
+ParsedComponents.prototype.moment = function() {
+ var dateMoment = moment();
+
+ dateMoment.set('year', this.get('year'));
+ dateMoment.set('month', this.get('month')-1);
+ dateMoment.set('date', this.get('day'));
+ dateMoment.set('hour', this.get('hour'));
+ dateMoment.set('minute', this.get('minute'));
+ dateMoment.set('second', this.get('second'));
+ dateMoment.set('millisecond', this.get('millisecond'));
+
+ // Javascript Date Object return minus timezone offset
+ var currentTimezoneOffset = dateMoment.utcOffset();
+ var targetTimezoneOffset = this.isCertain('timezoneOffset') ?
+ this.get('timezoneOffset') : currentTimezoneOffset;
+
+ var adjustTimezoneOffset = targetTimezoneOffset - currentTimezoneOffset;
+ dateMoment.add(-adjustTimezoneOffset, 'minutes');
+
+ return dateMoment;
+};
+
+
+
+exports.ParsedComponents = ParsedComponents;
+exports.ParsedResult = ParsedResult;
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var assignValue = __webpack_require__(103),
+ copyObject = __webpack_require__(59),
+ createAssigner = __webpack_require__(196),
+ isArrayLike = __webpack_require__(44),
+ isPrototype = __webpack_require__(140),
+ keys = __webpack_require__(42);
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Assigns own enumerable string keyed properties of source objects to the
+ * destination object. Source objects are applied from left to right.
+ * Subsequent sources overwrite property assignments of previous sources.
+ *
+ * **Note:** This method mutates `object` and is loosely based on
+ * [`Object.assign`](https://mdn.io/Object/assign).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.10.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.assignIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * function Bar() {
+ * this.c = 3;
+ * }
+ *
+ * Foo.prototype.b = 2;
+ * Bar.prototype.d = 4;
+ *
+ * _.assign({ 'a': 0 }, new Foo, new Bar);
+ * // => { 'a': 1, 'c': 3 }
+ */
+var assign = createAssigner(function(object, source) {
+ if (isPrototype(source) || isArrayLike(source)) {
+ copyObject(source, keys(source), object);
+ return;
+ }
+ for (var key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ assignValue(object, key, source[key]);
+ }
+ }
+});
+
+module.exports = assign;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _isObject2 = __webpack_require__(4);
+
+var _isObject3 = _interopRequireDefault(_isObject2);
+
+var _isString2 = __webpack_require__(5);
+
+var _isString3 = _interopRequireDefault(_isString2);
+
+exports.default = function (filename) {
+ var logger = void 0;
+
+ if ((0, _isString3.default)(filename)) {
+ logger = _clayLog2.default.meta({ file: filename });
+ } else if ((0, _isObject3.default)(filename)) {
+ logger = _clayLog2.default.meta(filename);
+ } else {
+ logger = _clayLog2.default.meta({}); // empty object for file-specific meta, maintains the syntax for other logs
+ }
+
+ return {
+ info: info(logger),
+ trace: trace(logger),
+ debug: debug(logger),
+ warn: warn(logger),
+ error: error(logger)
+ };
+};
+
+var _clayLog = __webpack_require__(409);
+
+var _clayLog2 = _interopRequireDefault(_clayLog);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_clayLog2.default.init({
+ name: 'kiln',
+ meta: {
+ kilnVersion: "10.2.2", // compile-time added
+ browserVersion: window.navigator.userAgent
+ }
+});
+
+/**
+ * log informational messages
+ * @param {function} logger
+ * @returns {function}
+ */
+function info(logger) {
+ return function (message, logObj) {
+ return logger('info', message, logObj);
+ };
+}
+
+/**
+ * log trace messages (with stack traces)
+ * @param {function} logger
+ * @returns {function}
+ */
+function trace(logger) {
+ return function (message, logObj) {
+ return logger('trace', message, logObj);
+ };
+}
+
+/**
+ * log debug messages (without stack traces)
+ * @param {function} logger
+ * @returns {function}
+ */
+function debug(logger) {
+ return function (message, logObj) {
+ return logger('debug', message, logObj);
+ };
+}
+
+/**
+ * log warning messages
+ * @param {function} logger
+ * @returns {function}
+ */
+function warn(logger) {
+ return function (message, logObj) {
+ return logger('warn', message, logObj);
+ };
+}
+
+/**
+ * log error messages
+ * note: you can simply pass in an Error and it will print nicely
+ * @param {function} logger
+ * @returns {function}
+ */
+function error(logger) {
+ return function (message, logObj) {
+ if ((0, _isString3.default)(message)) {
+ logger('error', message, logObj);
+ } else {
+ logger('error', message); // pass in error object directly
+ }
+ };
+}
+
+/**
+ * instantiate a logger for your file
+ * note for plugin authors: when using the log service, please make use of the
+ * file-specific log metadata to provide additional info when debugging, e.g.
+ * plugin (plugin name), action (intended action of the code calling the logger), etc
+ * @param {string|object} [filename] or file-specific log metadata
+ * @return {object}
+ */
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js
+
+;(function (global, factory) {
+ true ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ global.moment = factory()
+}(this, (function () { 'use strict';
+
+ var hookCallback;
+
+ function hooks () {
+ return hookCallback.apply(null, arguments);
+ }
+
+ // This is done to register the method called with moment()
+ // without creating circular dependencies.
+ function setHookCallback (callback) {
+ hookCallback = callback;
+ }
+
+ function isArray(input) {
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+ }
+
+ function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+ }
+
+ function isObjectEmpty(obj) {
+ if (Object.getOwnPropertyNames) {
+ return (Object.getOwnPropertyNames(obj).length === 0);
+ } else {
+ var k;
+ for (k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ function isUndefined(input) {
+ return input === void 0;
+ }
+
+ function isNumber(input) {
+ return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+ }
+
+ function isDate(input) {
+ return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+ }
+
+ function map(arr, fn) {
+ var res = [], i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+ }
+
+ function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
+ }
+
+ function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+ }
+
+ function createUTC (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, true).utc();
+ }
+
+ function defaultParsingFlags() {
+ // We need to deep clone this object.
+ return {
+ empty : false,
+ unusedTokens : [],
+ unusedInput : [],
+ overflow : -2,
+ charsLeftOver : 0,
+ nullInput : false,
+ invalidMonth : null,
+ invalidFormat : false,
+ userInvalidated : false,
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null,
+ rfc2822 : false,
+ weekdayMismatch : false
+ };
+ }
+
+ function getParsingFlags(m) {
+ if (m._pf == null) {
+ m._pf = defaultParsingFlags();
+ }
+ return m._pf;
+ }
+
+ var some;
+ if (Array.prototype.some) {
+ some = Array.prototype.some;
+ } else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+ }
+
+ function isValid(m) {
+ if (m._isValid == null) {
+ var flags = getParsingFlags(m);
+ var parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
+ flags.overflow < 0 &&
+ !flags.empty &&
+ !flags.invalidMonth &&
+ !flags.invalidWeekday &&
+ !flags.weekdayMismatch &&
+ !flags.nullInput &&
+ !flags.invalidFormat &&
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
+
+ if (m._strict) {
+ isNowValid = isNowValid &&
+ flags.charsLeftOver === 0 &&
+ flags.unusedTokens.length === 0 &&
+ flags.bigHour === undefined;
+ }
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
+ }
+ return m._isValid;
+ }
+
+ function createInvalid (flags) {
+ var m = createUTC(NaN);
+ if (flags != null) {
+ extend(getParsingFlags(m), flags);
+ }
+ else {
+ getParsingFlags(m).userInvalidated = true;
+ }
+
+ return m;
+ }
+
+ // Plugins that add properties should also add the key here (null value),
+ // so we can properly clone ourselves.
+ var momentProperties = hooks.momentProperties = [];
+
+ function copyConfig(to, from) {
+ var i, prop, val;
+
+ if (!isUndefined(from._isAMomentObject)) {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (!isUndefined(from._i)) {
+ to._i = from._i;
+ }
+ if (!isUndefined(from._f)) {
+ to._f = from._f;
+ }
+ if (!isUndefined(from._l)) {
+ to._l = from._l;
+ }
+ if (!isUndefined(from._strict)) {
+ to._strict = from._strict;
+ }
+ if (!isUndefined(from._tzm)) {
+ to._tzm = from._tzm;
+ }
+ if (!isUndefined(from._isUTC)) {
+ to._isUTC = from._isUTC;
+ }
+ if (!isUndefined(from._offset)) {
+ to._offset = from._offset;
+ }
+ if (!isUndefined(from._pf)) {
+ to._pf = getParsingFlags(from);
+ }
+ if (!isUndefined(from._locale)) {
+ to._locale = from._locale;
+ }
+
+ if (momentProperties.length > 0) {
+ for (i = 0; i < momentProperties.length; i++) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (!isUndefined(val)) {
+ to[prop] = val;
+ }
+ }
+ }
+
+ return to;
+ }
+
+ var updateInProgress = false;
+
+ // Moment prototype object
+ function Moment(config) {
+ copyConfig(this, config);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ if (!this.isValid()) {
+ this._d = new Date(NaN);
+ }
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ hooks.updateOffset(this);
+ updateInProgress = false;
+ }
+ }
+
+ function isMoment (obj) {
+ return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+ }
+
+ function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+ }
+
+ function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ value = absFloor(coercedNumber);
+ }
+
+ return value;
+ }
+
+ // compare two arrays, return the number of differences
+ function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if ((dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
+ }
+
+ function warn(msg) {
+ if (hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+ }
+
+ function deprecate(msg, fn) {
+ var firstTime = true;
+
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+ }
+
+ var deprecations = {};
+
+ function deprecateSimple(name, msg) {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
+ }
+ }
+
+ hooks.suppressDeprecationWarnings = false;
+ hooks.deprecationHandler = null;
+
+ function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+ }
+
+ function set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+ // TODO: Remove "ordinalParse" fallback in next major release.
+ this._dayOfMonthOrdinalParseLenient = new RegExp(
+ (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+ '|' + (/\d{1,2}/).source);
+ }
+
+ function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
+ }
+ }
+ return res;
+ }
+
+ function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
+ }
+
+ var keys;
+
+ if (Object.keys) {
+ keys = Object.keys;
+ } else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ };
+ }
+
+ var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ };
+
+ function calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
+ }
+
+ var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ };
+
+ function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
+
+ if (format || !formatUpper) {
+ return format;
+ }
+
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
+
+ return this._longDateFormat[key];
+ }
+
+ var defaultInvalidDate = 'Invalid date';
+
+ function invalidDate () {
+ return this._invalidDate;
+ }
+
+ var defaultOrdinal = '%d';
+ var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+
+ function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+ }
+
+ var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ ss : '%d seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ };
+
+ function relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+ }
+
+ function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+ }
+
+ var aliases = {};
+
+ function addUnitAlias (unit, shorthand) {
+ var lowerCase = unit.toLowerCase();
+ aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+ }
+
+ function normalizeUnits(units) {
+ return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+ }
+
+ function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
+
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
+
+ return normalizedInput;
+ }
+
+ var priorities = {};
+
+ function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+ }
+
+ function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+ }
+
+ function zeroFill(number, targetLength, forceSign) {
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
+ sign = number >= 0;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+ }
+
+ var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+ var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+ var formatFunctions = {};
+
+ var formatTokenFunctions = {};
+
+ // token: 'M'
+ // padded: ['MM', 2]
+ // ordinal: 'Mo'
+ // callback: function () { this.month() + 1 }
+ function addFormatToken (token, padded, ordinal, callback) {
+ var func = callback;
+ if (typeof callback === 'string') {
+ func = function () {
+ return this[callback]();
+ };
+ }
+ if (token) {
+ formatTokenFunctions[token] = func;
+ }
+ if (padded) {
+ formatTokenFunctions[padded[0]] = function () {
+ return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+ };
+ }
+ if (ordinal) {
+ formatTokenFunctions[ordinal] = function () {
+ return this.localeData().ordinal(func.apply(this, arguments), token);
+ };
+ }
+ }
+
+ function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
+ }
+
+ function makeFormatFunction(format) {
+ var array = format.match(formattingTokens), i, length;
+
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
+
+ return function (mom) {
+ var output = '', i;
+ for (i = 0; i < length; i++) {
+ output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
+ }
+ return output;
+ };
+ }
+
+ // format date using native date object
+ function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
+
+ format = expandFormat(format, m.localeData());
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+ return formatFunctions[format](m);
+ }
+
+ function expandFormat(format, locale) {
+ var i = 5;
+
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
+
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
+
+ return format;
+ }
+
+ var match1 = /\d/; // 0 - 9
+ var match2 = /\d\d/; // 00 - 99
+ var match3 = /\d{3}/; // 000 - 999
+ var match4 = /\d{4}/; // 0000 - 9999
+ var match6 = /[+-]?\d{6}/; // -999999 - 999999
+ var match1to2 = /\d\d?/; // 0 - 99
+ var match3to4 = /\d\d\d\d?/; // 999 - 9999
+ var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
+ var match1to3 = /\d{1,3}/; // 0 - 999
+ var match1to4 = /\d{1,4}/; // 0 - 9999
+ var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
+
+ var matchUnsigned = /\d+/; // 0 - inf
+ var matchSigned = /[+-]?\d+/; // -inf - inf
+
+ var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+ var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+ var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+ // any word (or two) characters or numbers including two/three word month in arabic.
+ // includes scottish gaelic two word and hyphenated months
+ var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
+
+ var regexes = {};
+
+ function addRegexToken (token, regex, strictRegex) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+ return (isStrict && strictRegex) ? strictRegex : regex;
+ };
+ }
+
+ function getParseRegexForToken (token, config) {
+ if (!hasOwnProp(regexes, token)) {
+ return new RegExp(unescapeFormat(token));
+ }
+
+ return regexes[token](config._strict, config._locale);
+ }
+
+ // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+ function unescapeFormat(s) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return p1 || p2 || p3 || p4;
+ }));
+ }
+
+ function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }
+
+ var tokens = {};
+
+ function addParseToken (token, callback) {
+ var i, func = callback;
+ if (typeof token === 'string') {
+ token = [token];
+ }
+ if (isNumber(callback)) {
+ func = function (input, array) {
+ array[callback] = toInt(input);
+ };
+ }
+ for (i = 0; i < token.length; i++) {
+ tokens[token[i]] = func;
+ }
+ }
+
+ function addWeekParseToken (token, callback) {
+ addParseToken(token, function (input, array, config, token) {
+ config._w = config._w || {};
+ callback(input, config._w, config, token);
+ });
+ }
+
+ function addTimeToArrayFromToken(token, input, config) {
+ if (input != null && hasOwnProp(tokens, token)) {
+ tokens[token](input, config._a, config, token);
+ }
+ }
+
+ var YEAR = 0;
+ var MONTH = 1;
+ var DATE = 2;
+ var HOUR = 3;
+ var MINUTE = 4;
+ var SECOND = 5;
+ var MILLISECOND = 6;
+ var WEEK = 7;
+ var WEEKDAY = 8;
+
+ // FORMATTING
+
+ addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+ });
+
+ addFormatToken(0, ['YY', 2], 0, function () {
+ return this.year() % 100;
+ });
+
+ addFormatToken(0, ['YYYY', 4], 0, 'year');
+ addFormatToken(0, ['YYYYY', 5], 0, 'year');
+ addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+ // ALIASES
+
+ addUnitAlias('year', 'y');
+
+ // PRIORITIES
+
+ addUnitPriority('year', 1);
+
+ // PARSING
+
+ addRegexToken('Y', matchSigned);
+ addRegexToken('YY', match1to2, match2);
+ addRegexToken('YYYY', match1to4, match4);
+ addRegexToken('YYYYY', match1to6, match6);
+ addRegexToken('YYYYYY', match1to6, match6);
+
+ addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+ addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+ });
+ addParseToken('YY', function (input, array) {
+ array[YEAR] = hooks.parseTwoDigitYear(input);
+ });
+ addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+ });
+
+ // HELPERS
+
+ function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+ }
+
+ function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+ }
+
+ // HOOKS
+
+ hooks.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+ };
+
+ // MOMENTS
+
+ var getSetYear = makeGetSet('FullYear', true);
+
+ function getIsLeapYear () {
+ return isLeapYear(this.year());
+ }
+
+ function makeGetSet (unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ set$1(this, unit, value);
+ hooks.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return get(this, unit);
+ }
+ };
+ }
+
+ function get (mom, unit) {
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+ }
+
+ function set$1 (mom, unit, value) {
+ if (mom.isValid() && !isNaN(value)) {
+ if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
+ }
+ else {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+ }
+ }
+
+ // MOMENTS
+
+ function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+ }
+
+
+ function stringSet (units, value) {
+ if (typeof units === 'object') {
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
+ }
+ } else {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units](value);
+ }
+ }
+ return this;
+ }
+
+ function mod(n, x) {
+ return ((n % x) + x) % x;
+ }
+
+ var indexOf;
+
+ if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+ } else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ }
+
+ function daysInMonth(year, month) {
+ if (isNaN(year) || isNaN(month)) {
+ return NaN;
+ }
+ var modMonth = mod(month, 12);
+ year += (month - modMonth) / 12;
+ return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
+ }
+
+ // FORMATTING
+
+ addFormatToken('M', ['MM', 2], 'Mo', function () {
+ return this.month() + 1;
+ });
+
+ addFormatToken('MMM', 0, 0, function (format) {
+ return this.localeData().monthsShort(this, format);
+ });
+
+ addFormatToken('MMMM', 0, 0, function (format) {
+ return this.localeData().months(this, format);
+ });
+
+ // ALIASES
+
+ addUnitAlias('month', 'M');
+
+ // PRIORITY
+
+ addUnitPriority('month', 8);
+
+ // PARSING
+
+ addRegexToken('M', match1to2);
+ addRegexToken('MM', match1to2, match2);
+ addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+ });
+ addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+ });
+
+ addParseToken(['M', 'MM'], function (input, array) {
+ array[MONTH] = toInt(input) - 1;
+ });
+
+ addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+ var month = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (month != null) {
+ array[MONTH] = month;
+ } else {
+ getParsingFlags(config).invalidMonth = input;
+ }
+ });
+
+ // LOCALES
+
+ var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+ var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+ function localeMonths (m, format) {
+ if (!m) {
+ return isArray(this._months) ? this._months :
+ this._months['standalone'];
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+ }
+
+ var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+ function localeMonthsShort (m, format) {
+ if (!m) {
+ return isArray(this._monthsShort) ? this._monthsShort :
+ this._monthsShort['standalone'];
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+ }
+
+ function handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
+
+ function localeMonthsParse (monthName, format, strict) {
+ var i, mom, regex;
+
+ if (this._monthsParseExact) {
+ return handleStrictParse.call(this, monthName, format, strict);
+ }
+
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
+
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+ }
+
+ // MOMENTS
+
+ function setMonth (mom, value) {
+ var dayOfMonth;
+
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
+ if (typeof value === 'string') {
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (!isNumber(value)) {
+ return mom;
+ }
+ }
+ }
+
+ dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+ }
+
+ function getSetMonth (value) {
+ if (value != null) {
+ setMonth(this, value);
+ hooks.updateOffset(this, true);
+ return this;
+ } else {
+ return get(this, 'Month');
+ }
+ }
+
+ function getDaysInMonth () {
+ return daysInMonth(this.year(), this.month());
+ }
+
+ var defaultMonthsShortRegex = matchWord;
+ function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
+ }
+ }
+
+ var defaultMonthsRegex = matchWord;
+ function monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
+ }
+ }
+
+ function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ }
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ }
+
+ function createDate (y, m, d, h, M, s, ms) {
+ // can't just apply() to create a date:
+ // https://stackoverflow.com/q/181348
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ // the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+ }
+
+ function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ // the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+ }
+
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+ }
+
+ // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+ function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+ }
+
+ function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+ }
+
+ function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+ }
+
+ // FORMATTING
+
+ addFormatToken('w', ['ww', 2], 'wo', 'week');
+ addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+ // ALIASES
+
+ addUnitAlias('week', 'w');
+ addUnitAlias('isoWeek', 'W');
+
+ // PRIORITIES
+
+ addUnitPriority('week', 5);
+ addUnitPriority('isoWeek', 5);
+
+ // PARSING
+
+ addRegexToken('w', match1to2);
+ addRegexToken('ww', match1to2, match2);
+ addRegexToken('W', match1to2);
+ addRegexToken('WW', match1to2, match2);
+
+ addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+ week[token.substr(0, 1)] = toInt(input);
+ });
+
+ // HELPERS
+
+ // LOCALES
+
+ function localeWeek (mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+ }
+
+ var defaultLocaleWeek = {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ };
+
+ function localeFirstDayOfWeek () {
+ return this._week.dow;
+ }
+
+ function localeFirstDayOfYear () {
+ return this._week.doy;
+ }
+
+ // MOMENTS
+
+ function getSetWeek (input) {
+ var week = this.localeData().week(this);
+ return input == null ? week : this.add((input - week) * 7, 'd');
+ }
+
+ function getSetISOWeek (input) {
+ var week = weekOfYear(this, 1, 4).week;
+ return input == null ? week : this.add((input - week) * 7, 'd');
+ }
+
+ // FORMATTING
+
+ addFormatToken('d', 0, 'do', 'day');
+
+ addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+ });
+
+ addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+ });
+
+ addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+ });
+
+ addFormatToken('e', 0, 0, 'weekday');
+ addFormatToken('E', 0, 0, 'isoWeekday');
+
+ // ALIASES
+
+ addUnitAlias('day', 'd');
+ addUnitAlias('weekday', 'e');
+ addUnitAlias('isoWeekday', 'E');
+
+ // PRIORITY
+ addUnitPriority('day', 11);
+ addUnitPriority('weekday', 11);
+ addUnitPriority('isoWeekday', 11);
+
+ // PARSING
+
+ addRegexToken('d', match1to2);
+ addRegexToken('e', match1to2);
+ addRegexToken('E', match1to2);
+ addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+ });
+ addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+ });
+ addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+ });
+
+ addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+ });
+
+ addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
+ });
+
+ // HELPERS
+
+ function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
+
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
+
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+ }
+
+ function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+ }
+
+ // LOCALES
+
+ var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+ function localeWeekdays (m, format) {
+ if (!m) {
+ return isArray(this._weekdays) ? this._weekdays :
+ this._weekdays['standalone'];
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+ }
+
+ var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+ function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+ }
+
+ var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+ function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+ }
+
+ function handleStrictParse$1(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
+
+ function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return handleStrictParse$1.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+ }
+
+ // MOMENTS
+
+ function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+ }
+
+ function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+ }
+
+ function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+ }
+
+ var defaultWeekdaysRegex = matchWord;
+ function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+ }
+
+ var defaultWeekdaysShortRegex = matchWord;
+ function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+ }
+
+ var defaultWeekdaysMinRegex = matchWord;
+ function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+ }
+
+
+ function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+ }
+
+ // FORMATTING
+
+ function hFormat() {
+ return this.hours() % 12 || 12;
+ }
+
+ function kFormat() {
+ return this.hours() || 24;
+ }
+
+ addFormatToken('H', ['HH', 2], 0, 'hour');
+ addFormatToken('h', ['hh', 2], 0, hFormat);
+ addFormatToken('k', ['kk', 2], 0, kFormat);
+
+ addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+ }
+
+ meridiem('a', true);
+ meridiem('A', false);
+
+ // ALIASES
+
+ addUnitAlias('hour', 'h');
+
+ // PRIORITY
+ addUnitPriority('hour', 13);
+
+ // PARSING
+
+ function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+ }
+
+ addRegexToken('a', matchMeridiem);
+ addRegexToken('A', matchMeridiem);
+ addRegexToken('H', match1to2);
+ addRegexToken('h', match1to2);
+ addRegexToken('k', match1to2);
+ addRegexToken('HH', match1to2, match2);
+ addRegexToken('hh', match1to2, match2);
+ addRegexToken('kk', match1to2, match2);
+
+ addRegexToken('hmm', match3to4);
+ addRegexToken('hmmss', match5to6);
+ addRegexToken('Hmm', match3to4);
+ addRegexToken('Hmmss', match5to6);
+
+ addParseToken(['H', 'HH'], HOUR);
+ addParseToken(['k', 'kk'], function (input, array, config) {
+ var kInput = toInt(input);
+ array[HOUR] = kInput === 24 ? 0 : kInput;
+ });
+ addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+ });
+ addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ });
+ addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ });
+
+ // LOCALES
+
+ function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+ }
+
+ var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+ function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+ }
+
+
+ // MOMENTS
+
+ // Setting the hour should keep the time, because the user explicitly
+ // specified which hour they want. So trying to maintain the same hour (in
+ // a new timezone) makes sense. Adding/subtracting hours does not follow
+ // this rule.
+ var getSetHour = makeGetSet('Hours', true);
+
+ var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+ };
+
+ // internal storage for locale config files
+ var locales = {};
+ var localeFamilies = {};
+ var globalLocale;
+
+ function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+ }
+
+ // pick the locale from the array
+ // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+ // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+ function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return globalLocale;
+ }
+
+ function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.exports) {
+ try {
+ oldLocale = globalLocale._abbr;
+ var aliasedRequire = require;
+ __webpack_require__(819)("./" + name);
+ getSetGlobalLocale(oldLocale);
+ } catch (e) {}
+ }
+ return locales[name];
+ }
+
+ // This function will load locale and then set the global locale. If
+ // no arguments are passed in, it will simply return the current global
+ // locale key.
+ function getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ else {
+ if ((typeof console !== 'undefined') && console.warn) {
+ //warn user if arguments are passed but the locale could not be set
+ console.warn('Locale ' + key + ' not found. Did you forget to load it?');
+ }
+ }
+ }
+
+ return globalLocale._abbr;
+ }
+
+ function defineLocale (name, config) {
+ if (config !== null) {
+ var locale, parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ locale = loadLocale(config.parentLocale);
+ if (locale != null) {
+ parentConfig = locale._config;
+ } else {
+ if (!localeFamilies[config.parentLocale]) {
+ localeFamilies[config.parentLocale] = [];
+ }
+ localeFamilies[config.parentLocale].push({
+ name: name,
+ config: config
+ });
+ return null;
+ }
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ if (localeFamilies[name]) {
+ localeFamilies[name].forEach(function (x) {
+ defineLocale(x.name, x.config);
+ });
+ }
+
+ // backwards compat for now: also set the locale
+ // make sure we set the locale AFTER all child locales have been
+ // created, so we won't end up with the child locale set.
+ getSetGlobalLocale(name);
+
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+ }
+
+ function updateLocale(name, config) {
+ if (config != null) {
+ var locale, tmpLocale, parentConfig = baseConfig;
+ // MERGE
+ tmpLocale = loadLocale(name);
+ if (tmpLocale != null) {
+ parentConfig = tmpLocale._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+ }
+
+ // returns locale data
+ function getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
+ }
+
+ function listLocales() {
+ return keys(locales);
+ }
+
+ function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+ }
+
+ // Pick the first defined of two or three arguments.
+ function defaults(a, b, c) {
+ if (a != null) {
+ return a;
+ }
+ if (b != null) {
+ return b;
+ }
+ return c;
+ }
+
+ function currentDateArray(config) {
+ // hooks is actually the exported moment object
+ var nowValue = new Date(hooks.now());
+ if (config._useUTC) {
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+ }
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+ }
+
+ // convert an array to a date.
+ // the array should mirror the parameters below
+ // note: all values past the year are optional and will default to the lowest possible value.
+ // [year, month, day , hour, minute, second, millisecond]
+ function configFromArray (config) {
+ var i, date, input = [], currentDate, expectedWeekday, yearToUse;
+
+ if (config._d) {
+ return;
+ }
+
+ currentDate = currentDateArray(config);
+
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
+
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear != null) {
+ yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+ if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
+ getParsingFlags(config)._overflowDayOfYear = true;
+ }
+
+ date = createUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
+
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
+
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+ }
+
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
+ config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+ expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
+
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
+
+ // check for mismatching day of week
+ if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
+ getParsingFlags(config).weekdayMismatch = true;
+ }
+ }
+
+ function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
+
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+ week = defaults(w.W, 1);
+ weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
+
+ var curWeek = weekOfYear(createLocal(), dow, doy);
+
+ weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+ // Default to current week.
+ week = defaults(w.w, curWeek.week);
+
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from begining of week
+ weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
+ } else {
+ // default to begining of week
+ weekday = dow;
+ }
+ }
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+ }
+
+ // iso 8601 regex
+ // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+ var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+ var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+ var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+ var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+ ];
+
+ // iso time formats and regexes
+ var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+ ];
+
+ var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+ // date from iso format
+ function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+ }
+
+ // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+ var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;
+
+ function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
+ var result = [
+ untruncateYear(yearStr),
+ defaultLocaleMonthsShort.indexOf(monthStr),
+ parseInt(dayStr, 10),
+ parseInt(hourStr, 10),
+ parseInt(minuteStr, 10)
+ ];
+
+ if (secondStr) {
+ result.push(parseInt(secondStr, 10));
+ }
+
+ return result;
+ }
+
+ function untruncateYear(yearStr) {
+ var year = parseInt(yearStr, 10);
+ if (year <= 49) {
+ return 2000 + year;
+ } else if (year <= 999) {
+ return 1900 + year;
+ }
+ return year;
+ }
+
+ function preprocessRFC2822(s) {
+ // Remove comments and folding whitespace and replace multiple-spaces with a single space
+ return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+ }
+
+ function checkWeekday(weekdayStr, parsedInput, config) {
+ if (weekdayStr) {
+ // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
+ var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+ weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
+ if (weekdayProvided !== weekdayActual) {
+ getParsingFlags(config).weekdayMismatch = true;
+ config._isValid = false;
+ return false;
+ }
+ }
+ return true;
+ }
+
+ var obsOffsets = {
+ UT: 0,
+ GMT: 0,
+ EDT: -4 * 60,
+ EST: -5 * 60,
+ CDT: -5 * 60,
+ CST: -6 * 60,
+ MDT: -6 * 60,
+ MST: -7 * 60,
+ PDT: -7 * 60,
+ PST: -8 * 60
+ };
+
+ function calculateOffset(obsOffset, militaryOffset, numOffset) {
+ if (obsOffset) {
+ return obsOffsets[obsOffset];
+ } else if (militaryOffset) {
+ // the only allowed military tz is Z
+ return 0;
+ } else {
+ var hm = parseInt(numOffset, 10);
+ var m = hm % 100, h = (hm - m) / 100;
+ return h * 60 + m;
+ }
+ }
+
+ // date and time from ref 2822 format
+ function configFromRFC2822(config) {
+ var match = rfc2822.exec(preprocessRFC2822(config._i));
+ if (match) {
+ var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
+ if (!checkWeekday(match[1], parsedArray, config)) {
+ return;
+ }
+
+ config._a = parsedArray;
+ config._tzm = calculateOffset(match[8], match[9], match[10]);
+
+ config._d = createUTCDate.apply(null, config._a);
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+
+ getParsingFlags(config).rfc2822 = true;
+ } else {
+ config._isValid = false;
+ }
+ }
+
+ // date from iso format or fallback
+ function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ } else {
+ return;
+ }
+
+ configFromRFC2822(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ } else {
+ return;
+ }
+
+ // Final attempt, use Input Fallback
+ hooks.createFromInputFallback(config);
+ }
+
+ hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+ );
+
+ // constant that refers to the ISO standard
+ hooks.ISO_8601 = function () {};
+
+ // constant that refers to the RFC 2822 form
+ hooks.RFC_2822 = function () {};
+
+ // date from string and format string
+ function configFromStringAndFormat(config) {
+ // TODO: Move this to another part of the creation flow to prevent circular deps
+ if (config._f === hooks.ISO_8601) {
+ configFromISO(config);
+ return;
+ }
+ if (config._f === hooks.RFC_2822) {
+ configFromRFC2822(config);
+ return;
+ }
+ config._a = [];
+ getParsingFlags(config).empty = true;
+
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i, parsedInput, tokens, token, skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0;
+
+ tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ getParsingFlags(config).unusedInput.push(skipped);
+ }
+ string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ getParsingFlags(config).empty = false;
+ }
+ else {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ }
+ else if (config._strict && !parsedInput) {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ }
+
+ // add remaining unparsed input length to the string
+ getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ getParsingFlags(config).unusedInput.push(string);
+ }
+
+ // clear _12h flag if hour is <= 12
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
+ getParsingFlags(config).bigHour = undefined;
+ }
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+ configFromArray(config);
+ checkOverflow(config);
+ }
+
+
+ function meridiemFixWrap (locale, hour, meridiem) {
+ var isPm;
+
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // this is not supposed to happen
+ return hour;
+ }
+ }
+
+ // date from string and array of format strings
+ function configFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+
+ scoreToBeat,
+ i,
+ currentScore;
+
+ if (config._f.length === 0) {
+ getParsingFlags(config).invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
+
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._f = config._f[i];
+ configFromStringAndFormat(tempConfig);
+
+ if (!isValid(tempConfig)) {
+ continue;
+ }
+
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+ //or tokens
+ currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+ getParsingFlags(tempConfig).score = currentScore;
+
+ if (scoreToBeat == null || currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+
+ extend(config, bestMoment || tempConfig);
+ }
+
+ function configFromObject(config) {
+ if (config._d) {
+ return;
+ }
+
+ var i = normalizeObjectUnits(config._i);
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
+
+ configFromArray(config);
+ }
+
+ function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+ }
+
+ function prepareConfig (config) {
+ var input = config._i,
+ format = config._f;
+
+ config._locale = config._locale || getLocale(config._l);
+
+ if (input === null || (format === undefined && input === '')) {
+ return createInvalid({nullInput: true});
+ }
+
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
+
+ if (isMoment(input)) {
+ return new Moment(checkOverflow(input));
+ } else if (isDate(input)) {
+ config._d = input;
+ } else if (isArray(format)) {
+ configFromStringAndArray(config);
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
+ configFromInput(config);
+ }
+
+ if (!isValid(config)) {
+ config._d = null;
+ }
+
+ return config;
+ }
+
+ function configFromInput(config) {
+ var input = config._i;
+ if (isUndefined(input)) {
+ config._d = new Date(hooks.now());
+ } else if (isDate(input)) {
+ config._d = new Date(input.valueOf());
+ } else if (typeof input === 'string') {
+ configFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ configFromArray(config);
+ } else if (isObject(input)) {
+ configFromObject(config);
+ } else if (isNumber(input)) {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ hooks.createFromInputFallback(config);
+ }
+ }
+
+ function createLocalOrUTC (input, format, locale, strict, isUTC) {
+ var c = {};
+
+ if (locale === true || locale === false) {
+ strict = locale;
+ locale = undefined;
+ }
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c._isAMomentObject = true;
+ c._useUTC = c._isUTC = isUTC;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+
+ return createFromConfig(c);
+ }
+
+ function createLocal (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, false);
+ }
+
+ var prototypeMin = deprecate(
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+ );
+
+ var prototypeMax = deprecate(
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+ );
+
+ // Pick a moment m from moments so that m[fn](other) is true for all
+ // other. This relies on the function fn to be transitive.
+ //
+ // moments should either be an array of moment objects or an array, whose
+ // first element is an array of moment objects.
+ function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
+ }
+ if (!moments.length) {
+ return createLocal();
+ }
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+ }
+
+ // TODO: Use [].sort instead?
+ function min () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isBefore', args);
+ }
+
+ function max () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isAfter', args);
+ }
+
+ var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+ };
+
+ var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
+
+ function isDurationValid(m) {
+ for (var key in m) {
+ if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
+ return false;
+ }
+ }
+
+ var unitHasDecimal = false;
+ for (var i = 0; i < ordering.length; ++i) {
+ if (m[ordering[i]]) {
+ if (unitHasDecimal) {
+ return false; // only allow non-integers for smallest unit
+ }
+ if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+ unitHasDecimal = true;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ function isValid$1() {
+ return this._isValid;
+ }
+
+ function createInvalid$1() {
+ return createDuration(NaN);
+ }
+
+ function Duration (duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
+
+ this._isValid = isDurationValid(normalizedInput);
+
+ // representation for dateAddRemove
+ this._milliseconds = +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days +
+ weeks * 7;
+ // It is impossible to translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months +
+ quarters * 3 +
+ years * 12;
+
+ this._data = {};
+
+ this._locale = getLocale();
+
+ this._bubble();
+ }
+
+ function isDuration (obj) {
+ return obj instanceof Duration;
+ }
+
+ function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+ }
+
+ // FORMATTING
+
+ function offset (token, separator) {
+ addFormatToken(token, 0, 0, function () {
+ var offset = this.utcOffset();
+ var sign = '+';
+ if (offset < 0) {
+ offset = -offset;
+ sign = '-';
+ }
+ return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+ });
+ }
+
+ offset('Z', ':');
+ offset('ZZ', '');
+
+ // PARSING
+
+ addRegexToken('Z', matchShortOffset);
+ addRegexToken('ZZ', matchShortOffset);
+ addParseToken(['Z', 'ZZ'], function (input, array, config) {
+ config._useUTC = true;
+ config._tzm = offsetFromString(matchShortOffset, input);
+ });
+
+ // HELPERS
+
+ // timezone chunker
+ // '+10:00' > ['10', '00']
+ // '-1530' > ['-15', '30']
+ var chunkOffset = /([\+\-]|\d\d)/gi;
+
+ function offsetFromString(matcher, string) {
+ var matches = (string || '').match(matcher);
+
+ if (matches === null) {
+ return null;
+ }
+
+ var chunk = matches[matches.length - 1] || [];
+ var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+ var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+ return minutes === 0 ?
+ 0 :
+ parts[0] === '+' ? minutes : -minutes;
+ }
+
+ // Return a moment from input, that is local/utc/zone equivalent to model.
+ function cloneWithOffset(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(res._d.valueOf() + diff);
+ hooks.updateOffset(res, false);
+ return res;
+ } else {
+ return createLocal(input).local();
+ }
+ }
+
+ function getDateOffset (m) {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+ }
+
+ // HOOKS
+
+ // This function will be called whenever a moment is mutated.
+ // It is intended to keep the offset in sync with the timezone.
+ hooks.updateOffset = function () {};
+
+ // MOMENTS
+
+ // keepLocalTime = true means only change the timezone, without
+ // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+ // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+ // +0200, so we adjust the time as needed, to be valid.
+ //
+ // Keeping the time actually adds/subtracts (one hour)
+ // from the actual represented time. That is why we call updateOffset
+ // a second time. In case it wants us to change the offset again
+ // _changeInProgress == true case, then we have to adjust, because
+ // there is no such time in the given timezone.
+ function getSetOffset (input, keepLocalTime, keepMinutes) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = offsetFromString(matchShortOffset, input);
+ if (input === null) {
+ return this;
+ }
+ } else if (Math.abs(input) < 16 && !keepMinutes) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = getDateOffset(this);
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ hooks.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+ return this;
+ } else {
+ return this._isUTC ? offset : getDateOffset(this);
+ }
+ }
+
+ function getSetZone (input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
+
+ this.utcOffset(input, keepLocalTime);
+
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
+ }
+
+ function setOffsetToUTC (keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
+ }
+
+ function setOffsetToLocal (keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(getDateOffset(this), 'm');
+ }
+ }
+ return this;
+ }
+
+ function setOffsetToParsedOffset () {
+ if (this._tzm != null) {
+ this.utcOffset(this._tzm, false, true);
+ } else if (typeof this._i === 'string') {
+ var tZone = offsetFromString(matchOffset, this._i);
+ if (tZone != null) {
+ this.utcOffset(tZone);
+ }
+ else {
+ this.utcOffset(0, true);
+ }
+ }
+ return this;
+ }
+
+ function hasAlignedHourOffset (input) {
+ if (!this.isValid()) {
+ return false;
+ }
+ input = input ? createLocal(input).utcOffset() : 0;
+
+ return (this.utcOffset() - input) % 60 === 0;
+ }
+
+ function isDaylightSavingTime () {
+ return (
+ this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset()
+ );
+ }
+
+ function isDaylightSavingTimeShifted () {
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
+ }
+
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
+ }
+
+ function isLocal () {
+ return this.isValid() ? !this._isUTC : false;
+ }
+
+ function isUtcOffset () {
+ return this.isValid() ? this._isUTC : false;
+ }
+
+ function isUtc () {
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
+ }
+
+ // ASP.NET json date format regex
+ var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+ // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+ // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+ // and further modified to allow for strings containing both week and day
+ var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+
+ function createDuration (input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ diffRes;
+
+ if (isDuration(input)) {
+ duration = {
+ ms : input._milliseconds,
+ d : input._days,
+ M : input._months
+ };
+ } else if (isNumber(input)) {
+ duration = {};
+ if (key) {
+ duration[key] = input;
+ } else {
+ duration.milliseconds = input;
+ }
+ } else if (!!(match = aspNetRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : 0,
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+ };
+ } else if (!!(match = isoRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;
+ duration = {
+ y : parseIso(match[2], sign),
+ M : parseIso(match[3], sign),
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
+ };
+ } else if (duration == null) {// checks for null or undefined
+ duration = {};
+ } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+ diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
+
+ ret = new Duration(duration);
+
+ if (isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
+
+ return ret;
+ }
+
+ createDuration.fn = Duration.prototype;
+ createDuration.invalid = createInvalid$1;
+
+ function parseIso (inp, sign) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
+ }
+
+ function positiveMomentsDifference(base, other) {
+ var res = {milliseconds: 0, months: 0};
+
+ res.months = other.month() - base.month() +
+ (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
+ }
+
+ res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+ return res;
+ }
+
+ function momentsDifference(base, other) {
+ var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
+ other = cloneWithOffset(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
+ }
+
+ return res;
+ }
+
+ // TODO: remove 'name' arg after deprecation is removed
+ function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+ tmp = val; val = period; period = tmp;
+ }
+
+ val = typeof val === 'string' ? +val : val;
+ dur = createDuration(val, period);
+ addSubtract(this, dur, direction);
+ return this;
+ };
+ }
+
+ function addSubtract (mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
+ updateOffset = updateOffset == null ? true : updateOffset;
+
+ if (months) {
+ setMonth(mom, get(mom, 'Month') + months * isAdding);
+ }
+ if (days) {
+ set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+ }
+ if (milliseconds) {
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+ }
+ if (updateOffset) {
+ hooks.updateOffset(mom, days || months);
+ }
+ }
+
+ var add = createAdder(1, 'add');
+ var subtract = createAdder(-1, 'subtract');
+
+ function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' : 'sameElse';
+ }
+
+ function calendar$1 (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+ }
+
+ function clone () {
+ return new Moment(this);
+ }
+
+ function isAfter (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() > localInput.valueOf();
+ } else {
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
+ }
+ }
+
+ function isBefore (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() < localInput.valueOf();
+ } else {
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
+ }
+ }
+
+ function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
+ }
+
+ function isSame (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(units || 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() === localInput.valueOf();
+ } else {
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+ }
+ }
+
+ function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+ }
+
+ function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
+ }
+
+ function diff (input, units, asFloat) {
+ var that,
+ zoneDelta,
+ output;
+
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+ units = normalizeUnits(units);
+
+ switch (units) {
+ case 'year': output = monthDiff(this, that) / 12; break;
+ case 'month': output = monthDiff(this, that); break;
+ case 'quarter': output = monthDiff(this, that) / 3; break;
+ case 'second': output = (this - that) / 1e3; break; // 1000
+ case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
+ case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
+ case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
+ case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
+ default: output = this - that;
+ }
+
+ return asFloat ? output : absFloor(output);
+ }
+
+ function monthDiff (a, b) {
+ // difference in months
+ var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2, adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
+ }
+
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
+ }
+
+ hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+ hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+ function toString () {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+ }
+
+ function toISOString(keepOffset) {
+ if (!this.isValid()) {
+ return null;
+ }
+ var utc = keepOffset !== true;
+ var m = utc ? this.clone().utc() : this;
+ if (m.year() < 0 || m.year() > 9999) {
+ return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
+ }
+ if (isFunction(Date.prototype.toISOString)) {
+ // native implementation is ~50x faster, use it when we can
+ if (utc) {
+ return this.toDate().toISOString();
+ } else {
+ return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
+ }
+ }
+ return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
+ }
+
+ /**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+ function inspect () {
+ if (!this.isValid()) {
+ return 'moment.invalid(/* ' + this._i + ' */)';
+ }
+ var func = 'moment';
+ var zone = '';
+ if (!this.isLocal()) {
+ func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+ zone = 'Z';
+ }
+ var prefix = '[' + func + '("]';
+ var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+ var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+ var suffix = zone + '[")]';
+
+ return this.format(prefix + year + datetime + suffix);
+ }
+
+ function format (inputString) {
+ if (!inputString) {
+ inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
+ return this.localeData().postformat(output);
+ }
+
+ function from (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+ }
+
+ function fromNow (withoutSuffix) {
+ return this.from(createLocal(), withoutSuffix);
+ }
+
+ function to (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+ }
+
+ function toNow (withoutSuffix) {
+ return this.to(createLocal(), withoutSuffix);
+ }
+
+ // If passed a locale key, it will set the locale for this
+ // instance. Otherwise, it will return the locale configuration
+ // variables for this instance.
+ function locale (key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = getLocale(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
+ }
+ }
+
+ var lang = deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
+ } else {
+ return this.locale(key);
+ }
+ }
+ );
+
+ function localeData () {
+ return this._locale;
+ }
+
+ function startOf (units) {
+ units = normalizeUnits(units);
+ // the following switch intentionally omits break keywords
+ // to utilize falling through the cases.
+ switch (units) {
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
+ }
+
+ // weeks are a special case
+ if (units === 'week') {
+ this.weekday(0);
+ }
+ if (units === 'isoWeek') {
+ this.isoWeekday(1);
+ }
+
+ // quarters are also special
+ if (units === 'quarter') {
+ this.month(Math.floor(this.month() / 3) * 3);
+ }
+
+ return this;
+ }
+
+ function endOf (units) {
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
+ return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+ }
+
+ function valueOf () {
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
+ }
+
+ function unix () {
+ return Math.floor(this.valueOf() / 1000);
+ }
+
+ function toDate () {
+ return new Date(this.valueOf());
+ }
+
+ function toArray () {
+ var m = this;
+ return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+ }
+
+ function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+ }
+
+ function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+ }
+
+ function isValid$2 () {
+ return isValid(this);
+ }
+
+ function parsingFlags () {
+ return extend({}, getParsingFlags(this));
+ }
+
+ function invalidAt () {
+ return getParsingFlags(this).overflow;
+ }
+
+ function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+ }
+
+ // FORMATTING
+
+ addFormatToken(0, ['gg', 2], 0, function () {
+ return this.weekYear() % 100;
+ });
+
+ addFormatToken(0, ['GG', 2], 0, function () {
+ return this.isoWeekYear() % 100;
+ });
+
+ function addWeekYearFormatToken (token, getter) {
+ addFormatToken(0, [token, token.length], 0, getter);
+ }
+
+ addWeekYearFormatToken('gggg', 'weekYear');
+ addWeekYearFormatToken('ggggg', 'weekYear');
+ addWeekYearFormatToken('GGGG', 'isoWeekYear');
+ addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+ // ALIASES
+
+ addUnitAlias('weekYear', 'gg');
+ addUnitAlias('isoWeekYear', 'GG');
+
+ // PRIORITY
+
+ addUnitPriority('weekYear', 1);
+ addUnitPriority('isoWeekYear', 1);
+
+
+ // PARSING
+
+ addRegexToken('G', matchSigned);
+ addRegexToken('g', matchSigned);
+ addRegexToken('GG', match1to2, match2);
+ addRegexToken('gg', match1to2, match2);
+ addRegexToken('GGGG', match1to4, match4);
+ addRegexToken('gggg', match1to4, match4);
+ addRegexToken('GGGGG', match1to6, match6);
+ addRegexToken('ggggg', match1to6, match6);
+
+ addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+ week[token.substr(0, 2)] = toInt(input);
+ });
+
+ addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+ week[token] = hooks.parseTwoDigitYear(input);
+ });
+
+ // MOMENTS
+
+ function getSetWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
+ }
+
+ function getSetISOWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
+ }
+
+ function getISOWeeksInYear () {
+ return weeksInYear(this.year(), 1, 4);
+ }
+
+ function getWeeksInYear () {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+ }
+
+ function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+ }
+
+ function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+ }
+
+ // FORMATTING
+
+ addFormatToken('Q', 0, 'Qo', 'quarter');
+
+ // ALIASES
+
+ addUnitAlias('quarter', 'Q');
+
+ // PRIORITY
+
+ addUnitPriority('quarter', 7);
+
+ // PARSING
+
+ addRegexToken('Q', match1);
+ addParseToken('Q', function (input, array) {
+ array[MONTH] = (toInt(input) - 1) * 3;
+ });
+
+ // MOMENTS
+
+ function getSetQuarter (input) {
+ return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+ }
+
+ // FORMATTING
+
+ addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+ // ALIASES
+
+ addUnitAlias('date', 'D');
+
+ // PRIORITY
+ addUnitPriority('date', 9);
+
+ // PARSING
+
+ addRegexToken('D', match1to2);
+ addRegexToken('DD', match1to2, match2);
+ addRegexToken('Do', function (isStrict, locale) {
+ // TODO: Remove "ordinalParse" fallback in next major release.
+ return isStrict ?
+ (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
+ locale._dayOfMonthOrdinalParseLenient;
+ });
+
+ addParseToken(['D', 'DD'], DATE);
+ addParseToken('Do', function (input, array) {
+ array[DATE] = toInt(input.match(match1to2)[0]);
+ });
+
+ // MOMENTS
+
+ var getSetDayOfMonth = makeGetSet('Date', true);
+
+ // FORMATTING
+
+ addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+ // ALIASES
+
+ addUnitAlias('dayOfYear', 'DDD');
+
+ // PRIORITY
+ addUnitPriority('dayOfYear', 4);
+
+ // PARSING
+
+ addRegexToken('DDD', match1to3);
+ addRegexToken('DDDD', match3);
+ addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
+ });
+
+ // HELPERS
+
+ // MOMENTS
+
+ function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+ }
+
+ // FORMATTING
+
+ addFormatToken('m', ['mm', 2], 0, 'minute');
+
+ // ALIASES
+
+ addUnitAlias('minute', 'm');
+
+ // PRIORITY
+
+ addUnitPriority('minute', 14);
+
+ // PARSING
+
+ addRegexToken('m', match1to2);
+ addRegexToken('mm', match1to2, match2);
+ addParseToken(['m', 'mm'], MINUTE);
+
+ // MOMENTS
+
+ var getSetMinute = makeGetSet('Minutes', false);
+
+ // FORMATTING
+
+ addFormatToken('s', ['ss', 2], 0, 'second');
+
+ // ALIASES
+
+ addUnitAlias('second', 's');
+
+ // PRIORITY
+
+ addUnitPriority('second', 15);
+
+ // PARSING
+
+ addRegexToken('s', match1to2);
+ addRegexToken('ss', match1to2, match2);
+ addParseToken(['s', 'ss'], SECOND);
+
+ // MOMENTS
+
+ var getSetSecond = makeGetSet('Seconds', false);
+
+ // FORMATTING
+
+ addFormatToken('S', 0, 0, function () {
+ return ~~(this.millisecond() / 100);
+ });
+
+ addFormatToken(0, ['SS', 2], 0, function () {
+ return ~~(this.millisecond() / 10);
+ });
+
+ addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+ addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+ });
+ addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+ });
+ addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+ });
+ addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+ });
+ addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+ });
+ addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+ });
+
+
+ // ALIASES
+
+ addUnitAlias('millisecond', 'ms');
+
+ // PRIORITY
+
+ addUnitPriority('millisecond', 16);
+
+ // PARSING
+
+ addRegexToken('S', match1to3, match1);
+ addRegexToken('SS', match1to3, match2);
+ addRegexToken('SSS', match1to3, match3);
+
+ var token;
+ for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+ }
+
+ function parseMs(input, array) {
+ array[MILLISECOND] = toInt(('0.' + input) * 1000);
+ }
+
+ for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+ }
+ // MOMENTS
+
+ var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+ // FORMATTING
+
+ addFormatToken('z', 0, 0, 'zoneAbbr');
+ addFormatToken('zz', 0, 0, 'zoneName');
+
+ // MOMENTS
+
+ function getZoneAbbr () {
+ return this._isUTC ? 'UTC' : '';
+ }
+
+ function getZoneName () {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
+ }
+
+ var proto = Moment.prototype;
+
+ proto.add = add;
+ proto.calendar = calendar$1;
+ proto.clone = clone;
+ proto.diff = diff;
+ proto.endOf = endOf;
+ proto.format = format;
+ proto.from = from;
+ proto.fromNow = fromNow;
+ proto.to = to;
+ proto.toNow = toNow;
+ proto.get = stringGet;
+ proto.invalidAt = invalidAt;
+ proto.isAfter = isAfter;
+ proto.isBefore = isBefore;
+ proto.isBetween = isBetween;
+ proto.isSame = isSame;
+ proto.isSameOrAfter = isSameOrAfter;
+ proto.isSameOrBefore = isSameOrBefore;
+ proto.isValid = isValid$2;
+ proto.lang = lang;
+ proto.locale = locale;
+ proto.localeData = localeData;
+ proto.max = prototypeMax;
+ proto.min = prototypeMin;
+ proto.parsingFlags = parsingFlags;
+ proto.set = stringSet;
+ proto.startOf = startOf;
+ proto.subtract = subtract;
+ proto.toArray = toArray;
+ proto.toObject = toObject;
+ proto.toDate = toDate;
+ proto.toISOString = toISOString;
+ proto.inspect = inspect;
+ proto.toJSON = toJSON;
+ proto.toString = toString;
+ proto.unix = unix;
+ proto.valueOf = valueOf;
+ proto.creationData = creationData;
+ proto.year = getSetYear;
+ proto.isLeapYear = getIsLeapYear;
+ proto.weekYear = getSetWeekYear;
+ proto.isoWeekYear = getSetISOWeekYear;
+ proto.quarter = proto.quarters = getSetQuarter;
+ proto.month = getSetMonth;
+ proto.daysInMonth = getDaysInMonth;
+ proto.week = proto.weeks = getSetWeek;
+ proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+ proto.weeksInYear = getWeeksInYear;
+ proto.isoWeeksInYear = getISOWeeksInYear;
+ proto.date = getSetDayOfMonth;
+ proto.day = proto.days = getSetDayOfWeek;
+ proto.weekday = getSetLocaleDayOfWeek;
+ proto.isoWeekday = getSetISODayOfWeek;
+ proto.dayOfYear = getSetDayOfYear;
+ proto.hour = proto.hours = getSetHour;
+ proto.minute = proto.minutes = getSetMinute;
+ proto.second = proto.seconds = getSetSecond;
+ proto.millisecond = proto.milliseconds = getSetMillisecond;
+ proto.utcOffset = getSetOffset;
+ proto.utc = setOffsetToUTC;
+ proto.local = setOffsetToLocal;
+ proto.parseZone = setOffsetToParsedOffset;
+ proto.hasAlignedHourOffset = hasAlignedHourOffset;
+ proto.isDST = isDaylightSavingTime;
+ proto.isLocal = isLocal;
+ proto.isUtcOffset = isUtcOffset;
+ proto.isUtc = isUtc;
+ proto.isUTC = isUtc;
+ proto.zoneAbbr = getZoneAbbr;
+ proto.zoneName = getZoneName;
+ proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+ proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+ proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+ proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+ proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+ function createUnix (input) {
+ return createLocal(input * 1000);
+ }
+
+ function createInZone () {
+ return createLocal.apply(null, arguments).parseZone();
+ }
+
+ function preParsePostFormat (string) {
+ return string;
+ }
+
+ var proto$1 = Locale.prototype;
+
+ proto$1.calendar = calendar;
+ proto$1.longDateFormat = longDateFormat;
+ proto$1.invalidDate = invalidDate;
+ proto$1.ordinal = ordinal;
+ proto$1.preparse = preParsePostFormat;
+ proto$1.postformat = preParsePostFormat;
+ proto$1.relativeTime = relativeTime;
+ proto$1.pastFuture = pastFuture;
+ proto$1.set = set;
+
+ proto$1.months = localeMonths;
+ proto$1.monthsShort = localeMonthsShort;
+ proto$1.monthsParse = localeMonthsParse;
+ proto$1.monthsRegex = monthsRegex;
+ proto$1.monthsShortRegex = monthsShortRegex;
+ proto$1.week = localeWeek;
+ proto$1.firstDayOfYear = localeFirstDayOfYear;
+ proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+ proto$1.weekdays = localeWeekdays;
+ proto$1.weekdaysMin = localeWeekdaysMin;
+ proto$1.weekdaysShort = localeWeekdaysShort;
+ proto$1.weekdaysParse = localeWeekdaysParse;
+
+ proto$1.weekdaysRegex = weekdaysRegex;
+ proto$1.weekdaysShortRegex = weekdaysShortRegex;
+ proto$1.weekdaysMinRegex = weekdaysMinRegex;
+
+ proto$1.isPM = localeIsPM;
+ proto$1.meridiem = localeMeridiem;
+
+ function get$1 (format, index, field, setter) {
+ var locale = getLocale();
+ var utc = createUTC().set(setter, index);
+ return locale[field](utc, format);
+ }
+
+ function listMonthsImpl (format, index, field) {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+
+ if (index != null) {
+ return get$1(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = get$1(format, i, field, 'month');
+ }
+ return out;
+ }
+
+ // ()
+ // (5)
+ // (fmt, 5)
+ // (fmt)
+ // (true)
+ // (true, 5)
+ // (true, fmt, 5)
+ // (true, fmt)
+ function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return get$1(format, (index + shift) % 7, field, 'day');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 7; i++) {
+ out[i] = get$1(format, (i + shift) % 7, field, 'day');
+ }
+ return out;
+ }
+
+ function listMonths (format, index) {
+ return listMonthsImpl(format, index, 'months');
+ }
+
+ function listMonthsShort (format, index) {
+ return listMonthsImpl(format, index, 'monthsShort');
+ }
+
+ function listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+ }
+
+ function listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+ }
+
+ function listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+ }
+
+ getSetGlobalLocale('en', {
+ dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (toInt(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+ });
+
+ // Side effect imports
+
+ hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+ hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+ var mathAbs = Math.abs;
+
+ function abs () {
+ var data = this._data;
+
+ this._milliseconds = mathAbs(this._milliseconds);
+ this._days = mathAbs(this._days);
+ this._months = mathAbs(this._months);
+
+ data.milliseconds = mathAbs(data.milliseconds);
+ data.seconds = mathAbs(data.seconds);
+ data.minutes = mathAbs(data.minutes);
+ data.hours = mathAbs(data.hours);
+ data.months = mathAbs(data.months);
+ data.years = mathAbs(data.years);
+
+ return this;
+ }
+
+ function addSubtract$1 (duration, input, value, direction) {
+ var other = createDuration(input, value);
+
+ duration._milliseconds += direction * other._milliseconds;
+ duration._days += direction * other._days;
+ duration._months += direction * other._months;
+
+ return duration._bubble();
+ }
+
+ // supports only 2.0-style add(1, 's') or add(duration)
+ function add$1 (input, value) {
+ return addSubtract$1(this, input, value, 1);
+ }
+
+ // supports only 2.0-style subtract(1, 's') or subtract(duration)
+ function subtract$1 (input, value) {
+ return addSubtract$1(this, input, value, -1);
+ }
+
+ function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+ }
+
+ function bubble () {
+ var milliseconds = this._milliseconds;
+ var days = this._days;
+ var months = this._months;
+ var data = this._data;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
+
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
+
+ seconds = absFloor(milliseconds / 1000);
+ data.seconds = seconds % 60;
+
+ minutes = absFloor(seconds / 60);
+ data.minutes = minutes % 60;
+
+ hours = absFloor(minutes / 60);
+ data.hours = hours % 24;
+
+ days += absFloor(hours / 24);
+
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+ data.days = days;
+ data.months = months;
+ data.years = years;
+
+ return this;
+ }
+
+ function daysToMonths (days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
+ }
+
+ function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
+ }
+
+ function as (units) {
+ if (!this.isValid()) {
+ return NaN;
+ }
+ var days;
+ var months;
+ var milliseconds = this._milliseconds;
+
+ units = normalizeUnits(units);
+
+ if (units === 'month' || units === 'year') {
+ days = this._days + milliseconds / 864e5;
+ months = this._months + daysToMonths(days);
+ return units === 'month' ? months : months / 12;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(monthsToDays(this._months));
+ switch (units) {
+ case 'week' : return days / 7 + milliseconds / 6048e5;
+ case 'day' : return days + milliseconds / 864e5;
+ case 'hour' : return days * 24 + milliseconds / 36e5;
+ case 'minute' : return days * 1440 + milliseconds / 6e4;
+ case 'second' : return days * 86400 + milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+ default: throw new Error('Unknown unit ' + units);
+ }
+ }
+ }
+
+ // TODO: Use this.as('ms')?
+ function valueOf$1 () {
+ if (!this.isValid()) {
+ return NaN;
+ }
+ return (
+ this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6
+ );
+ }
+
+ function makeAs (alias) {
+ return function () {
+ return this.as(alias);
+ };
+ }
+
+ var asMilliseconds = makeAs('ms');
+ var asSeconds = makeAs('s');
+ var asMinutes = makeAs('m');
+ var asHours = makeAs('h');
+ var asDays = makeAs('d');
+ var asWeeks = makeAs('w');
+ var asMonths = makeAs('M');
+ var asYears = makeAs('y');
+
+ function clone$1 () {
+ return createDuration(this);
+ }
+
+ function get$2 (units) {
+ units = normalizeUnits(units);
+ return this.isValid() ? this[units + 's']() : NaN;
+ }
+
+ function makeGetter(name) {
+ return function () {
+ return this.isValid() ? this._data[name] : NaN;
+ };
+ }
+
+ var milliseconds = makeGetter('milliseconds');
+ var seconds = makeGetter('seconds');
+ var minutes = makeGetter('minutes');
+ var hours = makeGetter('hours');
+ var days = makeGetter('days');
+ var months = makeGetter('months');
+ var years = makeGetter('years');
+
+ function weeks () {
+ return absFloor(this.days() / 7);
+ }
+
+ var round = Math.round;
+ var thresholds = {
+ ss: 44, // a few seconds to seconds
+ s : 45, // seconds to minute
+ m : 45, // minutes to hour
+ h : 22, // hours to day
+ d : 26, // days to month
+ M : 11 // months to year
+ };
+
+ // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+ function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+ }
+
+ function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
+ var duration = createDuration(posNegDuration).abs();
+ var seconds = round(duration.as('s'));
+ var minutes = round(duration.as('m'));
+ var hours = round(duration.as('h'));
+ var days = round(duration.as('d'));
+ var months = round(duration.as('M'));
+ var years = round(duration.as('y'));
+
+ var a = seconds <= thresholds.ss && ['s', seconds] ||
+ seconds < thresholds.s && ['ss', seconds] ||
+ minutes <= 1 && ['m'] ||
+ minutes < thresholds.m && ['mm', minutes] ||
+ hours <= 1 && ['h'] ||
+ hours < thresholds.h && ['hh', hours] ||
+ days <= 1 && ['d'] ||
+ days < thresholds.d && ['dd', days] ||
+ months <= 1 && ['M'] ||
+ months < thresholds.M && ['MM', months] ||
+ years <= 1 && ['y'] || ['yy', years];
+
+ a[2] = withoutSuffix;
+ a[3] = +posNegDuration > 0;
+ a[4] = locale;
+ return substituteTimeAgo.apply(null, a);
+ }
+
+ // This function allows you to set the rounding function for relative time strings
+ function getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+ }
+
+ // This function allows you to set a threshold for relative time strings
+ function getSetRelativeTimeThreshold (threshold, limit) {
+ if (thresholds[threshold] === undefined) {
+ return false;
+ }
+ if (limit === undefined) {
+ return thresholds[threshold];
+ }
+ thresholds[threshold] = limit;
+ if (threshold === 's') {
+ thresholds.ss = limit - 1;
+ }
+ return true;
+ }
+
+ function humanize (withSuffix) {
+ if (!this.isValid()) {
+ return this.localeData().invalidDate();
+ }
+
+ var locale = this.localeData();
+ var output = relativeTime$1(this, !withSuffix, locale);
+
+ if (withSuffix) {
+ output = locale.pastFuture(+this, output);
+ }
+
+ return locale.postformat(output);
+ }
+
+ var abs$1 = Math.abs;
+
+ function sign(x) {
+ return ((x > 0) - (x < 0)) || +x;
+ }
+
+ function toISOString$1() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ if (!this.isValid()) {
+ return this.localeData().invalidDate();
+ }
+
+ var seconds = abs$1(this._milliseconds) / 1000;
+ var days = abs$1(this._days);
+ var months = abs$1(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+ var total = this.asSeconds();
+
+ if (!total) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
+
+ var totalSign = total < 0 ? '-' : '';
+ var ymSign = sign(this._months) !== sign(total) ? '-' : '';
+ var daysSign = sign(this._days) !== sign(total) ? '-' : '';
+ var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+
+ return totalSign + 'P' +
+ (Y ? ymSign + Y + 'Y' : '') +
+ (M ? ymSign + M + 'M' : '') +
+ (D ? daysSign + D + 'D' : '') +
+ ((h || m || s) ? 'T' : '') +
+ (h ? hmsSign + h + 'H' : '') +
+ (m ? hmsSign + m + 'M' : '') +
+ (s ? hmsSign + s + 'S' : '');
+ }
+
+ var proto$2 = Duration.prototype;
+
+ proto$2.isValid = isValid$1;
+ proto$2.abs = abs;
+ proto$2.add = add$1;
+ proto$2.subtract = subtract$1;
+ proto$2.as = as;
+ proto$2.asMilliseconds = asMilliseconds;
+ proto$2.asSeconds = asSeconds;
+ proto$2.asMinutes = asMinutes;
+ proto$2.asHours = asHours;
+ proto$2.asDays = asDays;
+ proto$2.asWeeks = asWeeks;
+ proto$2.asMonths = asMonths;
+ proto$2.asYears = asYears;
+ proto$2.valueOf = valueOf$1;
+ proto$2._bubble = bubble;
+ proto$2.clone = clone$1;
+ proto$2.get = get$2;
+ proto$2.milliseconds = milliseconds;
+ proto$2.seconds = seconds;
+ proto$2.minutes = minutes;
+ proto$2.hours = hours;
+ proto$2.days = days;
+ proto$2.weeks = weeks;
+ proto$2.months = months;
+ proto$2.years = years;
+ proto$2.humanize = humanize;
+ proto$2.toISOString = toISOString$1;
+ proto$2.toString = toISOString$1;
+ proto$2.toJSON = toISOString$1;
+ proto$2.locale = locale;
+ proto$2.localeData = localeData;
+
+ proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
+ proto$2.lang = lang;
+
+ // Side effect imports
+
+ // FORMATTING
+
+ addFormatToken('X', 0, 0, 'unix');
+ addFormatToken('x', 0, 0, 'valueOf');
+
+ // PARSING
+
+ addRegexToken('x', matchSigned);
+ addRegexToken('X', matchTimestamp);
+ addParseToken('X', function (input, array, config) {
+ config._d = new Date(parseFloat(input, 10) * 1000);
+ });
+ addParseToken('x', function (input, array, config) {
+ config._d = new Date(toInt(input));
+ });
+
+ // Side effect imports
+
+
+ hooks.version = '2.22.2';
+
+ setHookCallback(createLocal);
+
+ hooks.fn = proto;
+ hooks.min = min;
+ hooks.max = max;
+ hooks.now = now;
+ hooks.utc = createUTC;
+ hooks.unix = createUnix;
+ hooks.months = listMonths;
+ hooks.isDate = isDate;
+ hooks.locale = getSetGlobalLocale;
+ hooks.invalid = createInvalid;
+ hooks.duration = createDuration;
+ hooks.isMoment = isMoment;
+ hooks.weekdays = listWeekdays;
+ hooks.parseZone = createInZone;
+ hooks.localeData = getLocale;
+ hooks.isDuration = isDuration;
+ hooks.monthsShort = listMonthsShort;
+ hooks.weekdaysMin = listWeekdaysMin;
+ hooks.defineLocale = defineLocale;
+ hooks.updateLocale = updateLocale;
+ hooks.locales = listLocales;
+ hooks.weekdaysShort = listWeekdaysShort;
+ hooks.normalizeUnits = normalizeUnits;
+ hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+ hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+ hooks.calendarFormat = getCalendarFormat;
+ hooks.prototype = proto;
+
+ // currently HTML5 input type only supports 24-hour formats
+ hooks.HTML5_FMT = {
+ DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', //
+ DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', //
+ DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', //
+ DATE: 'YYYY-MM-DD', //
+ TIME: 'HH:mm', //
+ TIME_SECONDS: 'HH:mm:ss', //
+ TIME_MS: 'HH:mm:ss.SSS', //
+ WEEK: 'YYYY-[W]WW', //
+ MONTH: 'YYYY-MM' //
+ };
+
+ return hooks;
+
+})));
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(67)(module)))
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+function Parser(config) {
+
+ config = config || {};
+ var strictMode = config.strict;
+
+ this.isStrictMode = function() { return (strictMode == true) };
+
+ this.pattern = function() { return /./i; }
+
+ this.extract = function(text, ref, match, opt){ return null; }
+
+ this.execute = function(text, ref, opt) {
+
+ var results = [];
+ var regex = this.pattern();
+
+ var remainingText = text;
+ var match = regex.exec(remainingText);
+
+ while (match) {
+
+ // Calculate match index on the full text;
+ match.index += text.length - remainingText.length;
+
+ var result = this.extract(text, ref, match, opt);
+ if (result) {
+
+ // If success, start from the end of the result
+ remainingText = text.substring(result.index + result.text.length);
+
+ if (!this.isStrictMode() || result.hasPossibleDates()) {
+ results.push(result);
+ }
+
+ } else {
+ // If fail, move on by 1
+ remainingText = text.substring(match.index + 1);
+ }
+
+ match = regex.exec(remainingText);
+ }
+
+ if (this.refiners) {
+ this.refiners.forEach(function () {
+ results = refiner.refine(results, text, options);
+ });
+ }
+
+ return results;
+ }
+}
+
+exports.Parser = Parser;
+
+exports.ENISOFormatParser = __webpack_require__(818).Parser;
+exports.ENDeadlineFormatParser = __webpack_require__(820).Parser;
+exports.ENRelativeDateFormatParser = __webpack_require__(821).Parser;
+exports.ENMonthNameLittleEndianParser = __webpack_require__(822).Parser;
+exports.ENMonthNameMiddleEndianParser = __webpack_require__(823).Parser;
+exports.ENMonthNameParser = __webpack_require__(824).Parser;
+exports.ENSlashDateFormatParser = __webpack_require__(825).Parser;
+exports.ENSlashDateFormatStartWithYearParser = __webpack_require__(826).Parser;
+exports.ENSlashMonthFormatParser = __webpack_require__(827).Parser;
+exports.ENTimeAgoFormatParser = __webpack_require__(828).Parser;
+exports.ENTimeExpressionParser = __webpack_require__(829).Parser;
+exports.ENTimeFromNowFormatParser = __webpack_require__(830).Parser;
+exports.ENWeekdayParser = __webpack_require__(286).Parser;
+exports.ENCasualDateParser = __webpack_require__(831).Parser;
+exports.ENCasualTimeParser = __webpack_require__(832).Parser;
+
+exports.JPStandardParser = __webpack_require__(833).Parser;
+exports.JPCasualDateParser = __webpack_require__(835).Parser;
+
+exports.ESCasualDateParser = __webpack_require__(836).Parser;
+exports.ESDeadlineFormatParser = __webpack_require__(837).Parser;
+exports.ESTimeAgoFormatParser = __webpack_require__(838).Parser;
+exports.ESTimeExpressionParser = __webpack_require__(839).Parser;
+exports.ESWeekdayParser = __webpack_require__(840).Parser;
+exports.ESMonthNameLittleEndianParser = __webpack_require__(841).Parser;
+exports.ESSlashDateFormatParser = __webpack_require__(843).Parser;
+
+exports.FRCasualDateParser = __webpack_require__(844).Parser;
+exports.FRDeadlineFormatParser = __webpack_require__(845).Parser;
+exports.FRMonthNameLittleEndianParser = __webpack_require__(846).Parser;
+exports.FRSlashDateFormatParser = __webpack_require__(847).Parser;
+exports.FRTimeAgoFormatParser = __webpack_require__(848).Parser;
+exports.FRTimeExpressionParser = __webpack_require__(849).Parser;
+exports.FRWeekdayParser = __webpack_require__(850).Parser;
+exports.FRRelativeDateFormatParser = __webpack_require__(851).Parser;
+
+exports.ZHHantDateParser = __webpack_require__(853).Parser;
+exports.ZHHantWeekdayParser = __webpack_require__(854).Parser;
+exports.ZHHantTimeExpressionParser = __webpack_require__(855).Parser;
+exports.ZHHantCasualDateParser = __webpack_require__(856).Parser;
+exports.ZHHantDeadlineFormatParser = __webpack_require__(857).Parser;
+
+exports.DEDeadlineFormatParser = __webpack_require__(858).Parser;
+exports.DEMonthNameLittleEndianParser = __webpack_require__(859).Parser;
+exports.DEMonthNameParser = __webpack_require__(860).Parser;
+exports.DESlashDateFormatParser = __webpack_require__(861).Parser;
+exports.DETimeAgoFormatParser = __webpack_require__(862).Parser;
+exports.DETimeExpressionParser = __webpack_require__(863).Parser;
+exports.DEWeekdayParser = __webpack_require__(864).Parser;
+exports.DECasualDateParser = __webpack_require__(865).Parser;
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var arrayReduce = __webpack_require__(195),
+ baseEach = __webpack_require__(65),
+ baseIteratee = __webpack_require__(31),
+ baseReduce = __webpack_require__(348),
+ isArray = __webpack_require__(3);
+
+/**
+ * Reduces `collection` to a value which is the accumulated result of running
+ * each element in `collection` thru `iteratee`, where each successive
+ * invocation is supplied the return value of the previous. If `accumulator`
+ * is not given, the first element of `collection` is used as the initial
+ * value. The iteratee is invoked with four arguments:
+ * (accumulator, value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
+ *
+ * The guarded methods are:
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
+ * and `sortBy`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @returns {*} Returns the accumulated value.
+ * @see _.reduceRight
+ * @example
+ *
+ * _.reduce([1, 2], function(sum, n) {
+ * return sum + n;
+ * }, 0);
+ * // => 3
+ *
+ * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+ * (result[value] || (result[value] = [])).push(key);
+ * return result;
+ * }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
+ */
+function reduce(collection, iteratee, accumulator) {
+ var func = isArray(collection) ? arrayReduce : baseReduce,
+ initAccum = arguments.length < 3;
+
+ return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
+}
+
+module.exports = reduce;
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var createFind = __webpack_require__(178),
+ findIndex = __webpack_require__(36);
+
+/**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.find(users, function(o) { return o.age < 40; });
+ * // => object for 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.find(users, { 'age': 1, 'active': true });
+ * // => object for 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.find(users, ['active', false]);
+ * // => object for 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.find(users, 'active');
+ * // => object for 'barney'
+ */
+var find = createFind(findIndex);
+
+module.exports = find;
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var domify = __webpack_require__(368),
+ _each = __webpack_require__(28),
+ _includes = __webpack_require__(7);
+
+/**
+ * Get url without _how_ to access it, creating a uri.
+ *
+ * Removes port and protocol.
+ *
+ * @returns {string}
+ */
+function uri() {
+ var location = document.location;
+
+ return location.hostname + location.pathname;
+}
+
+/**
+ * get page uri
+ * note: page uri should be in the data-uri attribute of the element
+ * @returns {string}
+ */
+function pageUri() {
+ return document.firstElementChild.getAttribute('data-uri');
+}
+
+/**
+ * This function can be minimized smaller than document.querySelector
+ * @param {Element} [el]
+ * @param {string} selector
+ * @returns {Element}
+ * @example find('ul') //finds globally
+ * @example find(el, '.list') //finds within
+ */
+function find(el, selector) {
+ if (!selector) {
+ selector = el;
+ el = document;
+ }
+ return el.querySelector(selector);
+}
+
+/**
+ * This function can be minimized smaller than document.querySelector
+ * @param {Element} [el]
+ * @param {string} selector
+ * @returns {NodeList}
+ * @example findAll('ul') //finds globally
+ * @example findAll(el, '.list') //finds within
+ */
+function findAll(el, selector) {
+ if (!selector) {
+ selector = el;
+ el = document;
+ }
+ return el.querySelectorAll(selector);
+}
+
+/**
+ * NOTE: nodeType of 1 means Element
+ * @param {Element} parent
+ * @returns {Element} cursor
+ */
+function getFirstChildElement(parent) {
+ var cursor = parent.firstChild;
+
+ while (cursor && cursor.nodeType !== 1) {
+ cursor = cursor.nextSibling;
+ }
+ return cursor;
+}
+
+/**
+ * Returns true if the element would be selected by the specified selector.
+ * Essentially a polyfill, but necessary for `closest`.
+ * @param {Node} node preferably an Element for better performance, but it will accept any Node.
+ * @param {string} selector
+ * @returns {boolean}
+ */
+function matches(node, selector) {
+ var parent, matches, i;
+
+ if (node.matches) {
+ return node.matches(selector);
+ } else {
+ parent = node.parentElement;
+ matches = parent ? parent.querySelectorAll(selector) : [];
+ i = 0;
+ while (matches[i] && matches[i] !== node) {
+ i++;
+ }
+ return !!matches[i];
+ }
+}
+
+/**
+ * get closest element that matches selector starting with the element itself and traversing up through parents.
+ * @param {Element} node
+ * @param {string} parentSelector
+ * @return {Element|null}
+ */
+function closest(node, parentSelector) {
+ var cursor = node;
+
+ if (!parentSelector || typeof parentSelector !== 'string') {
+ throw new Error('Please specify a selector to match against!');
+ }
+
+ while (cursor && !matches(cursor, parentSelector)) {
+ cursor = cursor.parentNode;
+ }
+
+ if (!cursor) {
+ return null;
+ } else {
+ return cursor;
+ }
+}
+
+function prependChild(parent, child) {
+ if (parent.firstChild) {
+ parent.insertBefore(child, parent.firstChild);
+ } else {
+ parent.appendChild(child);
+ }
+}
+
+function insertBefore(node, newNode) {
+ if (node.parentNode) {
+ node.parentNode.insertBefore(newNode, node);
+ }
+}
+
+function insertAfter(node, newNode) {
+ if (node.parentNode) {
+ node.parentNode.insertBefore(newNode, node.nextSibling);
+ }
+}
+
+/**
+ * Fast way to clear all children
+ * @see http://jsperf.com/innerhtml-vs-removechild/294
+ * @param {Element} el
+ */
+function clearChildren(el) {
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
+}
+
+/**
+ * Remove a single element from its parent
+ * @param {Element} el
+ */
+function removeElement(el) {
+ el.parentNode.removeChild(el);
+}
+
+function preventDefault(e) {
+ e.preventDefault ? e.preventDefault() : e.returnValue = false; // eslint-disable-line
+}
+
+function replaceElement(el, replacementEl) {
+ var parent = el.parentNode;
+
+ if (parent) {
+ parent.replaceChild(replacementEl, el);
+ }
+}
+
+/**
+ * wrap elements in another element
+ * @param {NodeList|Element} els
+ * @param {string} wrapper
+ * @returns {Element} wrapperEl
+ */
+function wrapElements(els, wrapper) {
+ var wrapperEl = document.createElement(wrapper);
+
+ // make sure elements are in an array
+ if (els instanceof HTMLElement) {
+ els = [els];
+ } else {
+ els = Array.prototype.slice.call(els);
+ }
+
+ _each(els, function (el) {
+ // put it into the wrapper, remove it from its parent
+ el.parentNode.removeChild(el);
+ wrapperEl.appendChild(el);
+ });
+
+ // return the wrapped elements
+ return wrapperEl;
+}
+
+/**
+ * unwrap elements from another element
+ * @param {Element} parent
+ * @param {Element} wrapper
+ */
+function unwrapElements(parent, wrapper) {
+ var el = wrapper.childNodes[0];
+
+ // ok, so this looks weird, right?
+ // turns out, appending nodes to another node will remove them
+ // from the live NodeList, so we can keep iterating over the
+ // first item in that list and grab all of them. Nice!
+ while (el) {
+ parent.appendChild(el);
+ el = wrapper.childNodes[0];
+ }
+
+ parent.removeChild(wrapper);
+}
+
+/**
+ * Create a remove node handler that runs fn and removes the observer.
+ * @param {Element} el
+ * @param {Function} fn
+ * @returns {Function}
+ */
+function createRemoveNodeHandler(el, fn) {
+ return function (mutations, observer) {
+ mutations.forEach(function (mutation) {
+ if (_includes(mutation.removedNodes, el)) {
+ fn();
+ observer.disconnect();
+ }
+ });
+ };
+}
+
+/**
+ * Run a function when an element is removed from the DOM.
+ * Note: Observer is removed after the function is run once.
+ * @param {Element} el Element to observe.
+ * @param {Function} fn Function to execute when element is removed.
+ */
+function onRemove(el, fn) {
+ var observer = new MutationObserver(this.createRemoveNodeHandler(el, fn));
+
+ observer.observe(el.parentNode, {childList: true});
+}
+
+/**
+ * Get the position of a DOM element
+ * @param {Element} el
+ * @return {object}
+ */
+function getPos(el) {
+ var rect = el.getBoundingClientRect(),
+ scrollY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
+
+ return {
+ top: rect.top + scrollY,
+ bottom: rect.top + rect.height + scrollY,
+ height: rect.height
+ };
+}
+
+// creating elements
+module.exports.create = domify;
+
+// getting uri stuff
+module.exports.uri = uri;
+module.exports.pageUri = pageUri;
+
+// finding elements (these minify nicely)
+module.exports.find = find;
+module.exports.findAll = findAll;
+module.exports.matches = matches;
+module.exports.closest = closest;
+module.exports.getFirstChildElement = getFirstChildElement;
+module.exports.getPos = getPos;
+
+// manipulating elements
+module.exports.prependChild = prependChild;
+module.exports.insertBefore = insertBefore;
+module.exports.insertAfter = insertAfter;
+module.exports.replaceElement = replaceElement;
+module.exports.removeElement = removeElement;
+module.exports.clearChildren = clearChildren;
+
+// wrapping and unwrapping elements
+module.exports.wrapElements = wrapElements;
+module.exports.unwrapElements = unwrapElements;
+
+// event handling
+module.exports.preventDefault = preventDefault;
+module.exports.createRemoveNodeHandler = createRemoveNodeHandler;
+module.exports.onRemove = onRemove;
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _startCase2 = __webpack_require__(78);
+
+var _startCase3 = _interopRequireDefault(_startCase2);
+
+exports.default = label;
+
+var _references = __webpack_require__(2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * remove "clay-" from names
+ * so labels for each npm component don't all start with "Clay ..."
+ * @param {string} name
+ * @returns {string}
+ */
+function dropClay(name) {
+ return name.replace(/^clay\-/i, '');
+}
+
+/**
+ * get label
+ * if _label exists, use it
+ * else get the name of the field/group, prettified
+ * e.g. "mediaplay-image" would become "Mediaplay Image"
+ * @param {string} name
+ * @param {object} schema
+ * @return {string}
+ */
+function label(name, schema) {
+ var label = schema && schema[_references.labelProp];
+
+ if (label) {
+ return label;
+ } else {
+ return dropClay(name).split('-').map(_startCase3.default).join(' '); // split on hyphens
+ }
+};
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var disposed = false;
+function injectStyle(ssrContext) {
+ if (disposed) return;
+ __webpack_require__(469);
+}
+var normalizeComponent = __webpack_require__(0);
+/* script */
+var __vue_script__ = __webpack_require__(470);
+/* template */
+var __vue_template__ = __webpack_require__(471);
+/* template functional */
+var __vue_template_functional__ = false;
+/* styles */
+var __vue_styles__ = injectStyle;
+/* scopeId */
+var __vue_scopeId__ = null;
+/* moduleIdentifier (server only) */
+var __vue_module_identifier__ = null;
+var Component = normalizeComponent(__vue_script__, __vue_template__, __vue_template_functional__, __vue_styles__, __vue_scopeId__, __vue_module_identifier__);
+Component.options.__file = "node_modules/keen-ui/src/UiButton.vue";
+
+/* hot reload */
+if (false) {
+ (function () {
+ var hotAPI = require("vue-hot-reload-api");
+ hotAPI.install(require("vue"), false);
+ if (!hotAPI.compatible) return;
+ module.hot.accept();
+ if (!module.hot.data) {
+ hotAPI.createRecord("data-v-4f6c3ba9", Component.options);
+ } else {
+ hotAPI.reload("data-v-4f6c3ba9", Component.options);
+ }
+ module.hot.dispose(function (data) {
+ disposed = true;
+ });
+ })();
+}
+
+module.exports = Component.exports;
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _vue = __webpack_require__(46);
+
+var _vue2 = _interopRequireDefault(_vue);
+
+var _vuex = __webpack_require__(69);
+
+var _vuex2 = _interopRequireDefault(_vuex);
+
+var _vueAsyncComputed = __webpack_require__(345);
+
+var _vueAsyncComputed2 = _interopRequireDefault(_vueAsyncComputed);
+
+var _defaultState = __webpack_require__(194);
+
+var _defaultState2 = _interopRequireDefault(_defaultState);
+
+var _mutations = __webpack_require__(346);
+
+var _mutations2 = _interopRequireDefault(_mutations);
+
+var _actions = __webpack_require__(390);
+
+var _actions2 = _interopRequireDefault(_actions);
+
+var _plugins = __webpack_require__(515);
+
+var _plugins2 = _interopRequireDefault(_plugins);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_vue2.default.use(_vuex2.default);
+_vue2.default.use(_vueAsyncComputed2.default);
+
+var store = new _vuex2.default.Store({
+ strict: Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production', // only do strict mode when developing
+ state: _defaultState2.default,
+ mutations: _mutations2.default,
+ actions: _actions2.default,
+ plugins: _plugins2.default
+});
+
+exports.default = store;
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+!function (t, e) {
+ for (var r in e) {
+ t[r] = e[r];
+ }
+}(exports, function (t) {
+ var e = {};function r(n) {
+ if (e[n]) return e[n].exports;var o = e[n] = { i: n, l: !1, exports: {} };return t[n].call(o.exports, o, o.exports, r), o.l = !0, o.exports;
+ }return r.m = t, r.c = e, r.d = function (t, e, n) {
+ r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });
+ }, r.r = function (t) {
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 });
+ }, r.t = function (t, e) {
+ if (1 & e && (t = r(t)), 8 & e) return t;if (4 & e && "object" == (typeof t === "undefined" ? "undefined" : _typeof(t)) && t && t.__esModule) return t;var n = Object.create(null);if (r.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: t }), 2 & e && "string" != typeof t) for (var o in t) {
+ r.d(n, o, function (e) {
+ return t[e];
+ }.bind(null, o));
+ }return n;
+ }, r.n = function (t) {
+ var e = t && t.__esModule ? function () {
+ return t.default;
+ } : function () {
+ return t;
+ };return r.d(e, "a", e), e;
+ }, r.o = function (t, e) {
+ return Object.prototype.hasOwnProperty.call(t, e);
+ }, r.p = "", r(r.s = 5);
+}([function (t, e, r) {
+ "use strict";
+ function n(t) {
+ return (n = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (t) {
+ return typeof t === "undefined" ? "undefined" : _typeof(t);
+ } : function (t) {
+ return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t === "undefined" ? "undefined" : _typeof(t);
+ })(t);
+ }t.exports.strCheck = function (t) {
+ if ("string" == typeof t) return !0;throw new Error("Argument must be a string, not " + n(t));
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /_components\/(.+?)[\/\.]/.exec(t) || /_components\/(.*)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_layouts\/.+?\/instances\/([^\.\/@]+)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_layouts/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_pages/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ t.exports.findComponentRefInPage = r(6), t.exports.getComponentInstance = r(7), t.exports.getLayoutInstance = r(2), t.exports.getComponentName = r(1), t.exports.getLayoutName = r(8), t.exports.getComponentVersion = r(9), t.exports.getPageInstance = r(10), t.exports.getPageVersion = r(11), t.exports.getListInstance = r(12), t.exports.getPrefix = r(13), t.exports.isComponent = r(14), t.exports.isLayout = r(3), t.exports.isLayoutMeta = r(15), t.exports.isDefaultComponent = r(16), t.exports.isDefaultLayout = r(17), t.exports.isPage = r(4), t.exports.isPageMeta = r(18), t.exports.isPublished = r(19), t.exports.isList = r(20), t.exports.isUri = r(21), t.exports.isUser = r(22), t.exports.replaceVersion = r(23), t.exports.uriPrefixToSlug = r(24), t.exports.uriSlugToPrefix = r(25), t.exports.jsonPrefixToSlug = r(26), t.exports.jsonSlugToPrefix = r(27);
+}, function (t, e, r) {
+ "use strict";
+ function n(t) {
+ return (n = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (t) {
+ return typeof t === "undefined" ? "undefined" : _typeof(t);
+ } : function (t) {
+ return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t === "undefined" ? "undefined" : _typeof(t);
+ })(t);
+ }var o = r(1),
+ c = r(0).strCheck;t.exports = function (t, e) {
+ if (c(e), "object" !== n(t)) throw new Error("Page argument must be an object, not ".concat(n(t)));return Object.values(t).filter(Array.isArray).reduce(function (t, e) {
+ return t.concat(e);
+ }, []).find(function (t) {
+ return o(t) === e;
+ });
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_components\/.+?\/instances\/([^\.@]+)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /_layouts\/(.+?)[\/\.]/.exec(t) || /_layouts\/(.*)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_components\/.+?@(.+)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_pages\/([^\.\/]+)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_pages\/.+?@(.+)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ n.strCheck(t);var e = /\/_lists\/(.*)/.exec(t);return e && e[1];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.split(/\/_(pages|components|lists|uris|schedule|users|layouts|sites)/)[0];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_components/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0),
+ o = r(3),
+ c = r(2);t.exports = function (t) {
+ return n.strCheck(t), o(t) && !!c(t) && !!t.match(/\/meta$/i);
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), !!t.match(/\/_components\/[A-Za-z0-9\-]+$/);
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), !!t.match(/\/_layouts\/[A-Za-z0-9\-]+$/);
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0),
+ o = r(4);t.exports = function (t) {
+ return n.strCheck(t), o(t) && !!t.match(/\/meta$/i);
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), -1 !== t.indexOf("@published");
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_lists/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_uris/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ return n.strCheck(t), t.toLowerCase().indexOf("/_users/") > -1;
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t, e) {
+ return n.strCheck(t), e ? t.split("@")[0] + "@" + e : t.split("@")[0];
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t, e) {
+ var r = e.host,
+ o = e.path,
+ c = e.slug,
+ s = e.prefix,
+ u = -1 !== t.indexOf("/_");return s || (s = o && o.length > 1 ? "".concat(r).concat(o) : r), n.strCheck(t), t.replace("".concat(s).concat(u ? "/" : ""), "".concat(c).concat(u ? "/" : ""));
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t, e) {
+ var r = e.slug,
+ o = e.prefix,
+ c = e.host,
+ s = e.path,
+ u = -1 !== t.indexOf("/_");return o || (o = s && s.length > 1 ? "".concat(c).concat(s) : c), n.strCheck(t), t.replace("".concat(r).concat(u ? "/" : ""), "".concat(o).concat(u ? "/" : ""));
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t, e) {
+ var r,
+ o,
+ c,
+ s = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
+ u = e.slug,
+ i = e.host,
+ a = e.path,
+ f = e.prefix;return n.strCheck(t), f || (f = a && a.length > 1 ? "".concat(i).concat(a) : i), r = "".concat(s ? '"_ref":' : "", '"').concat(f, "/_components/"), o = "".concat(s ? '"_ref":' : "", '"').concat(u, "/_components/"), c = new RegExp(r, "g"), t.replace(c, o);
+ };
+}, function (t, e, r) {
+ "use strict";
+ var n = r(0);t.exports = function (t) {
+ var e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];return function (r) {
+ var o,
+ c,
+ s,
+ u = t.slug,
+ i = t.host,
+ a = t.path,
+ f = t.prefix;return n.strCheck(r), f || (f = a && a.length > 1 ? "".concat(i).concat(a) : i), o = "".concat(e ? '"_ref":' : "", '"').concat(f, "/_components/"), c = "".concat(e ? '"_ref":' : "", '"').concat(u, "/_components/"), s = new RegExp(c, "g"), r.replace(s, o);
+ };
+ };
+}]));
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports) {
+
+/**
+ * Gets the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @alias first
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the first element of `array`.
+ * @example
+ *
+ * _.head([1, 2, 3]);
+ * // => 1
+ *
+ * _.head([]);
+ * // => undefined
+ */
+function head(array) {
+ return (array && array.length) ? array[0] : undefined;
+}
+
+module.exports = head;
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseClone = __webpack_require__(217);
+
+/** Used to compose bitmasks for cloning. */
+var CLONE_DEEP_FLAG = 1,
+ CLONE_SYMBOLS_FLAG = 4;
+
+/**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+function cloneDeep(value) {
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
+}
+
+module.exports = cloneDeep;
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var disposed = false;
+function injectStyle(ssrContext) {
+ if (disposed) return;
+ __webpack_require__(438);
+}
+var normalizeComponent = __webpack_require__(0);
+/* script */
+var __vue_script__ = __webpack_require__(439);
+/* template */
+var __vue_template__ = __webpack_require__(440);
+/* template functional */
+var __vue_template_functional__ = false;
+/* styles */
+var __vue_styles__ = injectStyle;
+/* scopeId */
+var __vue_scopeId__ = null;
+/* moduleIdentifier (server only) */
+var __vue_module_identifier__ = null;
+var Component = normalizeComponent(__vue_script__, __vue_template__, __vue_template_functional__, __vue_styles__, __vue_scopeId__, __vue_module_identifier__);
+Component.options.__file = "node_modules/keen-ui/src/UiIcon.vue";
+
+/* hot reload */
+if (false) {
+ (function () {
+ var hotAPI = require("vue-hot-reload-api");
+ hotAPI.install(require("vue"), false);
+ if (!hotAPI.compatible) return;
+ module.hot.accept();
+ if (!module.hot.data) {
+ hotAPI.createRecord("data-v-9ed6fda0", Component.options);
+ } else {
+ hotAPI.reload("data-v-9ed6fda0", Component.options);
+ }
+ module.hot.dispose(function (data) {
+ disposed = true;
+ });
+ })();
+}
+
+module.exports = Component.exports;
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _find2 = __webpack_require__(14);
+
+var _find3 = _interopRequireDefault(_find2);
+
+var _filter2 = __webpack_require__(33);
+
+var _filter3 = _interopRequireDefault(_filter2);
+
+var _includes2 = __webpack_require__(7);
+
+var _includes3 = _interopRequireDefault(_includes2);
+
+var _isString2 = __webpack_require__(5);
+
+var _isString3 = _interopRequireDefault(_isString2);
+
+exports.getComponentEl = getComponentEl;
+exports.getParentComponent = getParentComponent;
+exports.getLayout = getLayout;
+exports.getPrevComponent = getPrevComponent;
+exports.getNextComponent = getNextComponent;
+exports.getVisibleList = getVisibleList;
+exports.getPrevVisible = getPrevVisible;
+exports.getNextVisible = getNextVisible;
+exports.fieldSelectors = fieldSelectors;
+exports.getFieldEl = getFieldEl;
+exports.isComponentInPage = isComponentInPage;
+exports.isComponentInHead = isComponentInHead;
+
+var _dom = __webpack_require__(15);
+
+var _references = __webpack_require__(2);
+
+var _headComponents = __webpack_require__(73);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Get the closest component element from the DOM. Checks self and then parents.
+ * note: getting from a uri assumes an instance of a component is used ONCE on the page
+ * (it returns the first element that matches that particular instance)
+ * @param {Element|string} el Any element within a component, or the component's uri
+ * @returns {Element|undefined}
+ */
+function getComponentEl(el) {
+ return (0, _isString3.default)(el) ? (0, _dom.find)('[' + _references.refAttr + '="' + el + '"]') : el && (0, _dom.closest)(el, '[' + _references.refAttr + ']');
+}
+
+/**
+ * Get the closest parent component of the component from the DOM.
+ * if the component has no parentNode (e.g. it's outside the DOM, being re-rendered),
+ * search for the component in the dom before finding the parent
+ * @param {Element} el A component element
+ * @returns {Element}
+ */
+function getParentComponent(el) {
+ if (el.parentNode) {
+ return getComponentEl(el.parentNode) || getLayout().el;
+ } else {
+ var uri = el.getAttribute(_references.refAttr),
+ domEl = (0, _dom.find)('[' + _references.refAttr + '="' + uri + '"]');
+
+ return domEl && domEl.parentNode && getComponentEl(domEl.parentNode) || getLayout().el;
+ }
+}
+
+function getLayout() {
+ var el = document.firstElementChild,
+ uri = el.getAttribute(_references.layoutAttr);
+
+ return { el: el, uri: uri };
+}
+
+/**
+ * match against a component, optionally providing a component name
+ * @param {Element} el
+ * @param {string} [name]
+ * @return {Element|undefined}
+ */
+function matchComponent(el, name) {
+ if (name) {
+ return el.nodeType === el.ELEMENT_NODE && (0, _includes3.default)(el.getAttribute(_references.refAttr), '/_components/' + name);
+ } else {
+ return el.nodeType === el.ELEMENT_NODE && el.hasAttribute(_references.refAttr);
+ }
+}
+
+/**
+ * get previous component element
+ * @param {Element} el inside current component
+ * @param {string} [name] to match a specific component
+ * @return {Element|undefined}
+ */
+function getPrevComponent(el, name) {
+ var componentEl = getComponentEl(el);
+
+ var prev = componentEl.previousSibling;
+
+ while (prev) {
+ if (matchComponent(prev, name)) {
+ return prev;
+ } else {
+ prev = prev.previousSibling;
+ }
+ }
+}
+
+/**
+ * get next component element
+ * @param {Element} el inside current component
+ * @param {string} [name] to match a specific component
+ * @return {Element|undefined}
+ */
+function getNextComponent(el, name) {
+ var componentEl = getComponentEl(el);
+
+ var next = componentEl.nextSibling;
+
+ while (next) {
+ if (matchComponent(next, name)) {
+ return next;
+ } else {
+ next = next.nextSibling;
+ }
+ }
+}
+
+/**
+ * determine if an element is visible on the page
+ * @param {Element} el
+ * @returns {boolean}
+ */
+function showVisible(el) {
+ // checking offsetParent works for all non-fixed elements,
+ // and is much faster than checking getComputedStyle(el).display and visibility
+ // note: [data-kiln-hidden] is a special attribute you can add to your
+ // component's root element to hide it from the visible component list
+ // and selector-based component navigation
+ return el.offsetParent !== null && !el.getAttribute(_references.hiddenAttr);
+}
+
+/**
+ * get list of visible components on the page
+ * @param {Element} [doc] for testing
+ * @return {array}
+ */
+function getVisibleList(doc) {
+ doc = doc || /* istanbul ignore next */document.body;
+
+ return (0, _filter3.default)((0, _dom.findAll)(doc, '[' + _references.refAttr + ']'), showVisible);
+}
+
+/**
+ * get previous visible component
+ * @param {Element} el
+ * @param {Element} [doc] for testing
+ * @return {Element|undefined}
+ */
+function getPrevVisible(el, doc) {
+ var list = getVisibleList(doc);
+
+ return list[list.indexOf(el) - 1];
+}
+
+/**
+ * get next visible component
+ * @param {Element} el
+ * @param {Element} [doc] for testing
+ * @return {Element|undefined}
+ */
+function getNextVisible(el, doc) {
+ var list = getVisibleList(doc);
+
+ return list[list.indexOf(el) + 1];
+}
+
+/**
+ * return selectors that can be used to find a specific field
+ * @param {string} uri
+ * @param {string} path
+ * @return {array} of three selectors: one where the editable element is the root component element,
+ * one where the editable element is inside the component,
+ * and one that simply matches the editable field (to match editable component lists in the layout)
+ */
+function fieldSelectors(uri, path) {
+ return ['[' + _references.refAttr + '="' + uri + '"][' + _references.editAttr + '="' + path + '"]', '[' + _references.refAttr + '="' + uri + '"] [' + _references.editAttr + '="' + path + '"]', '[' + _references.editAttr + '="' + path + '"]'];
+}
+
+/**
+ * find field element in the dom
+ * @param {string} uri
+ * @param {string} path
+ * @return {Element|null}
+ */
+function getFieldEl(uri, path) {
+ var selectors = fieldSelectors(uri, path),
+ el = (0, _dom.find)(selectors[0]) || (0, _dom.find)(selectors[1]); // find field in normal components
+
+ if (el) {
+ return el;
+ } else {
+ // attempt to find field in layout,
+ // by checking all the fields that match and returning the first one
+ // that is NOT inside a component (the field whose closest data-uri node is actually )
+ return (0, _find3.default)((0, _dom.findAll)(selectors[2]), function (fieldEl) {
+ return (0, _dom.closest)(fieldEl, '[' + _references.refAttr + ']') === document.firstElementChild;
+ });
+ }
+}
+
+/**
+ * determine if a component is in the page or layout
+ * @param {string} uri
+ * @return {Boolean}
+ */
+function isComponentInPage(uri) {
+ var el = (0, _dom.find)('[' + _references.refAttr + '="' + uri + '"]');
+
+ if (el) {
+ var pageArea = (0, _dom.closest)(el, '.' + _references.pageAreaClass);
+
+ return !!pageArea;
+ } else {
+ return false;
+ }
+}
+
+function isComponentInHead(uri) {
+ return !!(0, _headComponents.getComponentNode)(uri);
+}
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseSet = __webpack_require__(199);
+
+/**
+ * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+ * it's created. Arrays are created for missing index properties while objects
+ * are created for all other missing properties. Use `_.setWith` to customize
+ * `path` creation.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, ['x', '0', 'y', 'z'], 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */
+function set(object, path, value) {
+ return object == null ? object : baseSet(object, path, value);
+}
+
+module.exports = set;
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseKeys = __webpack_require__(226),
+ getTag = __webpack_require__(95),
+ isArguments = __webpack_require__(98),
+ isArray = __webpack_require__(3),
+ isArrayLike = __webpack_require__(44),
+ isBuffer = __webpack_require__(96),
+ isPrototype = __webpack_require__(140),
+ isTypedArray = __webpack_require__(135);
+
+/** `Object#toString` result references. */
+var mapTag = '[object Map]',
+ setTag = '[object Set]';
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Checks if `value` is an empty object, collection, map, or set.
+ *
+ * Objects are considered empty if they have no own enumerable string keyed
+ * properties.
+ *
+ * Array-like values such as `arguments` objects, arrays, buffers, strings, or
+ * jQuery-like collections are considered empty if they have a `length` of `0`.
+ * Similarly, maps and sets are considered empty if they have a `size` of `0`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */
+function isEmpty(value) {
+ if (value == null) {
+ return true;
+ }
+ if (isArrayLike(value) &&
+ (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
+ isBuffer(value) || isTypedArray(value) || isArguments(value))) {
+ return !value.length;
+ }
+ var tag = getTag(value);
+ if (tag == mapTag || tag == setTag) {
+ return !value.size;
+ }
+ if (isPrototype(value)) {
+ return !baseKeys(value).length;
+ }
+ for (var key in value) {
+ if (hasOwnProperty.call(value, key)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+module.exports = isEmpty;
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(__filename) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _head2 = __webpack_require__(20);
+
+var _head3 = _interopRequireDefault(_head2);
+
+var _findIndex2 = __webpack_require__(36);
+
+var _findIndex3 = _interopRequireDefault(_findIndex2);
+
+var _isNaN2 = __webpack_require__(146);
+
+var _isNaN3 = _interopRequireDefault(_isNaN2);
+
+var _tail2 = __webpack_require__(270);
+
+var _tail3 = _interopRequireDefault(_tail2);
+
+var _reduce2 = __webpack_require__(13);
+
+var _reduce3 = _interopRequireDefault(_reduce2);
+
+var _forOwn2 = __webpack_require__(45);
+
+var _forOwn3 = _interopRequireDefault(_forOwn2);
+
+var _isObject2 = __webpack_require__(4);
+
+var _isObject3 = _interopRequireDefault(_isObject2);
+
+var _camelCase2 = __webpack_require__(423);
+
+var _camelCase3 = _interopRequireDefault(_camelCase2);
+
+var _find2 = __webpack_require__(14);
+
+var _find3 = _interopRequireDefault(_find2);
+
+var _includes2 = __webpack_require__(7);
+
+var _includes3 = _interopRequireDefault(_includes2);
+
+var _isString2 = __webpack_require__(5);
+
+var _isString3 = _interopRequireDefault(_isString2);
+
+var _get2 = __webpack_require__(1);
+
+var _get3 = _interopRequireDefault(_get2);
+
+exports.getData = getData;
+exports.getDefaultData = getDefaultData;
+exports.getSchema = getSchema;
+exports.getTemplate = getTemplate;
+exports.getModel = getModel;
+exports.getLocals = getLocals;
+exports.getComponents = getComponents;
+
+var _clayutils = __webpack_require__(19);
+
+var _references = __webpack_require__(2);
+
+var _fieldPath = __webpack_require__(202);
+
+var _log = __webpack_require__(10);
+
+var _log2 = _interopRequireDefault(_log);
+
+var _store = __webpack_require__(18);
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var log = (0, _log2.default)(__filename);
+
+// convenience functions to grab component data, schema, etc from the store
+// note: all functions allow passing a dummy store object to test
+
+function getData(uri, path, testStore) {
+ var prefix = (0, _clayutils.isLayout)(uri) ? 'state.layout.data' : 'state.components[\'' + uri + '\']';
+
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ if (path) {
+ return (0, _get3.default)(testStore, prefix + '.' + path); // path might be deep, e.g. `foo.0.bar`
+ } else {
+ return (0, _get3.default)(testStore, '' + prefix);
+ }
+}
+
+function getDefaultData(uri, testStore) {
+ var name = (0, _clayutils.isComponent)(uri) ? (0, _references.getComponentName)(uri) : uri;
+
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ return (0, _get3.default)(testStore, 'state.componentDefaults[\'' + name + '\']');
+}
+
+/**
+ * Check if a string contains non-letter, non-number, or non-underscore chars
+ *
+ * @param {string} str
+ * @return {boolean}
+ */
+function isValidKilnDotNotation(str) {
+ // https://regex101.com/r/wapXTM/2 for an example of this regex in action
+
+ // This function is used after "toDotNotation()" in "assertCamelCasedProps()" below
+ // "toDotNotation" actually allows numbers, which are not valid property accessors in dot notation, but which is why we permit numbers here
+
+ // If the regex returns false, it means that the string is valid
+ return !/[^\w\$_]/g.test(str);
+}
+
+/**
+ * make sure all properties in a schema are camelCased,
+ * since Kiln assumes they will be
+ * @param {string|object} item either an individual path or a full schema
+ * @param {string} name
+ * @throws {Error} if not camelCased
+ */
+function assertCamelCasedProps(item, name) {
+ if ((0, _isString3.default)(item) && (0, _includes3.default)((0, _fieldPath.toDotNotation)(item), '.')) {
+ // deep path! make sure all parts of it are camelcased
+ var nonCamelCasedPart = (0, _find3.default)((0, _fieldPath.toDotNotation)(item).split('.'), function (part) {
+ return !isValidKilnDotNotation(part);
+ });
+
+ if (nonCamelCasedPart) {
+ log.error('Properties in component data must be camelCased: ' + name + ' \u2192 ' + item + ' (try "' + (0, _camelCase3.default)(nonCamelCasedPart) + '")');
+ }
+ } else if ((0, _isString3.default)(item) && !isValidKilnDotNotation(item)) {
+ log.error('Properties in component data must be camelCased: ' + name + ' \u2192 ' + item + ' (try "' + (0, _camelCase3.default)(item) + '")');
+ } else if ((0, _isObject3.default)(item)) {
+ (0, _forOwn3.default)(item, function (val, prop) {
+ if (!isValidKilnDotNotation(prop)) {
+ log.error('Properties in component data must be camelCased: ' + name + ' \u2192 ' + prop + ' (try "' + (0, _camelCase3.default)(prop) + '")');
+ }
+ });
+ }
+}
+
+/**
+ * get the schema for a component (or property of a component)
+ * note: if the schema uses the old behaviors api, it will print a warning
+ * and convert it to the kiln 5.x inputs api syntax
+ * @param {string} uri
+ * @param {string} [path]
+ * @param {object} testStore
+ * @return {object}
+ */
+function getSchema(uri, path, testStore) {
+ var schema = void 0,
+ result = void 0,
+ name = void 0,
+ prefix = void 0;
+
+ if ((0, _clayutils.isComponent)(uri)) {
+ name = (0, _references.getComponentName)(uri);
+ prefix = 'state.schemas[\'' + name + '\']';
+ } else if ((0, _clayutils.isLayout)(uri)) {
+ name = (0, _clayutils.getLayoutName)(uri);
+ prefix = 'state.layout.schema';
+ } else {
+ name = uri;
+ prefix = 'state.schemas[\'' + name + '\']';
+ }
+
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+ schema = (0, _get3.default)(testStore, prefix);
+ if (path && path.match(/\.\d+\./i)) {
+ // if the path has a digit, assume it's a complex-list item
+ var prevPathIsNumber = false;
+
+ // we need to convert a path like 'content.0.foo' into the schema path,
+ // e.g. content.props.1
+ // (and we need to be able to do this recursively for deeply-nested complex-lists)
+ result = (0, _get3.default)(schema, (0, _reduce3.default)((0, _tail3.default)(path.split('.')), function (schemaPath, part) {
+ var partIsNumber = !(0, _isNaN3.default)(new Number(part)); // convert to a number, see if that works
+
+ if (partIsNumber) {
+ // we've hit a number! this means we need to search through the
+ // current path's props to find the index of the next part of the path
+ schemaPath += '._has.props';
+ } else if (prevPathIsNumber) {
+ // we had just hit a number before, so this 'part' is a property in a complex-list
+ // search through the complex-list's 'props' to find the index we want
+ schemaPath += '.' + (0, _findIndex3.default)((0, _get3.default)(schema, schemaPath), function (prop) {
+ return prop.prop === part;
+ });
+ } else {
+ schemaPath += '.' + part;
+ }
+
+ prevPathIsNumber = partIsNumber;
+
+ return schemaPath;
+ }, (0, _head3.default)(path.split('.'))));
+ } else if (path) {
+ // _.get() works, no special logic required
+
+ result = (0, _get3.default)(schema, path);
+ } else {
+ result = schema;
+ }
+
+ if (path) {
+ assertCamelCasedProps(path, name);
+ } else {
+ assertCamelCasedProps(schema, name);
+ }
+
+ return result;
+}
+
+function getTemplate(uri, testStore) {
+ var name = (0, _clayutils.isLayout)(uri) ? (0, _clayutils.getLayoutName)(uri) : (0, _references.getComponentName)(uri);
+
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ return (0, _get3.default)(testStore, 'state.templates[\'' + name + '\']');
+}
+
+function getModel(uri, testStore) {
+ var name = (0, _clayutils.isLayout)(uri) ? (0, _clayutils.getLayoutName)(uri) : (0, _references.getComponentName)(uri);
+
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ return (0, _get3.default)(testStore, 'state.models[\'' + name + '\']');
+}
+
+function getLocals(testStore) {
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ return (0, _get3.default)(testStore, 'state.locals');
+}
+
+function getComponents(testStore) {
+ testStore = testStore || /* istanbul ignore next */_store2.default;
+
+ return (0, _get3.default)(testStore, 'state.components');
+}
+/* WEBPACK VAR INJECTION */}.call(exports, "lib/core-data/components.js"))
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isDate = __webpack_require__(247)
+
+var MILLISECONDS_IN_HOUR = 3600000
+var MILLISECONDS_IN_MINUTE = 60000
+var DEFAULT_ADDITIONAL_DIGITS = 2
+
+var parseTokenDateTimeDelimeter = /[T ]/
+var parseTokenPlainTime = /:/
+
+// year tokens
+var parseTokenYY = /^(\d{2})$/
+var parseTokensYYY = [
+ /^([+-]\d{2})$/, // 0 additional digits
+ /^([+-]\d{3})$/, // 1 additional digit
+ /^([+-]\d{4})$/ // 2 additional digits
+]
+
+var parseTokenYYYY = /^(\d{4})/
+var parseTokensYYYYY = [
+ /^([+-]\d{4})/, // 0 additional digits
+ /^([+-]\d{5})/, // 1 additional digit
+ /^([+-]\d{6})/ // 2 additional digits
+]
+
+// date tokens
+var parseTokenMM = /^-(\d{2})$/
+var parseTokenDDD = /^-?(\d{3})$/
+var parseTokenMMDD = /^-?(\d{2})-?(\d{2})$/
+var parseTokenWww = /^-?W(\d{2})$/
+var parseTokenWwwD = /^-?W(\d{2})-?(\d{1})$/
+
+// time tokens
+var parseTokenHH = /^(\d{2}([.,]\d*)?)$/
+var parseTokenHHMM = /^(\d{2}):?(\d{2}([.,]\d*)?)$/
+var parseTokenHHMMSS = /^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/
+
+// timezone tokens
+var parseTokenTimezone = /([Z+-].*)$/
+var parseTokenTimezoneZ = /^(Z)$/
+var parseTokenTimezoneHH = /^([+-])(\d{2})$/
+var parseTokenTimezoneHHMM = /^([+-])(\d{2}):?(\d{2})$/
+
+/**
+ * @category Common Helpers
+ * @summary Convert the given argument to an instance of Date.
+ *
+ * @description
+ * Convert the given argument to an instance of Date.
+ *
+ * If the argument is an instance of Date, the function returns its clone.
+ *
+ * If the argument is a number, it is treated as a timestamp.
+ *
+ * If an argument is a string, the function tries to parse it.
+ * Function accepts complete ISO 8601 formats as well as partial implementations.
+ * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
+ *
+ * If all above fails, the function passes the given argument to Date constructor.
+ *
+ * @param {Date|String|Number} argument - the value to convert
+ * @param {Object} [options] - the object with options
+ * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format
+ * @returns {Date} the parsed date in the local time zone
+ *
+ * @example
+ * // Convert string '2014-02-11T11:30:30' to date:
+ * var result = parse('2014-02-11T11:30:30')
+ * //=> Tue Feb 11 2014 11:30:30
+ *
+ * @example
+ * // Parse string '+02014101',
+ * // if the additional number of digits in the extended year format is 1:
+ * var result = parse('+02014101', {additionalDigits: 1})
+ * //=> Fri Apr 11 2014 00:00:00
+ */
+function parse (argument, dirtyOptions) {
+ if (isDate(argument)) {
+ // Prevent the date to lose the milliseconds when passed to new Date() in IE10
+ return new Date(argument.getTime())
+ } else if (typeof argument !== 'string') {
+ return new Date(argument)
+ }
+
+ var options = dirtyOptions || {}
+ var additionalDigits = options.additionalDigits
+ if (additionalDigits == null) {
+ additionalDigits = DEFAULT_ADDITIONAL_DIGITS
+ } else {
+ additionalDigits = Number(additionalDigits)
+ }
+
+ var dateStrings = splitDateString(argument)
+
+ var parseYearResult = parseYear(dateStrings.date, additionalDigits)
+ var year = parseYearResult.year
+ var restDateString = parseYearResult.restDateString
+
+ var date = parseDate(restDateString, year)
+
+ if (date) {
+ var timestamp = date.getTime()
+ var time = 0
+ var offset
+
+ if (dateStrings.time) {
+ time = parseTime(dateStrings.time)
+ }
+
+ if (dateStrings.timezone) {
+ offset = parseTimezone(dateStrings.timezone)
+ } else {
+ // get offset accurate to hour in timezones that change offset
+ offset = new Date(timestamp + time).getTimezoneOffset()
+ offset = new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE).getTimezoneOffset()
+ }
+
+ return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE)
+ } else {
+ return new Date(argument)
+ }
+}
+
+function splitDateString (dateString) {
+ var dateStrings = {}
+ var array = dateString.split(parseTokenDateTimeDelimeter)
+ var timeString
+
+ if (parseTokenPlainTime.test(array[0])) {
+ dateStrings.date = null
+ timeString = array[0]
+ } else {
+ dateStrings.date = array[0]
+ timeString = array[1]
+ }
+
+ if (timeString) {
+ var token = parseTokenTimezone.exec(timeString)
+ if (token) {
+ dateStrings.time = timeString.replace(token[1], '')
+ dateStrings.timezone = token[1]
+ } else {
+ dateStrings.time = timeString
+ }
+ }
+
+ return dateStrings
+}
+
+function parseYear (dateString, additionalDigits) {
+ var parseTokenYYY = parseTokensYYY[additionalDigits]
+ var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]
+
+ var token
+
+ // YYYY or ±YYYYY
+ token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString)
+ if (token) {
+ var yearString = token[1]
+ return {
+ year: parseInt(yearString, 10),
+ restDateString: dateString.slice(yearString.length)
+ }
+ }
+
+ // YY or ±YYY
+ token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString)
+ if (token) {
+ var centuryString = token[1]
+ return {
+ year: parseInt(centuryString, 10) * 100,
+ restDateString: dateString.slice(centuryString.length)
+ }
+ }
+
+ // Invalid ISO-formatted year
+ return {
+ year: null
+ }
+}
+
+function parseDate (dateString, year) {
+ // Invalid ISO-formatted year
+ if (year === null) {
+ return null
+ }
+
+ var token
+ var date
+ var month
+ var week
+
+ // YYYY
+ if (dateString.length === 0) {
+ date = new Date(0)
+ date.setUTCFullYear(year)
+ return date
+ }
+
+ // YYYY-MM
+ token = parseTokenMM.exec(dateString)
+ if (token) {
+ date = new Date(0)
+ month = parseInt(token[1], 10) - 1
+ date.setUTCFullYear(year, month)
+ return date
+ }
+
+ // YYYY-DDD or YYYYDDD
+ token = parseTokenDDD.exec(dateString)
+ if (token) {
+ date = new Date(0)
+ var dayOfYear = parseInt(token[1], 10)
+ date.setUTCFullYear(year, 0, dayOfYear)
+ return date
+ }
+
+ // YYYY-MM-DD or YYYYMMDD
+ token = parseTokenMMDD.exec(dateString)
+ if (token) {
+ date = new Date(0)
+ month = parseInt(token[1], 10) - 1
+ var day = parseInt(token[2], 10)
+ date.setUTCFullYear(year, month, day)
+ return date
+ }
+
+ // YYYY-Www or YYYYWww
+ token = parseTokenWww.exec(dateString)
+ if (token) {
+ week = parseInt(token[1], 10) - 1
+ return dayOfISOYear(year, week)
+ }
+
+ // YYYY-Www-D or YYYYWwwD
+ token = parseTokenWwwD.exec(dateString)
+ if (token) {
+ week = parseInt(token[1], 10) - 1
+ var dayOfWeek = parseInt(token[2], 10) - 1
+ return dayOfISOYear(year, week, dayOfWeek)
+ }
+
+ // Invalid ISO-formatted date
+ return null
+}
+
+function parseTime (timeString) {
+ var token
+ var hours
+ var minutes
+
+ // hh
+ token = parseTokenHH.exec(timeString)
+ if (token) {
+ hours = parseFloat(token[1].replace(',', '.'))
+ return (hours % 24) * MILLISECONDS_IN_HOUR
+ }
+
+ // hh:mm or hhmm
+ token = parseTokenHHMM.exec(timeString)
+ if (token) {
+ hours = parseInt(token[1], 10)
+ minutes = parseFloat(token[2].replace(',', '.'))
+ return (hours % 24) * MILLISECONDS_IN_HOUR +
+ minutes * MILLISECONDS_IN_MINUTE
+ }
+
+ // hh:mm:ss or hhmmss
+ token = parseTokenHHMMSS.exec(timeString)
+ if (token) {
+ hours = parseInt(token[1], 10)
+ minutes = parseInt(token[2], 10)
+ var seconds = parseFloat(token[3].replace(',', '.'))
+ return (hours % 24) * MILLISECONDS_IN_HOUR +
+ minutes * MILLISECONDS_IN_MINUTE +
+ seconds * 1000
+ }
+
+ // Invalid ISO-formatted time
+ return null
+}
+
+function parseTimezone (timezoneString) {
+ var token
+ var absoluteOffset
+
+ // Z
+ token = parseTokenTimezoneZ.exec(timezoneString)
+ if (token) {
+ return 0
+ }
+
+ // ±hh
+ token = parseTokenTimezoneHH.exec(timezoneString)
+ if (token) {
+ absoluteOffset = parseInt(token[2], 10) * 60
+ return (token[1] === '+') ? -absoluteOffset : absoluteOffset
+ }
+
+ // ±hh:mm or ±hhmm
+ token = parseTokenTimezoneHHMM.exec(timezoneString)
+ if (token) {
+ absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)
+ return (token[1] === '+') ? -absoluteOffset : absoluteOffset
+ }
+
+ return 0
+}
+
+function dayOfISOYear (isoYear, week, day) {
+ week = week || 0
+ day = day || 0
+ var date = new Date(0)
+ date.setUTCFullYear(isoYear, 0, 4)
+ var fourthOfJanuaryDay = date.getUTCDay() || 7
+ var diff = week * 7 + day + 1 - fourthOfJanuaryDay
+ date.setUTCDate(date.getUTCDate() + diff)
+ return date
+}
+
+module.exports = parse
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(119);
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _isError2 = __webpack_require__(395);
+
+var _isError3 = _interopRequireDefault(_isError2);
+
+var _includes2 = __webpack_require__(7);
+
+var _includes3 = _interopRequireDefault(_includes2);
+
+var _get2 = __webpack_require__(1);
+
+var _get3 = _interopRequireDefault(_get2);
+
+var _assign2 = __webpack_require__(9);
+
+var _assign3 = _interopRequireDefault(_assign2);
+
+exports.getSchema = getSchema;
+exports.getObject = getObject;
+exports.getJSON = getJSON;
+exports.getText = getText;
+exports.getHead = getHead;
+exports.getHTML = getHTML;
+exports.save = save;
+exports.saveText = saveText;
+exports.create = create;
+exports.remove = remove;
+exports.removeText = removeText;
+exports.postJSON = postJSON;
+exports.getList = getList;
+exports.saveList = saveList;
+exports.patchList = patchList;
+exports.getMeta = getMeta;
+exports.saveMeta = saveMeta;
+
+var _dom = __webpack_require__(15);
+
+var _urls = __webpack_require__(47);
+
+var _store = __webpack_require__(18);
+
+var _store2 = _interopRequireDefault(_store);
+
+var _rest = __webpack_require__(267);
+
+var _rest2 = _interopRequireDefault(_rest);
+
+var _references = __webpack_require__(2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+// note: all api calls should be going through the queue, so they can handle
+// the user dropping offline or having issues with their connection,
+// as well as to guarantee the order of operations sent to the server
+
+/**
+ * @param {object} obj
+ * @returns {object}
+ */
+function addJsonHeader(obj) {
+ var _headers;
+
+ (0, _assign3.default)(obj, {
+ headers: (_headers = {}, _defineProperty(_headers, _references.contentHeader, _references.contentJSON), _defineProperty(_headers, _references.userHeader, (0, _get3.default)(_store2.default, 'state.user.username')), _headers)
+ });
+
+ return obj;
+}
+
+/**
+ * @param {object} obj
+ * @returns {object}
+ */
+function addTextHeader(obj) {
+ var _headers2;
+
+ (0, _assign3.default)(obj, {
+ headers: (_headers2 = {}, _defineProperty(_headers2, _references.contentHeader, _references.contentText), _defineProperty(_headers2, _references.userHeader, (0, _get3.default)(_store2.default, 'state.user.username')), _headers2)
+ });
+
+ return obj;
+}
+
+/**
+ * add headers to all GET requests
+ * @param {string} url
+ * @returns {object}
+ */
+function addGetHeader(url) {
+ return {
+ method: 'GET',
+ url: url,
+ headers: _defineProperty({}, _references.userHeader, (0, _get3.default)(_store2.default, 'state.user.username'))
+ };
+}
+
+/**
+ * add component hooks flag
+ * @param {string} uri
+ * @param {Boolean} hooks
+ * @returns {string}
+ */
+function addHooks(uri, hooks) {
+ // set `false` to disable component models from firing their save/render hooks
+ // note: this is true by default
+ return hooks === false ? uri + _references.hooksExt : uri;
+}
+
+/**
+ * handle errors thrown by fetch itself, e.g. connection refused
+ * @param {string} method
+ * @return {object} with `statusText` for checkStatus to handle
+ */
+function checkError(method) {
+ return function apiError() {
+ return { statusText: 'Cannot ' + (method === 'GET' ? 'get' : 'send') + ' data' };
+ };
+}
+
+/**
+ * check status of a request, passing through data on 2xx and 3xx
+ * and erroring on 4xx and 5xx
+ * @param {string} url
+ * @returns {object}
+ * @throws error on non-200/300 response status
+ */
+function checkStatus(url) {
+ return function (res) {
+ /* istanbul ignore else */
+ if (res.status && res.status >= 200 && res.status < 400) {
+ return res;
+ } else if (url !== res.url && (0, _includes3.default)(res.url, _references.loginRoute)) {
+ // login redirect!
+ // this means we're trying to do an api call but we're not authenticated.
+ // reload the page to force a redirect to the login page
+ // (while also preserving the current page to redirect back to once they log in)
+ window.location.reload();
+ } else {
+ var error = new Error(res.statusText);
+
+ error.response = res;
+ throw error;
+ }
+ };
+}
+
+/**
+ * send api call!
+ * @param {string|object} options
+ * @returns {Promise}
+ */
+function send(options) {
+ var url = (0, _urls.uriToUrl)(options.url);
+
+ // add credentials. this tells fetch to pass along cookies, incl. auth
+ options.credentials = 'same-origin';
+
+ return _rest2.default.send(url, options).catch(checkError(options.method)).then(checkStatus(url));
+}
+
+/**
+ * @param {object} res
+ * @returns {string}
+ */
+function expectTextResult(res) {
+ return res.text();
+}
+
+/**
+ * expect something to exist
+ * note: make sure you call this in the .then() AND .catch() of a promise
+ * @param {object} res
+ * @returns {boolean}
+ */
+function expectBooleanResult(res) {
+ if ((0, _isError3.default)(res)) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/**
+ * @param {object} res
+ * @returns {object}
+ */
+function expectJSONResult(res) {
+ return res.json();
+}
+
+/**
+ * @param {string} uri The returned object probably won't have this because it would be referencing itself, so we need to remember it and add it.
+ * @returns {function}
+ */
+function expectHTMLResult(uri) {
+ return function (res) {
+ return res.text().then(function (str) {
+ // if we get a full document, return it as a full document.
+ // otherwise pass whatever we get into dom.create()
+ if ((0, _includes3.default)(str, ' 1 && arguments[1] !== undefined ? arguments[1] : '';
+
+ (0, _urls.assertUri)(uri);
+
+ /* todo: Currently the second argument is ONLY used for the Space component because
+ * querying for article tags is limited. There is a pending update
+ * to our elastic indices that should make this unecessary. At that
+ * point the 'queries' argument should be removed.
+ */
+
+ return send(addGetHeader(uri + _references.htmlExt + _references.editComponentExt + queries)).then(expectHTMLResult(uri));
+}
+
+/**
+ * @param {string} uri
+ * @param {object} data
+ * @param {boolean} [hooks] optional, true by default
+ * @returns {Promise}
+ */
+function save(uri, data, hooks) {
+ (0, _urls.assertUri)(uri);
+
+ uri = addHooks(uri, hooks);
+
+ return send(addJsonHeader({
+ method: 'PUT',
+ url: uri,
+ body: JSON.stringify(data)
+ })).then(expectJSONResult);
+}
+
+/**
+ * @param {string} uri
+ * @param {object} data
+ * @returns {Promise}
+ */
+function saveText(uri, data) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addTextHeader({
+ method: 'PUT',
+ url: uri,
+ body: data
+ })).then(expectTextResult);
+}
+
+/**
+ * @param {string} uri
+ * @param {object} data
+ * @param {boolean} hooks
+ * @returns {Promise}
+ */
+function create(uri, data, hooks) {
+ (0, _urls.assertUri)(uri);
+
+ uri = addHooks(uri, hooks);
+
+ return send(addJsonHeader({
+ method: 'POST',
+ url: uri,
+ body: JSON.stringify(data)
+ })).then(expectJSONResult);
+}
+
+/**
+ * @param {string} uri
+ * @returns {Promise}
+ */
+function remove(uri) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addJsonHeader({
+ method: 'DELETE',
+ url: uri
+ })).then(expectJSONResult);
+}
+
+/**
+ * @param {string} uri
+ * @returns {Promise}
+ */
+function removeText(uri) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addTextHeader({
+ method: 'DELETE',
+ url: uri
+ })).then(expectTextResult);
+}
+
+/**
+ * @param {string} uri
+ * @param {object} data
+ * @returns {Promise}
+ */
+function postJSON(uri, data) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addJsonHeader({
+ method: 'POST',
+ url: uri,
+ body: JSON.stringify(data)
+ })).then(expectJSONResult);
+}
+
+/**
+ * convenience function to get list data
+ * @param {string} prefix
+ * @param {string} listName
+ * @return {Promise}
+ */
+function getList(prefix, listName) {
+ var uri = '' + prefix + _references.listsRoute + listName;
+
+ (0, _urls.assertUri)(uri);
+
+ return send(addGetHeader(uri)).then(expectJSONResult);
+}
+
+/**
+ * convenience function to save list data
+ * @param {string} prefix
+ * @param {string} listName
+ * @param {array} items
+ * @return {Promise}
+ */
+function saveList(prefix, listName, items) {
+ var uri = '' + prefix + _references.listsRoute + listName;
+
+ (0, _urls.assertUri)(uri);
+
+ return send(addJsonHeader({
+ method: 'PUT',
+ url: uri,
+ body: JSON.stringify(items)
+ })).then(expectJSONResult);
+}
+
+/**
+ * convenience function to save list data
+ * @param {string} prefix
+ * @param {string} listName
+ * @param {array} items
+ * @return {Promise}
+ */
+function patchList(prefix, listName, patch) {
+ var uri = '' + prefix + _references.listsRoute + listName;
+
+ (0, _urls.assertUri)(uri);
+
+ return send(addJsonHeader({
+ method: 'PATCH',
+ url: uri,
+ body: JSON.stringify(patch)
+ })).then(expectJSONResult);
+}
+
+function getMeta(uri) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addGetHeader(uri + '/meta')).then(expectJSONResult);
+}
+
+function saveMeta(uri, data) {
+ (0, _urls.assertUri)(uri);
+
+ return send(addJsonHeader({
+ method: 'PATCH',
+ url: uri + '/meta',
+ body: JSON.stringify(data)
+ })).then(expectJSONResult);
+}
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseMatches = __webpack_require__(303),
+ baseMatchesProperty = __webpack_require__(334),
+ identity = __webpack_require__(99),
+ isArray = __webpack_require__(3),
+ property = __webpack_require__(338);
+
+/**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+function baseIteratee(value) {
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+ if (typeof value == 'function') {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (typeof value == 'object') {
+ return isArray(value)
+ ? baseMatchesProperty(value[0], value[1])
+ : baseMatches(value);
+ }
+ return property(value);
+}
+
+module.exports = baseIteratee;
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseHas = __webpack_require__(341),
+ hasPath = __webpack_require__(187);
+
+/**
+ * Checks if `path` is a direct property of `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = { 'a': { 'b': 2 } };
+ * var other = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.has(object, 'a');
+ * // => true
+ *
+ * _.has(object, 'a.b');
+ * // => true
+ *
+ * _.has(object, ['a', 'b']);
+ * // => true
+ *
+ * _.has(other, 'a');
+ * // => false
+ */
+function has(object, path) {
+ return object != null && hasPath(object, path, baseHas);
+}
+
+module.exports = has;
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var arrayFilter = __webpack_require__(230),
+ baseFilter = __webpack_require__(231),
+ baseIteratee = __webpack_require__(31),
+ isArray = __webpack_require__(3);
+
+/**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * **Note:** Unlike `_.remove`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @see _.reject
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.filter(users, { 'age': 36, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.filter(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.filter(users, 'active');
+ * // => objects for ['barney']
+ */
+function filter(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, baseIteratee(predicate, 3));
+}
+
+module.exports = filter;
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var disposed = false;
+function injectStyle(ssrContext) {
+ if (disposed) return;
+ __webpack_require__(436);
+}
+var normalizeComponent = __webpack_require__(0);
+/* script */
+var __vue_script__ = __webpack_require__(437);
+/* template */
+var __vue_template__ = __webpack_require__(456);
+/* template functional */
+var __vue_template_functional__ = false;
+/* styles */
+var __vue_styles__ = injectStyle;
+/* scopeId */
+var __vue_scopeId__ = null;
+/* moduleIdentifier (server only) */
+var __vue_module_identifier__ = null;
+var Component = normalizeComponent(__vue_script__, __vue_template__, __vue_template_functional__, __vue_styles__, __vue_scopeId__, __vue_module_identifier__);
+Component.options.__file = "node_modules/keen-ui/src/UiIconButton.vue";
+
+/* hot reload */
+if (false) {
+ (function () {
+ var hotAPI = require("vue-hot-reload-api");
+ hotAPI.install(require("vue"), false);
+ if (!hotAPI.compatible) return;
+ module.hot.accept();
+ if (!module.hot.data) {
+ hotAPI.createRecord("data-v-51836cfc", Component.options);
+ } else {
+ hotAPI.reload("data-v-51836cfc", Component.options);
+ }
+ module.hot.dispose(function (data) {
+ disposed = true;
+ });
+ })();
+}
+
+module.exports = Component.exports;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var disposed = false;
+function injectStyle(ssrContext) {
+ if (disposed) return;
+ __webpack_require__(534);
+}
+var normalizeComponent = __webpack_require__(0);
+/* script */
+var __vue_script__ = __webpack_require__(535);
+/* template */
+var __vue_template__ = __webpack_require__(537);
+/* template functional */
+var __vue_template_functional__ = false;
+/* styles */
+var __vue_styles__ = injectStyle;
+/* scopeId */
+var __vue_scopeId__ = null;
+/* moduleIdentifier (server only) */
+var __vue_module_identifier__ = null;
+var Component = normalizeComponent(__vue_script__, __vue_template__, __vue_template_functional__, __vue_styles__, __vue_scopeId__, __vue_module_identifier__);
+Component.options.__file = "node_modules/keen-ui/src/UiTextbox.vue";
+
+/* hot reload */
+if (false) {
+ (function () {
+ var hotAPI = require("vue-hot-reload-api");
+ hotAPI.install(require("vue"), false);
+ if (!hotAPI.compatible) return;
+ module.hot.accept();
+ if (!module.hot.data) {
+ hotAPI.createRecord("data-v-78a06217", Component.options);
+ } else {
+ hotAPI.reload("data-v-78a06217", Component.options);
+ }
+ module.hot.dispose(function (data) {
+ disposed = true;
+ });
+ })();
+}
+
+module.exports = Component.exports;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseFindIndex = __webpack_require__(100),
+ baseIteratee = __webpack_require__(31),
+ toInteger = __webpack_require__(51);
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
+ * // => 0
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findIndex(users, ['active', false]);
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+function findIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return baseFindIndex(array, baseIteratee(predicate, 3), index);
+}
+
+module.exports = findIndex;
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var disposed = false;
+function injectStyle(ssrContext) {
+ if (disposed) return;
+ __webpack_require__(447);
+}
+var normalizeComponent = __webpack_require__(0);
+/* script */
+var __vue_script__ = __webpack_require__(448);
+/* template */
+var __vue_template__ = __webpack_require__(449);
+/* template functional */
+var __vue_template_functional__ = false;
+/* styles */
+var __vue_styles__ = injectStyle;
+/* scopeId */
+var __vue_scopeId__ = null;
+/* moduleIdentifier (server only) */
+var __vue_module_identifier__ = null;
+var Component = normalizeComponent(__vue_script__, __vue_template__, __vue_template_functional__, __vue_styles__, __vue_scopeId__, __vue_module_identifier__);
+Component.options.__file = "node_modules/keen-ui/src/UiRippleInk.vue";
+
+/* hot reload */
+if (false) {
+ (function () {
+ var hotAPI = require("vue-hot-reload-api");
+ hotAPI.install(require("vue"), false);
+ if (!hotAPI.compatible) return;
+ module.hot.accept();
+ if (!module.hot.data) {
+ hotAPI.createRecord("data-v-0d9c47ef", Component.options);
+ } else {
+ hotAPI.reload("data-v-0d9c47ef", Component.options);
+ }
+ module.hot.dispose(function (data) {
+ disposed = true;
+ });
+ })();
+}
+
+module.exports = Component.exports;
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.KeenUiConfig = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _deepAssign = __webpack_require__(454);
+
+var _deepAssign2 = _interopRequireDefault(_deepAssign);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var config = {
+ disableRipple: false,
+
+ UiAutocomplete: {
+ keys: {
+ label: 'label',
+ value: 'value',
+ image: 'image'
+ }
+ },
+
+ UiCheckboxGroup: {
+ keys: {
+ id: 'id',
+ name: 'name',
+ class: 'class',
+ label: 'label',
+ value: 'value',
+ disabled: 'disabled'
+ }
+ },
+
+ UiMenu: {
+ keys: {
+ icon: 'icon',
+ type: 'type',
+ label: 'label',
+ secondaryText: 'secondaryText',
+ iconProps: 'iconProps',
+ disabled: 'disabled'
+ }
+ },
+
+ UiRadioGroup: {
+ keys: {
+ id: 'id',
+ class: 'class',
+ label: 'label',
+ value: 'value',
+ checked: 'checked',
+ disabled: 'disabled'
+ }
+ },
+
+ UiSelect: {
+ keys: {
+ label: 'label',
+ value: 'value',
+ image: 'image'
+ }
+ }
+};
+
+var KeenUiConfig = exports.KeenUiConfig = function () {
+ function KeenUiConfig() {
+ _classCallCheck(this, KeenUiConfig);
+
+ this.data = (0, _deepAssign2.default)(config, window.KeenUiConfig ? window.KeenUiConfig : {});
+ }
+
+ _createClass(KeenUiConfig, [{
+ key: 'set',
+ value: function set() {
+ var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.data = (0, _deepAssign2.default)(this.data, config);
+ }
+ }]);
+
+ return KeenUiConfig;
+}();
+
+exports.default = new KeenUiConfig();
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+/* eslint-disable one-var */
+var OPEN_FORM = exports.OPEN_FORM = 'OPEN_FORM';
+var CLOSE_FORM = exports.CLOSE_FORM = 'CLOSE_FORM';
+var UPDATE_FORMDATA = exports.UPDATE_FORMDATA = 'UPDATE_FORMDATA';
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(__filename) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _isArray2 = __webpack_require__(3);
+
+var _isArray3 = _interopRequireDefault(_isArray2);
+
+var _isString2 = __webpack_require__(5);
+
+var _isString3 = _interopRequireDefault(_isString2);
+
+var _some2 = __webpack_require__(79);
+
+var _some3 = _interopRequireDefault(_some2);
+
+var _isEmpty2 = __webpack_require__(25);
+
+var _isEmpty3 = _interopRequireDefault(_isEmpty2);
+
+var _isObject2 = __webpack_require__(4);
+
+var _isObject3 = _interopRequireDefault(_isObject2);
+
+var _includes2 = __webpack_require__(7);
+
+var _includes3 = _interopRequireDefault(_includes2);
+
+var _get2 = __webpack_require__(1);
+
+var _get3 = _interopRequireDefault(_get2);
+
+var _toNumber2 = __webpack_require__(87);
+
+var _toNumber3 = _interopRequireDefault(_toNumber2);
+
+var _isNaN2 = __webpack_require__(146);
+
+var _isNaN3 = _interopRequireDefault(_isNaN2);
+
+var _isFunction2 = __webpack_require__(49);
+
+var _isFunction3 = _interopRequireDefault(_isFunction2);
+
+exports.getField = getField;
+exports.isFirstField = isFirstField;
+exports.setCaret = setCaret;
+exports.getFieldData = getFieldData;
+exports.shouldBeRequired = shouldBeRequired;
+exports.getValidationError = getValidationError;
+exports.shouldBeRevealed = shouldBeRevealed;
+
+var _caretPosition = __webpack_require__(485);
+
+var _he = __webpack_require__(151);
+
+var _striptags = __webpack_require__(84);
+
+var _striptags2 = _interopRequireDefault(_striptags);
+
+var _dom = __webpack_require__(15);
+
+var _references = __webpack_require__(2);
+
+var _comparators = __webpack_require__(83);
+
+var _siteFilter = __webpack_require__(127);
+
+var _log = __webpack_require__(10);
+
+var _log2 = _interopRequireDefault(_log);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var log = (0, _log2.default)(__filename);
+
+/**
+ * find the field element a behavior is inside
+ * @param {Element} el
+ * @return {Element}
+ */
+function getField(el) {
+ return (0, _dom.closest)(el, '.' + _references.fieldClass);
+}
+
+/**
+ * DEPRECATED
+ * determine if a behavior is in the first field of a form
+ * note: this is used for setting the caret
+ * @param {Element} el of the behavior
+ * @return {Boolean}
+ */
+function isFirstField(el) {
+ var field = getField(el);
+
+ return field && field.classList.contains(_references.firstFieldClass);
+}
+
+/**
+ * set the caret into a field
+ * @param {Element} el of input (something that can get a caret set in it) or el containing an input
+ * @param {number} offset
+ * @param {number} [data] if passed a negative offset
+ */
+function setCaret(el, offset, data) {
+ var inputEl = (0, _isFunction3.default)(el.createTextRange) ? el : (0, _dom.find)(el, 'input');
+
+ data = data || '';
+
+ if (offset === -1) {
+ // set caret at the end if it's negative
+ // todo: maybe support arbitrary negative offsets?
+ offset = data.length - 1;
+ }
+
+ // set the offset, but fail gracefully
+ try {
+ (0, _caretPosition.set)(inputEl, offset);
+ } catch (e) {
+ log.debug('Cannot set caret in field: ' + e.message, { action: 'setCaret', el: el });
+ }
+}
+
+/**
+ * find data in the same list item, recursing upwards in case we're inside
+ * multiple complex-lists
+ * @param {object} data
+ * @param {string} prop
+ * @param {string} path
+ * @return {*}
+ */
+function findDataInList(data, prop, path) {
+ var pathArray = path.split('.');
+
+ var found = null,
+ i = pathArray.length - 1;
+
+ for (; i >= 0; i--) {
+ var part = pathArray[i];
+
+ if (!(0, _isNaN3.default)((0, _toNumber3.default)(part))) {
+ // this is inside an array! that means it's in a complex list
+ var beforeIndex = pathArray.slice(0, i).join('.'),
+ index = part;
+
+ found = (0, _get3.default)(data, beforeIndex + '.' + index + '.' + prop);
+ if (found) {
+ break;
+ }
+ }
+ }
+
+ return found;
+}
+
+/**
+ * get data from a field
+ * looks inside current complex-list item first,
+ * then up to other lists this may be inside,
+ * then looks in the current form,
+ * then (finally) looks in the component data
+ * @param {object} store
+ * @param {string} prop to look for
+ * @param {string} path of current field (to check for nested complex-lists)
+ * @param {string} uri to check inside current component
+ * @return {*}
+ */
+function getFieldData(store, prop, path, uri) {
+ var currentFormData = (0, _get3.default)(store, 'state.ui.currentForm.fields', {}),
+ insideComplexLists = path.match(/\.\d+\./); // determine if a field is inside an array
+
+ if (insideComplexLists) {
+ // inside one (or more) complex lists
+ var found = findDataInList(currentFormData, prop, path);
+
+ if (found) {
+ return found;
+ }
+ }
+
+ // if we haven't found anything, check to see if it's in the current form (or component data)
+ if ((0, _includes3.default)(Object.keys(currentFormData), prop)) {
+ // inside current form
+ return currentFormData[prop];
+ } else {
+ // inside the component data
+ return (0, _get3.default)(store, 'state.components[\'' + uri + '\'].' + prop);
+ }
+}
+
+/**
+ * generate error messages from validation rules,
+ * specifying default error messages
+ * @param {object} [validate]
+ * @param {boolean} [isLengthy]
+ * @return {object}
+ */
+function errorMessages() {
+ var validate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ var isLengthy = arguments[1];
+
+ return {
+ required: validate.requiredMessage || 'Please fill out this field',
+ min: validate.minMessage || isLengthy ? 'Please enter at least ' + validate.min + ' characters' : 'Please enter a value of ' + validate.min + ' or above',
+ max: validate.maxMessage || isLengthy ? 'Please enter fewer than ' + (validate.max + 1) + ' characters' : 'Please enter a value of ' + validate.max + ' or below',
+ pattern: validate.patternMessage || 'Please match the pattern "/' + validate.pattern + '/ig"'
+ };
+}
+
+/**
+ * determine if a field should be required
+ * @param {object} validate
+ * @param {object} store
+ * @param {string} name
+ * @return {Boolean}
+ */
+function shouldBeRequired(validate, store, name) {
+ if ((0, _isObject3.default)(validate) && (0, _isObject3.default)(validate.required)) {
+ var field = validate.required.field,
+ operator = validate.required.operator,
+ values = validate.required.values,
+ value = validate.required.value,
+ uri = (0, _get3.default)(store, 'state.ui.currentForm.uri'),
+ compareData = getFieldData(store, field, name, uri);
+
+ if (!(0, _isEmpty3.default)(values)) {
+ // compare against multiple values. will return true if any of them match
+ return (0, _some3.default)(values, function (v) {
+ return (0, _comparators.compare)({ data: compareData, operator: operator, value: v });
+ });
+ } else {
+ // compare against a single value (note: value might be undefined if we're comparing with certain operators)
+ return (0, _comparators.compare)({ data: compareData, operator: operator, value: value });
+ }
+ }
+}
+
+/**
+ * remove tags and decode entities, so we can check the length of strings
+ * @param {string} value
+ * @return {string}
+ */
+function cleanValue(value) {
+ return (0, _he.decode)((0, _striptags2.default)((0, _isString3.default)(value) ? value : ''));
+}
+
+/**
+ * determine if a field is valid, based on the validation rules
+ * @param {*} data
+ * @param {object|undefined} validate
+ * @param {object} store
+ * @param {string} name
+ * @return {string|null}
+ */
+function getValidationError(data, validate, store, name) {
+ // eslint-disable-line
+ var isFieldEmpty = (0, _comparators.isEmpty)(data),
+ isLengthy = (0, _isString3.default)(data) || (0, _isArray3.default)(data),
+ messages = errorMessages(validate, isLengthy),
+ strValue = (0, _isString3.default)(data) && cleanValue(data);
+
+ var length = void 0;
+
+ if (!(0, _isObject3.default)(validate)) {
+ return null; // if no validation rules, it's always valid
+ }
+
+ // if we're dealing with strings or arrays, we'll want to check min/max against the length
+ // (if it's numbers, dates, or other things, we want to check min/max against the value directly)
+ if (isLengthy) {
+ length = (strValue || data).length;
+ }
+
+ if (isFieldEmpty && validate.required === true) {
+ // validate required fields first
+ return messages.required;
+ } else if (isFieldEmpty && (0, _isObject3.default)(validate.required)) {
+ return shouldBeRequired(validate, store, name) ? messages.required : null;
+ } else if (!isFieldEmpty && validate.pattern && !strValue.match(new RegExp(validate.pattern, 'ig'))) {
+ return messages.pattern;
+ } else if (!isFieldEmpty && isLengthy) {
+ // if we're checking stuff with lengths (strings + arrays),
+ // DON'T check for values against min/max
+ if (validate.min && length < validate.min) {
+ return messages.min;
+ } else if (validate.max && length > validate.max) {
+ return messages.max;
+ }
+ } else if (!isFieldEmpty && validate.min && data < validate.min) {
+ return messages.min;
+ } else if (!isFieldEmpty && validate.max && data > validate.max) {
+ return messages.max;
+ }
+}
+
+/**
+ * determine if something should be revealed based on the sites specified
+ * and the current site
+ * @param {string} sites
+ * @param {string} currentSlug
+ * @return {boolean}
+ */
+function shouldBeRevealedBySite(sites, currentSlug) {
+ return !!(0, _siteFilter.filterBySite)([{ sites: sites }], currentSlug).length;
+}
+
+/**
+ * determine if something should be revealed based on another field's data
+ * @param {*} data
+ * @param {string} operator
+ * @param {*} value if we want to reveal based on a single value
+ * @param {array} values if we want to reveal based on multiple values
+ * @return {boolean}
+ */
+function shouldBeRevealedByData(data, operator, value, values) {
+ if (!(0, _isEmpty3.default)(values)) {
+ // compare against multiple values. will return true if any of them match
+ return (0, _some3.default)(values, function (v) {
+ return (0, _comparators.compare)({ data: data, operator: operator, value: v });
+ });
+ } else {
+ // compare against a single value (note: value might be undefined if we're comparing with certain operators)
+ return (0, _comparators.compare)({ data: data, operator: operator, value: value });
+ }
+}
+
+/**
+ * determine if a field / option / etc should be revealed
+ * (based on the config from _reveal)
+ * @param {object} store
+ * @param {object} config
+ * @param {string} name of field
+ * @return {boolean}
+ */
+function shouldBeRevealed(store, config, name) {
+ var currentSlug = (0, _get3.default)(store, 'state.site.slug'),
+ uri = (0, _get3.default)(store, 'state.ui.currentForm.uri'),
+ field = config && config.field,
+ operator = config && config.operator,
+ value = config && config.value,
+ values = config && config.values || [],
+ sites = config && config.sites,
+ data = config && getFieldData(store, field, name, uri);
+
+ if (sites && field) {
+ // if there is site logic, run it before field logic
+ // and return a boolean based on both checks
+ return shouldBeRevealedBySite(sites, currentSlug) && shouldBeRevealedByData(data, operator, value, values);
+ } else if (sites) {
+ // only check the site logic
+ return shouldBeRevealedBySite(sites, currentSlug);
+ } else if (field) {
+ // only check field logic
+ return shouldBeRevealedByData(data, operator, value, values);
+ } else {
+ return true; // show the field if no _reveal config
+ }
+}
+/* WEBPACK VAR INJECTION */}.call(exports, "lib/forms/field-helpers.js"))
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return value != null && typeof value == 'object';
+}
+
+module.exports = isObjectLike;
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var overArg = __webpack_require__(75);
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = overArg(Object.keys, Object);
+
+module.exports = nativeKeys;
+
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports) {
+
+/**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+}
+
+module.exports = arrayMap;
+
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isFunction = __webpack_require__(49),
+ isLength = __webpack_require__(138);
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+module.exports = isArrayLike;
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseForOwn = __webpack_require__(101),
+ castFunction = __webpack_require__(192);
+
+/**
+ * Iterates over own enumerable string keyed properties of an object and
+ * invokes `iteratee` for each property. The iteratee is invoked with three
+ * arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwnRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+function forOwn(object, iteratee) {
+ return object && baseForOwn(object, castFunction(iteratee));
+}
+
+module.exports = forOwn;
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
+/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!
+ * Vue.js v2.5.16
+ * (c) 2014-2018 Evan You
+ * Released under the MIT License.
+ */
+/* */
+
+var emptyObject = Object.freeze({});
+
+// these helpers produces better vm code in JS engines due to their
+// explicitness and function inlining
+function isUndef (v) {
+ return v === undefined || v === null
+}
+
+function isDef (v) {
+ return v !== undefined && v !== null
+}
+
+function isTrue (v) {
+ return v === true
+}
+
+function isFalse (v) {
+ return v === false
+}
+
+/**
+ * Check if value is primitive
+ */
+function isPrimitive (value) {
+ return (
+ typeof value === 'string' ||
+ typeof value === 'number' ||
+ // $flow-disable-line
+ typeof value === 'symbol' ||
+ typeof value === 'boolean'
+ )
+}
+
+/**
+ * Quick object check - this is primarily used to tell
+ * Objects from primitive values when we know the value
+ * is a JSON-compliant type.
+ */
+function isObject (obj) {
+ return obj !== null && typeof obj === 'object'
+}
+
+/**
+ * Get the raw type string of a value e.g. [object Object]
+ */
+var _toString = Object.prototype.toString;
+
+function toRawType (value) {
+ return _toString.call(value).slice(8, -1)
+}
+
+/**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ */
+function isPlainObject (obj) {
+ return _toString.call(obj) === '[object Object]'
+}
+
+function isRegExp (v) {
+ return _toString.call(v) === '[object RegExp]'
+}
+
+/**
+ * Check if val is a valid array index.
+ */
+function isValidArrayIndex (val) {
+ var n = parseFloat(String(val));
+ return n >= 0 && Math.floor(n) === n && isFinite(val)
+}
+
+/**
+ * Convert a value to a string that is actually rendered.
+ */
+function toString (val) {
+ return val == null
+ ? ''
+ : typeof val === 'object'
+ ? JSON.stringify(val, null, 2)
+ : String(val)
+}
+
+/**
+ * Convert a input value to a number for persistence.
+ * If the conversion fails, return original string.
+ */
+function toNumber (val) {
+ var n = parseFloat(val);
+ return isNaN(n) ? val : n
+}
+
+/**
+ * Make a map and return a function for checking if a key
+ * is in that map.
+ */
+function makeMap (
+ str,
+ expectsLowerCase
+) {
+ var map = Object.create(null);
+ var list = str.split(',');
+ for (var i = 0; i < list.length; i++) {
+ map[list[i]] = true;
+ }
+ return expectsLowerCase
+ ? function (val) { return map[val.toLowerCase()]; }
+ : function (val) { return map[val]; }
+}
+
+/**
+ * Check if a tag is a built-in tag.
+ */
+var isBuiltInTag = makeMap('slot,component', true);
+
+/**
+ * Check if a attribute is a reserved attribute.
+ */
+var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
+
+/**
+ * Remove an item from an array
+ */
+function remove (arr, item) {
+ if (arr.length) {
+ var index = arr.indexOf(item);
+ if (index > -1) {
+ return arr.splice(index, 1)
+ }
+ }
+}
+
+/**
+ * Check whether the object has the property.
+ */
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+function hasOwn (obj, key) {
+ return hasOwnProperty.call(obj, key)
+}
+
+/**
+ * Create a cached version of a pure function.
+ */
+function cached (fn) {
+ var cache = Object.create(null);
+ return (function cachedFn (str) {
+ var hit = cache[str];
+ return hit || (cache[str] = fn(str))
+ })
+}
+
+/**
+ * Camelize a hyphen-delimited string.
+ */
+var camelizeRE = /-(\w)/g;
+var camelize = cached(function (str) {
+ return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
+});
+
+/**
+ * Capitalize a string.
+ */
+var capitalize = cached(function (str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+});
+
+/**
+ * Hyphenate a camelCase string.
+ */
+var hyphenateRE = /\B([A-Z])/g;
+var hyphenate = cached(function (str) {
+ return str.replace(hyphenateRE, '-$1').toLowerCase()
+});
+
+/**
+ * Simple bind polyfill for environments that do not support it... e.g.
+ * PhantomJS 1.x. Technically we don't need this anymore since native bind is
+ * now more performant in most browsers, but removing it would be breaking for
+ * code that was able to run in PhantomJS 1.x, so this must be kept for
+ * backwards compatibility.
+ */
+
+/* istanbul ignore next */
+function polyfillBind (fn, ctx) {
+ function boundFn (a) {
+ var l = arguments.length;
+ return l
+ ? l > 1
+ ? fn.apply(ctx, arguments)
+ : fn.call(ctx, a)
+ : fn.call(ctx)
+ }
+
+ boundFn._length = fn.length;
+ return boundFn
+}
+
+function nativeBind (fn, ctx) {
+ return fn.bind(ctx)
+}
+
+var bind = Function.prototype.bind
+ ? nativeBind
+ : polyfillBind;
+
+/**
+ * Convert an Array-like object to a real Array.
+ */
+function toArray (list, start) {
+ start = start || 0;
+ var i = list.length - start;
+ var ret = new Array(i);
+ while (i--) {
+ ret[i] = list[i + start];
+ }
+ return ret
+}
+
+/**
+ * Mix properties into target object.
+ */
+function extend (to, _from) {
+ for (var key in _from) {
+ to[key] = _from[key];
+ }
+ return to
+}
+
+/**
+ * Merge an Array of Objects into a single Object.
+ */
+function toObject (arr) {
+ var res = {};
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i]) {
+ extend(res, arr[i]);
+ }
+ }
+ return res
+}
+
+/**
+ * Perform no operation.
+ * Stubbing args to make Flow happy without leaving useless transpiled code
+ * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
+ */
+function noop (a, b, c) {}
+
+/**
+ * Always return false.
+ */
+var no = function (a, b, c) { return false; };
+
+/**
+ * Return same value
+ */
+var identity = function (_) { return _; };
+
+/**
+ * Generate a static keys string from compiler modules.
+ */
+
+
+/**
+ * Check if two values are loosely equal - that is,
+ * if they are plain objects, do they have the same shape?
+ */
+function looseEqual (a, b) {
+ if (a === b) { return true }
+ var isObjectA = isObject(a);
+ var isObjectB = isObject(b);
+ if (isObjectA && isObjectB) {
+ try {
+ var isArrayA = Array.isArray(a);
+ var isArrayB = Array.isArray(b);
+ if (isArrayA && isArrayB) {
+ return a.length === b.length && a.every(function (e, i) {
+ return looseEqual(e, b[i])
+ })
+ } else if (!isArrayA && !isArrayB) {
+ var keysA = Object.keys(a);
+ var keysB = Object.keys(b);
+ return keysA.length === keysB.length && keysA.every(function (key) {
+ return looseEqual(a[key], b[key])
+ })
+ } else {
+ /* istanbul ignore next */
+ return false
+ }
+ } catch (e) {
+ /* istanbul ignore next */
+ return false
+ }
+ } else if (!isObjectA && !isObjectB) {
+ return String(a) === String(b)
+ } else {
+ return false
+ }
+}
+
+function looseIndexOf (arr, val) {
+ for (var i = 0; i < arr.length; i++) {
+ if (looseEqual(arr[i], val)) { return i }
+ }
+ return -1
+}
+
+/**
+ * Ensure a function is called only once.
+ */
+function once (fn) {
+ var called = false;
+ return function () {
+ if (!called) {
+ called = true;
+ fn.apply(this, arguments);
+ }
+ }
+}
+
+var SSR_ATTR = 'data-server-rendered';
+
+var ASSET_TYPES = [
+ 'component',
+ 'directive',
+ 'filter'
+];
+
+var LIFECYCLE_HOOKS = [
+ 'beforeCreate',
+ 'created',
+ 'beforeMount',
+ 'mounted',
+ 'beforeUpdate',
+ 'updated',
+ 'beforeDestroy',
+ 'destroyed',
+ 'activated',
+ 'deactivated',
+ 'errorCaptured'
+];
+
+/* */
+
+var config = ({
+ /**
+ * Option merge strategies (used in core/util/options)
+ */
+ // $flow-disable-line
+ optionMergeStrategies: Object.create(null),
+
+ /**
+ * Whether to suppress warnings.
+ */
+ silent: false,
+
+ /**
+ * Show production mode tip message on boot?
+ */
+ productionTip: Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production',
+
+ /**
+ * Whether to enable devtools
+ */
+ devtools: Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production',
+
+ /**
+ * Whether to record perf
+ */
+ performance: false,
+
+ /**
+ * Error handler for watcher errors
+ */
+ errorHandler: null,
+
+ /**
+ * Warn handler for watcher warns
+ */
+ warnHandler: null,
+
+ /**
+ * Ignore certain custom elements
+ */
+ ignoredElements: [],
+
+ /**
+ * Custom user key aliases for v-on
+ */
+ // $flow-disable-line
+ keyCodes: Object.create(null),
+
+ /**
+ * Check if a tag is reserved so that it cannot be registered as a
+ * component. This is platform-dependent and may be overwritten.
+ */
+ isReservedTag: no,
+
+ /**
+ * Check if an attribute is reserved so that it cannot be used as a component
+ * prop. This is platform-dependent and may be overwritten.
+ */
+ isReservedAttr: no,
+
+ /**
+ * Check if a tag is an unknown element.
+ * Platform-dependent.
+ */
+ isUnknownElement: no,
+
+ /**
+ * Get the namespace of an element
+ */
+ getTagNamespace: noop,
+
+ /**
+ * Parse the real tag name for the specific platform.
+ */
+ parsePlatformTagName: identity,
+
+ /**
+ * Check if an attribute must be bound using property, e.g. value
+ * Platform-dependent.
+ */
+ mustUseProp: no,
+
+ /**
+ * Exposed for legacy reasons
+ */
+ _lifecycleHooks: LIFECYCLE_HOOKS
+})
+
+/* */
+
+/**
+ * Check if a string starts with $ or _
+ */
+function isReserved (str) {
+ var c = (str + '').charCodeAt(0);
+ return c === 0x24 || c === 0x5F
+}
+
+/**
+ * Define a property.
+ */
+function def (obj, key, val, enumerable) {
+ Object.defineProperty(obj, key, {
+ value: val,
+ enumerable: !!enumerable,
+ writable: true,
+ configurable: true
+ });
+}
+
+/**
+ * Parse simple path.
+ */
+var bailRE = /[^\w.$]/;
+function parsePath (path) {
+ if (bailRE.test(path)) {
+ return
+ }
+ var segments = path.split('.');
+ return function (obj) {
+ for (var i = 0; i < segments.length; i++) {
+ if (!obj) { return }
+ obj = obj[segments[i]];
+ }
+ return obj
+ }
+}
+
+/* */
+
+// can we use __proto__?
+var hasProto = '__proto__' in {};
+
+// Browser environment sniffing
+var inBrowser = typeof window !== 'undefined';
+var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
+var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
+var UA = inBrowser && window.navigator.userAgent.toLowerCase();
+var isIE = UA && /msie|trident/.test(UA);
+var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
+var isEdge = UA && UA.indexOf('edge/') > 0;
+var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
+var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
+var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
+
+// Firefox has a "watch" function on Object.prototype...
+var nativeWatch = ({}).watch;
+
+var supportsPassive = false;
+if (inBrowser) {
+ try {
+ var opts = {};
+ Object.defineProperty(opts, 'passive', ({
+ get: function get () {
+ /* istanbul ignore next */
+ supportsPassive = true;
+ }
+ })); // https://github.com/facebook/flow/issues/285
+ window.addEventListener('test-passive', null, opts);
+ } catch (e) {}
+}
+
+// this needs to be lazy-evaled because vue may be required before
+// vue-server-renderer can set VUE_ENV
+var _isServer;
+var isServerRendering = function () {
+ if (_isServer === undefined) {
+ /* istanbul ignore if */
+ if (!inBrowser && !inWeex && typeof global !== 'undefined') {
+ // detect presence of vue-server-renderer and avoid
+ // Webpack shimming the process
+ _isServer = global['process'].env.VUE_ENV === 'server';
+ } else {
+ _isServer = false;
+ }
+ }
+ return _isServer
+};
+
+// detect devtools
+var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
+
+/* istanbul ignore next */
+function isNative (Ctor) {
+ return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
+}
+
+var hasSymbol =
+ typeof Symbol !== 'undefined' && isNative(Symbol) &&
+ typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
+
+var _Set;
+/* istanbul ignore if */ // $flow-disable-line
+if (typeof Set !== 'undefined' && isNative(Set)) {
+ // use native Set when available.
+ _Set = Set;
+} else {
+ // a non-standard Set polyfill that only works with primitive keys.
+ _Set = (function () {
+ function Set () {
+ this.set = Object.create(null);
+ }
+ Set.prototype.has = function has (key) {
+ return this.set[key] === true
+ };
+ Set.prototype.add = function add (key) {
+ this.set[key] = true;
+ };
+ Set.prototype.clear = function clear () {
+ this.set = Object.create(null);
+ };
+
+ return Set;
+ }());
+}
+
+/* */
+
+var warn = noop;
+var tip = noop;
+var generateComponentTrace = (noop); // work around flow check
+var formatComponentName = (noop);
+
+if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var hasConsole = typeof console !== 'undefined';
+ var classifyRE = /(?:^|[-_])(\w)/g;
+ var classify = function (str) { return str
+ .replace(classifyRE, function (c) { return c.toUpperCase(); })
+ .replace(/[-_]/g, ''); };
+
+ warn = function (msg, vm) {
+ var trace = vm ? generateComponentTrace(vm) : '';
+
+ if (config.warnHandler) {
+ config.warnHandler.call(null, msg, vm, trace);
+ } else if (hasConsole && (!config.silent)) {
+ console.error(("[Vue warn]: " + msg + trace));
+ }
+ };
+
+ tip = function (msg, vm) {
+ if (hasConsole && (!config.silent)) {
+ console.warn("[Vue tip]: " + msg + (
+ vm ? generateComponentTrace(vm) : ''
+ ));
+ }
+ };
+
+ formatComponentName = function (vm, includeFile) {
+ if (vm.$root === vm) {
+ return ''
+ }
+ var options = typeof vm === 'function' && vm.cid != null
+ ? vm.options
+ : vm._isVue
+ ? vm.$options || vm.constructor.options
+ : vm || {};
+ var name = options.name || options._componentTag;
+ var file = options.__file;
+ if (!name && file) {
+ var match = file.match(/([^/\\]+)\.vue$/);
+ name = match && match[1];
+ }
+
+ return (
+ (name ? ("<" + (classify(name)) + ">") : "") +
+ (file && includeFile !== false ? (" at " + file) : '')
+ )
+ };
+
+ var repeat = function (str, n) {
+ var res = '';
+ while (n) {
+ if (n % 2 === 1) { res += str; }
+ if (n > 1) { str += str; }
+ n >>= 1;
+ }
+ return res
+ };
+
+ generateComponentTrace = function (vm) {
+ if (vm._isVue && vm.$parent) {
+ var tree = [];
+ var currentRecursiveSequence = 0;
+ while (vm) {
+ if (tree.length > 0) {
+ var last = tree[tree.length - 1];
+ if (last.constructor === vm.constructor) {
+ currentRecursiveSequence++;
+ vm = vm.$parent;
+ continue
+ } else if (currentRecursiveSequence > 0) {
+ tree[tree.length - 1] = [last, currentRecursiveSequence];
+ currentRecursiveSequence = 0;
+ }
+ }
+ tree.push(vm);
+ vm = vm.$parent;
+ }
+ return '\n\nfound in\n\n' + tree
+ .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
+ ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
+ : formatComponentName(vm))); })
+ .join('\n')
+ } else {
+ return ("\n\n(found in " + (formatComponentName(vm)) + ")")
+ }
+ };
+}
+
+/* */
+
+
+var uid = 0;
+
+/**
+ * A dep is an observable that can have multiple
+ * directives subscribing to it.
+ */
+var Dep = function Dep () {
+ this.id = uid++;
+ this.subs = [];
+};
+
+Dep.prototype.addSub = function addSub (sub) {
+ this.subs.push(sub);
+};
+
+Dep.prototype.removeSub = function removeSub (sub) {
+ remove(this.subs, sub);
+};
+
+Dep.prototype.depend = function depend () {
+ if (Dep.target) {
+ Dep.target.addDep(this);
+ }
+};
+
+Dep.prototype.notify = function notify () {
+ // stabilize the subscriber list first
+ var subs = this.subs.slice();
+ for (var i = 0, l = subs.length; i < l; i++) {
+ subs[i].update();
+ }
+};
+
+// the current target watcher being evaluated.
+// this is globally unique because there could be only one
+// watcher being evaluated at any time.
+Dep.target = null;
+var targetStack = [];
+
+function pushTarget (_target) {
+ if (Dep.target) { targetStack.push(Dep.target); }
+ Dep.target = _target;
+}
+
+function popTarget () {
+ Dep.target = targetStack.pop();
+}
+
+/* */
+
+var VNode = function VNode (
+ tag,
+ data,
+ children,
+ text,
+ elm,
+ context,
+ componentOptions,
+ asyncFactory
+) {
+ this.tag = tag;
+ this.data = data;
+ this.children = children;
+ this.text = text;
+ this.elm = elm;
+ this.ns = undefined;
+ this.context = context;
+ this.fnContext = undefined;
+ this.fnOptions = undefined;
+ this.fnScopeId = undefined;
+ this.key = data && data.key;
+ this.componentOptions = componentOptions;
+ this.componentInstance = undefined;
+ this.parent = undefined;
+ this.raw = false;
+ this.isStatic = false;
+ this.isRootInsert = true;
+ this.isComment = false;
+ this.isCloned = false;
+ this.isOnce = false;
+ this.asyncFactory = asyncFactory;
+ this.asyncMeta = undefined;
+ this.isAsyncPlaceholder = false;
+};
+
+var prototypeAccessors = { child: { configurable: true } };
+
+// DEPRECATED: alias for componentInstance for backwards compat.
+/* istanbul ignore next */
+prototypeAccessors.child.get = function () {
+ return this.componentInstance
+};
+
+Object.defineProperties( VNode.prototype, prototypeAccessors );
+
+var createEmptyVNode = function (text) {
+ if ( text === void 0 ) text = '';
+
+ var node = new VNode();
+ node.text = text;
+ node.isComment = true;
+ return node
+};
+
+function createTextVNode (val) {
+ return new VNode(undefined, undefined, undefined, String(val))
+}
+
+// optimized shallow clone
+// used for static nodes and slot nodes because they may be reused across
+// multiple renders, cloning them avoids errors when DOM manipulations rely
+// on their elm reference.
+function cloneVNode (vnode) {
+ var cloned = new VNode(
+ vnode.tag,
+ vnode.data,
+ vnode.children,
+ vnode.text,
+ vnode.elm,
+ vnode.context,
+ vnode.componentOptions,
+ vnode.asyncFactory
+ );
+ cloned.ns = vnode.ns;
+ cloned.isStatic = vnode.isStatic;
+ cloned.key = vnode.key;
+ cloned.isComment = vnode.isComment;
+ cloned.fnContext = vnode.fnContext;
+ cloned.fnOptions = vnode.fnOptions;
+ cloned.fnScopeId = vnode.fnScopeId;
+ cloned.isCloned = true;
+ return cloned
+}
+
+/*
+ * not type checking this file because flow doesn't play well with
+ * dynamically accessing methods on Array prototype
+ */
+
+var arrayProto = Array.prototype;
+var arrayMethods = Object.create(arrayProto);
+
+var methodsToPatch = [
+ 'push',
+ 'pop',
+ 'shift',
+ 'unshift',
+ 'splice',
+ 'sort',
+ 'reverse'
+];
+
+/**
+ * Intercept mutating methods and emit events
+ */
+methodsToPatch.forEach(function (method) {
+ // cache original method
+ var original = arrayProto[method];
+ def(arrayMethods, method, function mutator () {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var result = original.apply(this, args);
+ var ob = this.__ob__;
+ var inserted;
+ switch (method) {
+ case 'push':
+ case 'unshift':
+ inserted = args;
+ break
+ case 'splice':
+ inserted = args.slice(2);
+ break
+ }
+ if (inserted) { ob.observeArray(inserted); }
+ // notify change
+ ob.dep.notify();
+ return result
+ });
+});
+
+/* */
+
+var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
+
+/**
+ * In some cases we may want to disable observation inside a component's
+ * update computation.
+ */
+var shouldObserve = true;
+
+function toggleObserving (value) {
+ shouldObserve = value;
+}
+
+/**
+ * Observer class that is attached to each observed
+ * object. Once attached, the observer converts the target
+ * object's property keys into getter/setters that
+ * collect dependencies and dispatch updates.
+ */
+var Observer = function Observer (value) {
+ this.value = value;
+ this.dep = new Dep();
+ this.vmCount = 0;
+ def(value, '__ob__', this);
+ if (Array.isArray(value)) {
+ var augment = hasProto
+ ? protoAugment
+ : copyAugment;
+ augment(value, arrayMethods, arrayKeys);
+ this.observeArray(value);
+ } else {
+ this.walk(value);
+ }
+};
+
+/**
+ * Walk through each property and convert them into
+ * getter/setters. This method should only be called when
+ * value type is Object.
+ */
+Observer.prototype.walk = function walk (obj) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ defineReactive(obj, keys[i]);
+ }
+};
+
+/**
+ * Observe a list of Array items.
+ */
+Observer.prototype.observeArray = function observeArray (items) {
+ for (var i = 0, l = items.length; i < l; i++) {
+ observe(items[i]);
+ }
+};
+
+// helpers
+
+/**
+ * Augment an target Object or Array by intercepting
+ * the prototype chain using __proto__
+ */
+function protoAugment (target, src, keys) {
+ /* eslint-disable no-proto */
+ target.__proto__ = src;
+ /* eslint-enable no-proto */
+}
+
+/**
+ * Augment an target Object or Array by defining
+ * hidden properties.
+ */
+/* istanbul ignore next */
+function copyAugment (target, src, keys) {
+ for (var i = 0, l = keys.length; i < l; i++) {
+ var key = keys[i];
+ def(target, key, src[key]);
+ }
+}
+
+/**
+ * Attempt to create an observer instance for a value,
+ * returns the new observer if successfully observed,
+ * or the existing observer if the value already has one.
+ */
+function observe (value, asRootData) {
+ if (!isObject(value) || value instanceof VNode) {
+ return
+ }
+ var ob;
+ if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
+ ob = value.__ob__;
+ } else if (
+ shouldObserve &&
+ !isServerRendering() &&
+ (Array.isArray(value) || isPlainObject(value)) &&
+ Object.isExtensible(value) &&
+ !value._isVue
+ ) {
+ ob = new Observer(value);
+ }
+ if (asRootData && ob) {
+ ob.vmCount++;
+ }
+ return ob
+}
+
+/**
+ * Define a reactive property on an Object.
+ */
+function defineReactive (
+ obj,
+ key,
+ val,
+ customSetter,
+ shallow
+) {
+ var dep = new Dep();
+
+ var property = Object.getOwnPropertyDescriptor(obj, key);
+ if (property && property.configurable === false) {
+ return
+ }
+
+ // cater for pre-defined getter/setters
+ var getter = property && property.get;
+ if (!getter && arguments.length === 2) {
+ val = obj[key];
+ }
+ var setter = property && property.set;
+
+ var childOb = !shallow && observe(val);
+ Object.defineProperty(obj, key, {
+ enumerable: true,
+ configurable: true,
+ get: function reactiveGetter () {
+ var value = getter ? getter.call(obj) : val;
+ if (Dep.target) {
+ dep.depend();
+ if (childOb) {
+ childOb.dep.depend();
+ if (Array.isArray(value)) {
+ dependArray(value);
+ }
+ }
+ }
+ return value
+ },
+ set: function reactiveSetter (newVal) {
+ var value = getter ? getter.call(obj) : val;
+ /* eslint-disable no-self-compare */
+ if (newVal === value || (newVal !== newVal && value !== value)) {
+ return
+ }
+ /* eslint-enable no-self-compare */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && customSetter) {
+ customSetter();
+ }
+ if (setter) {
+ setter.call(obj, newVal);
+ } else {
+ val = newVal;
+ }
+ childOb = !shallow && observe(newVal);
+ dep.notify();
+ }
+ });
+}
+
+/**
+ * Set a property on an object. Adds the new property and
+ * triggers change notification if the property doesn't
+ * already exist.
+ */
+function set (target, key, val) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ (isUndef(target) || isPrimitive(target))
+ ) {
+ warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
+ }
+ if (Array.isArray(target) && isValidArrayIndex(key)) {
+ target.length = Math.max(target.length, key);
+ target.splice(key, 1, val);
+ return val
+ }
+ if (key in target && !(key in Object.prototype)) {
+ target[key] = val;
+ return val
+ }
+ var ob = (target).__ob__;
+ if (target._isVue || (ob && ob.vmCount)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'Avoid adding reactive properties to a Vue instance or its root $data ' +
+ 'at runtime - declare it upfront in the data option.'
+ );
+ return val
+ }
+ if (!ob) {
+ target[key] = val;
+ return val
+ }
+ defineReactive(ob.value, key, val);
+ ob.dep.notify();
+ return val
+}
+
+/**
+ * Delete a property and trigger change if necessary.
+ */
+function del (target, key) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ (isUndef(target) || isPrimitive(target))
+ ) {
+ warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
+ }
+ if (Array.isArray(target) && isValidArrayIndex(key)) {
+ target.splice(key, 1);
+ return
+ }
+ var ob = (target).__ob__;
+ if (target._isVue || (ob && ob.vmCount)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'Avoid deleting properties on a Vue instance or its root $data ' +
+ '- just set it to null.'
+ );
+ return
+ }
+ if (!hasOwn(target, key)) {
+ return
+ }
+ delete target[key];
+ if (!ob) {
+ return
+ }
+ ob.dep.notify();
+}
+
+/**
+ * Collect dependencies on array elements when the array is touched, since
+ * we cannot intercept array element access like property getters.
+ */
+function dependArray (value) {
+ for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
+ e = value[i];
+ e && e.__ob__ && e.__ob__.dep.depend();
+ if (Array.isArray(e)) {
+ dependArray(e);
+ }
+ }
+}
+
+/* */
+
+/**
+ * Option overwriting strategies are functions that handle
+ * how to merge a parent option value and a child option
+ * value into the final value.
+ */
+var strats = config.optionMergeStrategies;
+
+/**
+ * Options with restrictions
+ */
+if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ strats.el = strats.propsData = function (parent, child, vm, key) {
+ if (!vm) {
+ warn(
+ "option \"" + key + "\" can only be used during instance " +
+ 'creation with the `new` keyword.'
+ );
+ }
+ return defaultStrat(parent, child)
+ };
+}
+
+/**
+ * Helper that recursively merges two data objects together.
+ */
+function mergeData (to, from) {
+ if (!from) { return to }
+ var key, toVal, fromVal;
+ var keys = Object.keys(from);
+ for (var i = 0; i < keys.length; i++) {
+ key = keys[i];
+ toVal = to[key];
+ fromVal = from[key];
+ if (!hasOwn(to, key)) {
+ set(to, key, fromVal);
+ } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {
+ mergeData(toVal, fromVal);
+ }
+ }
+ return to
+}
+
+/**
+ * Data
+ */
+function mergeDataOrFn (
+ parentVal,
+ childVal,
+ vm
+) {
+ if (!vm) {
+ // in a Vue.extend merge, both should be functions
+ if (!childVal) {
+ return parentVal
+ }
+ if (!parentVal) {
+ return childVal
+ }
+ // when parentVal & childVal are both present,
+ // we need to return a function that returns the
+ // merged result of both functions... no need to
+ // check if parentVal is a function here because
+ // it has to be a function to pass previous merges.
+ return function mergedDataFn () {
+ return mergeData(
+ typeof childVal === 'function' ? childVal.call(this, this) : childVal,
+ typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
+ )
+ }
+ } else {
+ return function mergedInstanceDataFn () {
+ // instance merge
+ var instanceData = typeof childVal === 'function'
+ ? childVal.call(vm, vm)
+ : childVal;
+ var defaultData = typeof parentVal === 'function'
+ ? parentVal.call(vm, vm)
+ : parentVal;
+ if (instanceData) {
+ return mergeData(instanceData, defaultData)
+ } else {
+ return defaultData
+ }
+ }
+ }
+}
+
+strats.data = function (
+ parentVal,
+ childVal,
+ vm
+) {
+ if (!vm) {
+ if (childVal && typeof childVal !== 'function') {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'The "data" option should be a function ' +
+ 'that returns a per-instance value in component ' +
+ 'definitions.',
+ vm
+ );
+
+ return parentVal
+ }
+ return mergeDataOrFn(parentVal, childVal)
+ }
+
+ return mergeDataOrFn(parentVal, childVal, vm)
+};
+
+/**
+ * Hooks and props are merged as arrays.
+ */
+function mergeHook (
+ parentVal,
+ childVal
+) {
+ return childVal
+ ? parentVal
+ ? parentVal.concat(childVal)
+ : Array.isArray(childVal)
+ ? childVal
+ : [childVal]
+ : parentVal
+}
+
+LIFECYCLE_HOOKS.forEach(function (hook) {
+ strats[hook] = mergeHook;
+});
+
+/**
+ * Assets
+ *
+ * When a vm is present (instance creation), we need to do
+ * a three-way merge between constructor options, instance
+ * options and parent options.
+ */
+function mergeAssets (
+ parentVal,
+ childVal,
+ vm,
+ key
+) {
+ var res = Object.create(parentVal || null);
+ if (childVal) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
+ return extend(res, childVal)
+ } else {
+ return res
+ }
+}
+
+ASSET_TYPES.forEach(function (type) {
+ strats[type + 's'] = mergeAssets;
+});
+
+/**
+ * Watchers.
+ *
+ * Watchers hashes should not overwrite one
+ * another, so we merge them as arrays.
+ */
+strats.watch = function (
+ parentVal,
+ childVal,
+ vm,
+ key
+) {
+ // work around Firefox's Object.prototype.watch...
+ if (parentVal === nativeWatch) { parentVal = undefined; }
+ if (childVal === nativeWatch) { childVal = undefined; }
+ /* istanbul ignore if */
+ if (!childVal) { return Object.create(parentVal || null) }
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ assertObjectType(key, childVal, vm);
+ }
+ if (!parentVal) { return childVal }
+ var ret = {};
+ extend(ret, parentVal);
+ for (var key$1 in childVal) {
+ var parent = ret[key$1];
+ var child = childVal[key$1];
+ if (parent && !Array.isArray(parent)) {
+ parent = [parent];
+ }
+ ret[key$1] = parent
+ ? parent.concat(child)
+ : Array.isArray(child) ? child : [child];
+ }
+ return ret
+};
+
+/**
+ * Other object hashes.
+ */
+strats.props =
+strats.methods =
+strats.inject =
+strats.computed = function (
+ parentVal,
+ childVal,
+ vm,
+ key
+) {
+ if (childVal && Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ assertObjectType(key, childVal, vm);
+ }
+ if (!parentVal) { return childVal }
+ var ret = Object.create(null);
+ extend(ret, parentVal);
+ if (childVal) { extend(ret, childVal); }
+ return ret
+};
+strats.provide = mergeDataOrFn;
+
+/**
+ * Default strategy.
+ */
+var defaultStrat = function (parentVal, childVal) {
+ return childVal === undefined
+ ? parentVal
+ : childVal
+};
+
+/**
+ * Validate component names
+ */
+function checkComponents (options) {
+ for (var key in options.components) {
+ validateComponentName(key);
+ }
+}
+
+function validateComponentName (name) {
+ if (!/^[a-zA-Z][\w-]*$/.test(name)) {
+ warn(
+ 'Invalid component name: "' + name + '". Component names ' +
+ 'can only contain alphanumeric characters and the hyphen, ' +
+ 'and must start with a letter.'
+ );
+ }
+ if (isBuiltInTag(name) || config.isReservedTag(name)) {
+ warn(
+ 'Do not use built-in or reserved HTML elements as component ' +
+ 'id: ' + name
+ );
+ }
+}
+
+/**
+ * Ensure all props option syntax are normalized into the
+ * Object-based format.
+ */
+function normalizeProps (options, vm) {
+ var props = options.props;
+ if (!props) { return }
+ var res = {};
+ var i, val, name;
+ if (Array.isArray(props)) {
+ i = props.length;
+ while (i--) {
+ val = props[i];
+ if (typeof val === 'string') {
+ name = camelize(val);
+ res[name] = { type: null };
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn('props must be strings when using array syntax.');
+ }
+ }
+ } else if (isPlainObject(props)) {
+ for (var key in props) {
+ val = props[key];
+ name = camelize(key);
+ res[name] = isPlainObject(val)
+ ? val
+ : { type: val };
+ }
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(
+ "Invalid value for option \"props\": expected an Array or an Object, " +
+ "but got " + (toRawType(props)) + ".",
+ vm
+ );
+ }
+ options.props = res;
+}
+
+/**
+ * Normalize all injections into Object-based format
+ */
+function normalizeInject (options, vm) {
+ var inject = options.inject;
+ if (!inject) { return }
+ var normalized = options.inject = {};
+ if (Array.isArray(inject)) {
+ for (var i = 0; i < inject.length; i++) {
+ normalized[inject[i]] = { from: inject[i] };
+ }
+ } else if (isPlainObject(inject)) {
+ for (var key in inject) {
+ var val = inject[key];
+ normalized[key] = isPlainObject(val)
+ ? extend({ from: key }, val)
+ : { from: val };
+ }
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(
+ "Invalid value for option \"inject\": expected an Array or an Object, " +
+ "but got " + (toRawType(inject)) + ".",
+ vm
+ );
+ }
+}
+
+/**
+ * Normalize raw function directives into object format.
+ */
+function normalizeDirectives (options) {
+ var dirs = options.directives;
+ if (dirs) {
+ for (var key in dirs) {
+ var def = dirs[key];
+ if (typeof def === 'function') {
+ dirs[key] = { bind: def, update: def };
+ }
+ }
+ }
+}
+
+function assertObjectType (name, value, vm) {
+ if (!isPlainObject(value)) {
+ warn(
+ "Invalid value for option \"" + name + "\": expected an Object, " +
+ "but got " + (toRawType(value)) + ".",
+ vm
+ );
+ }
+}
+
+/**
+ * Merge two option objects into a new one.
+ * Core utility used in both instantiation and inheritance.
+ */
+function mergeOptions (
+ parent,
+ child,
+ vm
+) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ checkComponents(child);
+ }
+
+ if (typeof child === 'function') {
+ child = child.options;
+ }
+
+ normalizeProps(child, vm);
+ normalizeInject(child, vm);
+ normalizeDirectives(child);
+ var extendsFrom = child.extends;
+ if (extendsFrom) {
+ parent = mergeOptions(parent, extendsFrom, vm);
+ }
+ if (child.mixins) {
+ for (var i = 0, l = child.mixins.length; i < l; i++) {
+ parent = mergeOptions(parent, child.mixins[i], vm);
+ }
+ }
+ var options = {};
+ var key;
+ for (key in parent) {
+ mergeField(key);
+ }
+ for (key in child) {
+ if (!hasOwn(parent, key)) {
+ mergeField(key);
+ }
+ }
+ function mergeField (key) {
+ var strat = strats[key] || defaultStrat;
+ options[key] = strat(parent[key], child[key], vm, key);
+ }
+ return options
+}
+
+/**
+ * Resolve an asset.
+ * This function is used because child instances need access
+ * to assets defined in its ancestor chain.
+ */
+function resolveAsset (
+ options,
+ type,
+ id,
+ warnMissing
+) {
+ /* istanbul ignore if */
+ if (typeof id !== 'string') {
+ return
+ }
+ var assets = options[type];
+ // check local registration variations first
+ if (hasOwn(assets, id)) { return assets[id] }
+ var camelizedId = camelize(id);
+ if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
+ var PascalCaseId = capitalize(camelizedId);
+ if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
+ // fallback to prototype chain
+ var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warnMissing && !res) {
+ warn(
+ 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
+ options
+ );
+ }
+ return res
+}
+
+/* */
+
+function validateProp (
+ key,
+ propOptions,
+ propsData,
+ vm
+) {
+ var prop = propOptions[key];
+ var absent = !hasOwn(propsData, key);
+ var value = propsData[key];
+ // boolean casting
+ var booleanIndex = getTypeIndex(Boolean, prop.type);
+ if (booleanIndex > -1) {
+ if (absent && !hasOwn(prop, 'default')) {
+ value = false;
+ } else if (value === '' || value === hyphenate(key)) {
+ // only cast empty string / same name to boolean if
+ // boolean has higher priority
+ var stringIndex = getTypeIndex(String, prop.type);
+ if (stringIndex < 0 || booleanIndex < stringIndex) {
+ value = true;
+ }
+ }
+ }
+ // check default value
+ if (value === undefined) {
+ value = getPropDefaultValue(vm, prop, key);
+ // since the default value is a fresh copy,
+ // make sure to observe it.
+ var prevShouldObserve = shouldObserve;
+ toggleObserving(true);
+ observe(value);
+ toggleObserving(prevShouldObserve);
+ }
+ if (
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ // skip validation for weex recycle-list child component props
+ !(false && isObject(value) && ('@binding' in value))
+ ) {
+ assertProp(prop, key, value, vm, absent);
+ }
+ return value
+}
+
+/**
+ * Get the default value of a prop.
+ */
+function getPropDefaultValue (vm, prop, key) {
+ // no default, return undefined
+ if (!hasOwn(prop, 'default')) {
+ return undefined
+ }
+ var def = prop.default;
+ // warn against non-factory defaults for Object & Array
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && isObject(def)) {
+ warn(
+ 'Invalid default value for prop "' + key + '": ' +
+ 'Props with type Object/Array must use a factory function ' +
+ 'to return the default value.',
+ vm
+ );
+ }
+ // the raw prop value was also undefined from previous render,
+ // return previous default value to avoid unnecessary watcher trigger
+ if (vm && vm.$options.propsData &&
+ vm.$options.propsData[key] === undefined &&
+ vm._props[key] !== undefined
+ ) {
+ return vm._props[key]
+ }
+ // call factory function for non-Function types
+ // a value is Function if its prototype is function even across different execution context
+ return typeof def === 'function' && getType(prop.type) !== 'Function'
+ ? def.call(vm)
+ : def
+}
+
+/**
+ * Assert whether a prop is valid.
+ */
+function assertProp (
+ prop,
+ name,
+ value,
+ vm,
+ absent
+) {
+ if (prop.required && absent) {
+ warn(
+ 'Missing required prop: "' + name + '"',
+ vm
+ );
+ return
+ }
+ if (value == null && !prop.required) {
+ return
+ }
+ var type = prop.type;
+ var valid = !type || type === true;
+ var expectedTypes = [];
+ if (type) {
+ if (!Array.isArray(type)) {
+ type = [type];
+ }
+ for (var i = 0; i < type.length && !valid; i++) {
+ var assertedType = assertType(value, type[i]);
+ expectedTypes.push(assertedType.expectedType || '');
+ valid = assertedType.valid;
+ }
+ }
+ if (!valid) {
+ warn(
+ "Invalid prop: type check failed for prop \"" + name + "\"." +
+ " Expected " + (expectedTypes.map(capitalize).join(', ')) +
+ ", got " + (toRawType(value)) + ".",
+ vm
+ );
+ return
+ }
+ var validator = prop.validator;
+ if (validator) {
+ if (!validator(value)) {
+ warn(
+ 'Invalid prop: custom validator check failed for prop "' + name + '".',
+ vm
+ );
+ }
+ }
+}
+
+var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
+
+function assertType (value, type) {
+ var valid;
+ var expectedType = getType(type);
+ if (simpleCheckRE.test(expectedType)) {
+ var t = typeof value;
+ valid = t === expectedType.toLowerCase();
+ // for primitive wrapper objects
+ if (!valid && t === 'object') {
+ valid = value instanceof type;
+ }
+ } else if (expectedType === 'Object') {
+ valid = isPlainObject(value);
+ } else if (expectedType === 'Array') {
+ valid = Array.isArray(value);
+ } else {
+ valid = value instanceof type;
+ }
+ return {
+ valid: valid,
+ expectedType: expectedType
+ }
+}
+
+/**
+ * Use function string name to check built-in types,
+ * because a simple equality check will fail when running
+ * across different vms / iframes.
+ */
+function getType (fn) {
+ var match = fn && fn.toString().match(/^\s*function (\w+)/);
+ return match ? match[1] : ''
+}
+
+function isSameType (a, b) {
+ return getType(a) === getType(b)
+}
+
+function getTypeIndex (type, expectedTypes) {
+ if (!Array.isArray(expectedTypes)) {
+ return isSameType(expectedTypes, type) ? 0 : -1
+ }
+ for (var i = 0, len = expectedTypes.length; i < len; i++) {
+ if (isSameType(expectedTypes[i], type)) {
+ return i
+ }
+ }
+ return -1
+}
+
+/* */
+
+function handleError (err, vm, info) {
+ if (vm) {
+ var cur = vm;
+ while ((cur = cur.$parent)) {
+ var hooks = cur.$options.errorCaptured;
+ if (hooks) {
+ for (var i = 0; i < hooks.length; i++) {
+ try {
+ var capture = hooks[i].call(cur, err, vm, info) === false;
+ if (capture) { return }
+ } catch (e) {
+ globalHandleError(e, cur, 'errorCaptured hook');
+ }
+ }
+ }
+ }
+ }
+ globalHandleError(err, vm, info);
+}
+
+function globalHandleError (err, vm, info) {
+ if (config.errorHandler) {
+ try {
+ return config.errorHandler.call(null, err, vm, info)
+ } catch (e) {
+ logError(e, null, 'config.errorHandler');
+ }
+ }
+ logError(err, vm, info);
+}
+
+function logError (err, vm, info) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
+ }
+ /* istanbul ignore else */
+ if ((inBrowser || inWeex) && typeof console !== 'undefined') {
+ console.error(err);
+ } else {
+ throw err
+ }
+}
+
+/* */
+/* globals MessageChannel */
+
+var callbacks = [];
+var pending = false;
+
+function flushCallbacks () {
+ pending = false;
+ var copies = callbacks.slice(0);
+ callbacks.length = 0;
+ for (var i = 0; i < copies.length; i++) {
+ copies[i]();
+ }
+}
+
+// Here we have async deferring wrappers using both microtasks and (macro) tasks.
+// In < 2.4 we used microtasks everywhere, but there are some scenarios where
+// microtasks have too high a priority and fire in between supposedly
+// sequential events (e.g. #4521, #6690) or even between bubbling of the same
+// event (#6566). However, using (macro) tasks everywhere also has subtle problems
+// when state is changed right before repaint (e.g. #6813, out-in transitions).
+// Here we use microtask by default, but expose a way to force (macro) task when
+// needed (e.g. in event handlers attached by v-on).
+var microTimerFunc;
+var macroTimerFunc;
+var useMacroTask = false;
+
+// Determine (macro) task defer implementation.
+// Technically setImmediate should be the ideal choice, but it's only available
+// in IE. The only polyfill that consistently queues the callback after all DOM
+// events triggered in the same loop is by using MessageChannel.
+/* istanbul ignore if */
+if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
+ macroTimerFunc = function () {
+ setImmediate(flushCallbacks);
+ };
+} else if (typeof MessageChannel !== 'undefined' && (
+ isNative(MessageChannel) ||
+ // PhantomJS
+ MessageChannel.toString() === '[object MessageChannelConstructor]'
+)) {
+ var channel = new MessageChannel();
+ var port = channel.port2;
+ channel.port1.onmessage = flushCallbacks;
+ macroTimerFunc = function () {
+ port.postMessage(1);
+ };
+} else {
+ /* istanbul ignore next */
+ macroTimerFunc = function () {
+ setTimeout(flushCallbacks, 0);
+ };
+}
+
+// Determine microtask defer implementation.
+/* istanbul ignore next, $flow-disable-line */
+if (typeof Promise !== 'undefined' && isNative(Promise)) {
+ var p = Promise.resolve();
+ microTimerFunc = function () {
+ p.then(flushCallbacks);
+ // in problematic UIWebViews, Promise.then doesn't completely break, but
+ // it can get stuck in a weird state where callbacks are pushed into the
+ // microtask queue but the queue isn't being flushed, until the browser
+ // needs to do some other work, e.g. handle a timer. Therefore we can
+ // "force" the microtask queue to be flushed by adding an empty timer.
+ if (isIOS) { setTimeout(noop); }
+ };
+} else {
+ // fallback to macro
+ microTimerFunc = macroTimerFunc;
+}
+
+/**
+ * Wrap a function so that if any code inside triggers state change,
+ * the changes are queued using a (macro) task instead of a microtask.
+ */
+function withMacroTask (fn) {
+ return fn._withTask || (fn._withTask = function () {
+ useMacroTask = true;
+ var res = fn.apply(null, arguments);
+ useMacroTask = false;
+ return res
+ })
+}
+
+function nextTick (cb, ctx) {
+ var _resolve;
+ callbacks.push(function () {
+ if (cb) {
+ try {
+ cb.call(ctx);
+ } catch (e) {
+ handleError(e, ctx, 'nextTick');
+ }
+ } else if (_resolve) {
+ _resolve(ctx);
+ }
+ });
+ if (!pending) {
+ pending = true;
+ if (useMacroTask) {
+ macroTimerFunc();
+ } else {
+ microTimerFunc();
+ }
+ }
+ // $flow-disable-line
+ if (!cb && typeof Promise !== 'undefined') {
+ return new Promise(function (resolve) {
+ _resolve = resolve;
+ })
+ }
+}
+
+/* */
+
+/* not type checking this file because flow doesn't play well with Proxy */
+
+var initProxy;
+
+if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var allowedGlobals = makeMap(
+ 'Infinity,undefined,NaN,isFinite,isNaN,' +
+ 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
+ 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
+ 'require' // for Webpack/Browserify
+ );
+
+ var warnNonPresent = function (target, key) {
+ warn(
+ "Property or method \"" + key + "\" is not defined on the instance but " +
+ 'referenced during render. Make sure that this property is reactive, ' +
+ 'either in the data option, or for class-based components, by ' +
+ 'initializing the property. ' +
+ 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
+ target
+ );
+ };
+
+ var hasProxy =
+ typeof Proxy !== 'undefined' && isNative(Proxy);
+
+ if (hasProxy) {
+ var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
+ config.keyCodes = new Proxy(config.keyCodes, {
+ set: function set (target, key, value) {
+ if (isBuiltInModifier(key)) {
+ warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
+ return false
+ } else {
+ target[key] = value;
+ return true
+ }
+ }
+ });
+ }
+
+ var hasHandler = {
+ has: function has (target, key) {
+ var has = key in target;
+ var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';
+ if (!has && !isAllowed) {
+ warnNonPresent(target, key);
+ }
+ return has || !isAllowed
+ }
+ };
+
+ var getHandler = {
+ get: function get (target, key) {
+ if (typeof key === 'string' && !(key in target)) {
+ warnNonPresent(target, key);
+ }
+ return target[key]
+ }
+ };
+
+ initProxy = function initProxy (vm) {
+ if (hasProxy) {
+ // determine which proxy handler to use
+ var options = vm.$options;
+ var handlers = options.render && options.render._withStripped
+ ? getHandler
+ : hasHandler;
+ vm._renderProxy = new Proxy(vm, handlers);
+ } else {
+ vm._renderProxy = vm;
+ }
+ };
+}
+
+/* */
+
+var seenObjects = new _Set();
+
+/**
+ * Recursively traverse an object to evoke all converted
+ * getters, so that every nested property inside the object
+ * is collected as a "deep" dependency.
+ */
+function traverse (val) {
+ _traverse(val, seenObjects);
+ seenObjects.clear();
+}
+
+function _traverse (val, seen) {
+ var i, keys;
+ var isA = Array.isArray(val);
+ if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
+ return
+ }
+ if (val.__ob__) {
+ var depId = val.__ob__.dep.id;
+ if (seen.has(depId)) {
+ return
+ }
+ seen.add(depId);
+ }
+ if (isA) {
+ i = val.length;
+ while (i--) { _traverse(val[i], seen); }
+ } else {
+ keys = Object.keys(val);
+ i = keys.length;
+ while (i--) { _traverse(val[keys[i]], seen); }
+ }
+}
+
+var mark;
+var measure;
+
+if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var perf = inBrowser && window.performance;
+ /* istanbul ignore if */
+ if (
+ perf &&
+ perf.mark &&
+ perf.measure &&
+ perf.clearMarks &&
+ perf.clearMeasures
+ ) {
+ mark = function (tag) { return perf.mark(tag); };
+ measure = function (name, startTag, endTag) {
+ perf.measure(name, startTag, endTag);
+ perf.clearMarks(startTag);
+ perf.clearMarks(endTag);
+ perf.clearMeasures(name);
+ };
+ }
+}
+
+/* */
+
+var normalizeEvent = cached(function (name) {
+ var passive = name.charAt(0) === '&';
+ name = passive ? name.slice(1) : name;
+ var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
+ name = once$$1 ? name.slice(1) : name;
+ var capture = name.charAt(0) === '!';
+ name = capture ? name.slice(1) : name;
+ return {
+ name: name,
+ once: once$$1,
+ capture: capture,
+ passive: passive
+ }
+});
+
+function createFnInvoker (fns) {
+ function invoker () {
+ var arguments$1 = arguments;
+
+ var fns = invoker.fns;
+ if (Array.isArray(fns)) {
+ var cloned = fns.slice();
+ for (var i = 0; i < cloned.length; i++) {
+ cloned[i].apply(null, arguments$1);
+ }
+ } else {
+ // return handler return value for single handlers
+ return fns.apply(null, arguments)
+ }
+ }
+ invoker.fns = fns;
+ return invoker
+}
+
+function updateListeners (
+ on,
+ oldOn,
+ add,
+ remove$$1,
+ vm
+) {
+ var name, def, cur, old, event;
+ for (name in on) {
+ def = cur = on[name];
+ old = oldOn[name];
+ event = normalizeEvent(name);
+ /* istanbul ignore if */
+ if (isUndef(cur)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
+ vm
+ );
+ } else if (isUndef(old)) {
+ if (isUndef(cur.fns)) {
+ cur = on[name] = createFnInvoker(cur);
+ }
+ add(event.name, cur, event.once, event.capture, event.passive, event.params);
+ } else if (cur !== old) {
+ old.fns = cur;
+ on[name] = old;
+ }
+ }
+ for (name in oldOn) {
+ if (isUndef(on[name])) {
+ event = normalizeEvent(name);
+ remove$$1(event.name, oldOn[name], event.capture);
+ }
+ }
+}
+
+/* */
+
+function mergeVNodeHook (def, hookKey, hook) {
+ if (def instanceof VNode) {
+ def = def.data.hook || (def.data.hook = {});
+ }
+ var invoker;
+ var oldHook = def[hookKey];
+
+ function wrappedHook () {
+ hook.apply(this, arguments);
+ // important: remove merged hook to ensure it's called only once
+ // and prevent memory leak
+ remove(invoker.fns, wrappedHook);
+ }
+
+ if (isUndef(oldHook)) {
+ // no existing hook
+ invoker = createFnInvoker([wrappedHook]);
+ } else {
+ /* istanbul ignore if */
+ if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
+ // already a merged invoker
+ invoker = oldHook;
+ invoker.fns.push(wrappedHook);
+ } else {
+ // existing plain hook
+ invoker = createFnInvoker([oldHook, wrappedHook]);
+ }
+ }
+
+ invoker.merged = true;
+ def[hookKey] = invoker;
+}
+
+/* */
+
+function extractPropsFromVNodeData (
+ data,
+ Ctor,
+ tag
+) {
+ // we are only extracting raw values here.
+ // validation and default values are handled in the child
+ // component itself.
+ var propOptions = Ctor.options.props;
+ if (isUndef(propOptions)) {
+ return
+ }
+ var res = {};
+ var attrs = data.attrs;
+ var props = data.props;
+ if (isDef(attrs) || isDef(props)) {
+ for (var key in propOptions) {
+ var altKey = hyphenate(key);
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var keyInLowerCase = key.toLowerCase();
+ if (
+ key !== keyInLowerCase &&
+ attrs && hasOwn(attrs, keyInLowerCase)
+ ) {
+ tip(
+ "Prop \"" + keyInLowerCase + "\" is passed to component " +
+ (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
+ " \"" + key + "\". " +
+ "Note that HTML attributes are case-insensitive and camelCased " +
+ "props need to use their kebab-case equivalents when using in-DOM " +
+ "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
+ );
+ }
+ }
+ checkProp(res, props, key, altKey, true) ||
+ checkProp(res, attrs, key, altKey, false);
+ }
+ }
+ return res
+}
+
+function checkProp (
+ res,
+ hash,
+ key,
+ altKey,
+ preserve
+) {
+ if (isDef(hash)) {
+ if (hasOwn(hash, key)) {
+ res[key] = hash[key];
+ if (!preserve) {
+ delete hash[key];
+ }
+ return true
+ } else if (hasOwn(hash, altKey)) {
+ res[key] = hash[altKey];
+ if (!preserve) {
+ delete hash[altKey];
+ }
+ return true
+ }
+ }
+ return false
+}
+
+/* */
+
+// The template compiler attempts to minimize the need for normalization by
+// statically analyzing the template at compile time.
+//
+// For plain HTML markup, normalization can be completely skipped because the
+// generated render function is guaranteed to return Array. There are
+// two cases where extra normalization is needed:
+
+// 1. When the children contains components - because a functional component
+// may return an Array instead of a single root. In this case, just a simple
+// normalization is needed - if any child is an Array, we flatten the whole
+// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
+// because functional components already normalize their own children.
+function simpleNormalizeChildren (children) {
+ for (var i = 0; i < children.length; i++) {
+ if (Array.isArray(children[i])) {
+ return Array.prototype.concat.apply([], children)
+ }
+ }
+ return children
+}
+
+// 2. When the children contains constructs that always generated nested Arrays,
+// e.g. , , v-for, or when the children is provided by user
+// with hand-written render functions / JSX. In such cases a full normalization
+// is needed to cater to all possible types of children values.
+function normalizeChildren (children) {
+ return isPrimitive(children)
+ ? [createTextVNode(children)]
+ : Array.isArray(children)
+ ? normalizeArrayChildren(children)
+ : undefined
+}
+
+function isTextNode (node) {
+ return isDef(node) && isDef(node.text) && isFalse(node.isComment)
+}
+
+function normalizeArrayChildren (children, nestedIndex) {
+ var res = [];
+ var i, c, lastIndex, last;
+ for (i = 0; i < children.length; i++) {
+ c = children[i];
+ if (isUndef(c) || typeof c === 'boolean') { continue }
+ lastIndex = res.length - 1;
+ last = res[lastIndex];
+ // nested
+ if (Array.isArray(c)) {
+ if (c.length > 0) {
+ c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
+ // merge adjacent text nodes
+ if (isTextNode(c[0]) && isTextNode(last)) {
+ res[lastIndex] = createTextVNode(last.text + (c[0]).text);
+ c.shift();
+ }
+ res.push.apply(res, c);
+ }
+ } else if (isPrimitive(c)) {
+ if (isTextNode(last)) {
+ // merge adjacent text nodes
+ // this is necessary for SSR hydration because text nodes are
+ // essentially merged when rendered to HTML strings
+ res[lastIndex] = createTextVNode(last.text + c);
+ } else if (c !== '') {
+ // convert primitive to vnode
+ res.push(createTextVNode(c));
+ }
+ } else {
+ if (isTextNode(c) && isTextNode(last)) {
+ // merge adjacent text nodes
+ res[lastIndex] = createTextVNode(last.text + c.text);
+ } else {
+ // default key for nested array children (likely generated by v-for)
+ if (isTrue(children._isVList) &&
+ isDef(c.tag) &&
+ isUndef(c.key) &&
+ isDef(nestedIndex)) {
+ c.key = "__vlist" + nestedIndex + "_" + i + "__";
+ }
+ res.push(c);
+ }
+ }
+ }
+ return res
+}
+
+/* */
+
+function ensureCtor (comp, base) {
+ if (
+ comp.__esModule ||
+ (hasSymbol && comp[Symbol.toStringTag] === 'Module')
+ ) {
+ comp = comp.default;
+ }
+ return isObject(comp)
+ ? base.extend(comp)
+ : comp
+}
+
+function createAsyncPlaceholder (
+ factory,
+ data,
+ context,
+ children,
+ tag
+) {
+ var node = createEmptyVNode();
+ node.asyncFactory = factory;
+ node.asyncMeta = { data: data, context: context, children: children, tag: tag };
+ return node
+}
+
+function resolveAsyncComponent (
+ factory,
+ baseCtor,
+ context
+) {
+ if (isTrue(factory.error) && isDef(factory.errorComp)) {
+ return factory.errorComp
+ }
+
+ if (isDef(factory.resolved)) {
+ return factory.resolved
+ }
+
+ if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
+ return factory.loadingComp
+ }
+
+ if (isDef(factory.contexts)) {
+ // already pending
+ factory.contexts.push(context);
+ } else {
+ var contexts = factory.contexts = [context];
+ var sync = true;
+
+ var forceRender = function () {
+ for (var i = 0, l = contexts.length; i < l; i++) {
+ contexts[i].$forceUpdate();
+ }
+ };
+
+ var resolve = once(function (res) {
+ // cache resolved
+ factory.resolved = ensureCtor(res, baseCtor);
+ // invoke callbacks only if this is not a synchronous resolve
+ // (async resolves are shimmed as synchronous during SSR)
+ if (!sync) {
+ forceRender();
+ }
+ });
+
+ var reject = once(function (reason) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ "Failed to resolve async component: " + (String(factory)) +
+ (reason ? ("\nReason: " + reason) : '')
+ );
+ if (isDef(factory.errorComp)) {
+ factory.error = true;
+ forceRender();
+ }
+ });
+
+ var res = factory(resolve, reject);
+
+ if (isObject(res)) {
+ if (typeof res.then === 'function') {
+ // () => Promise
+ if (isUndef(factory.resolved)) {
+ res.then(resolve, reject);
+ }
+ } else if (isDef(res.component) && typeof res.component.then === 'function') {
+ res.component.then(resolve, reject);
+
+ if (isDef(res.error)) {
+ factory.errorComp = ensureCtor(res.error, baseCtor);
+ }
+
+ if (isDef(res.loading)) {
+ factory.loadingComp = ensureCtor(res.loading, baseCtor);
+ if (res.delay === 0) {
+ factory.loading = true;
+ } else {
+ setTimeout(function () {
+ if (isUndef(factory.resolved) && isUndef(factory.error)) {
+ factory.loading = true;
+ forceRender();
+ }
+ }, res.delay || 200);
+ }
+ }
+
+ if (isDef(res.timeout)) {
+ setTimeout(function () {
+ if (isUndef(factory.resolved)) {
+ reject(
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production'
+ ? ("timeout (" + (res.timeout) + "ms)")
+ : null
+ );
+ }
+ }, res.timeout);
+ }
+ }
+ }
+
+ sync = false;
+ // return in case resolved synchronously
+ return factory.loading
+ ? factory.loadingComp
+ : factory.resolved
+ }
+}
+
+/* */
+
+function isAsyncPlaceholder (node) {
+ return node.isComment && node.asyncFactory
+}
+
+/* */
+
+function getFirstComponentChild (children) {
+ if (Array.isArray(children)) {
+ for (var i = 0; i < children.length; i++) {
+ var c = children[i];
+ if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
+ return c
+ }
+ }
+ }
+}
+
+/* */
+
+/* */
+
+function initEvents (vm) {
+ vm._events = Object.create(null);
+ vm._hasHookEvent = false;
+ // init parent attached events
+ var listeners = vm.$options._parentListeners;
+ if (listeners) {
+ updateComponentListeners(vm, listeners);
+ }
+}
+
+var target;
+
+function add (event, fn, once) {
+ if (once) {
+ target.$once(event, fn);
+ } else {
+ target.$on(event, fn);
+ }
+}
+
+function remove$1 (event, fn) {
+ target.$off(event, fn);
+}
+
+function updateComponentListeners (
+ vm,
+ listeners,
+ oldListeners
+) {
+ target = vm;
+ updateListeners(listeners, oldListeners || {}, add, remove$1, vm);
+ target = undefined;
+}
+
+function eventsMixin (Vue) {
+ var hookRE = /^hook:/;
+ Vue.prototype.$on = function (event, fn) {
+ var this$1 = this;
+
+ var vm = this;
+ if (Array.isArray(event)) {
+ for (var i = 0, l = event.length; i < l; i++) {
+ this$1.$on(event[i], fn);
+ }
+ } else {
+ (vm._events[event] || (vm._events[event] = [])).push(fn);
+ // optimize hook:event cost by using a boolean flag marked at registration
+ // instead of a hash lookup
+ if (hookRE.test(event)) {
+ vm._hasHookEvent = true;
+ }
+ }
+ return vm
+ };
+
+ Vue.prototype.$once = function (event, fn) {
+ var vm = this;
+ function on () {
+ vm.$off(event, on);
+ fn.apply(vm, arguments);
+ }
+ on.fn = fn;
+ vm.$on(event, on);
+ return vm
+ };
+
+ Vue.prototype.$off = function (event, fn) {
+ var this$1 = this;
+
+ var vm = this;
+ // all
+ if (!arguments.length) {
+ vm._events = Object.create(null);
+ return vm
+ }
+ // array of events
+ if (Array.isArray(event)) {
+ for (var i = 0, l = event.length; i < l; i++) {
+ this$1.$off(event[i], fn);
+ }
+ return vm
+ }
+ // specific event
+ var cbs = vm._events[event];
+ if (!cbs) {
+ return vm
+ }
+ if (!fn) {
+ vm._events[event] = null;
+ return vm
+ }
+ if (fn) {
+ // specific handler
+ var cb;
+ var i$1 = cbs.length;
+ while (i$1--) {
+ cb = cbs[i$1];
+ if (cb === fn || cb.fn === fn) {
+ cbs.splice(i$1, 1);
+ break
+ }
+ }
+ }
+ return vm
+ };
+
+ Vue.prototype.$emit = function (event) {
+ var vm = this;
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var lowerCaseEvent = event.toLowerCase();
+ if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
+ tip(
+ "Event \"" + lowerCaseEvent + "\" is emitted in component " +
+ (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
+ "Note that HTML attributes are case-insensitive and you cannot use " +
+ "v-on to listen to camelCase events when using in-DOM templates. " +
+ "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
+ );
+ }
+ }
+ var cbs = vm._events[event];
+ if (cbs) {
+ cbs = cbs.length > 1 ? toArray(cbs) : cbs;
+ var args = toArray(arguments, 1);
+ for (var i = 0, l = cbs.length; i < l; i++) {
+ try {
+ cbs[i].apply(vm, args);
+ } catch (e) {
+ handleError(e, vm, ("event handler for \"" + event + "\""));
+ }
+ }
+ }
+ return vm
+ };
+}
+
+/* */
+
+
+
+/**
+ * Runtime helper for resolving raw children VNodes into a slot object.
+ */
+function resolveSlots (
+ children,
+ context
+) {
+ var slots = {};
+ if (!children) {
+ return slots
+ }
+ for (var i = 0, l = children.length; i < l; i++) {
+ var child = children[i];
+ var data = child.data;
+ // remove slot attribute if the node is resolved as a Vue slot node
+ if (data && data.attrs && data.attrs.slot) {
+ delete data.attrs.slot;
+ }
+ // named slots should only be respected if the vnode was rendered in the
+ // same context.
+ if ((child.context === context || child.fnContext === context) &&
+ data && data.slot != null
+ ) {
+ var name = data.slot;
+ var slot = (slots[name] || (slots[name] = []));
+ if (child.tag === 'template') {
+ slot.push.apply(slot, child.children || []);
+ } else {
+ slot.push(child);
+ }
+ } else {
+ (slots.default || (slots.default = [])).push(child);
+ }
+ }
+ // ignore slots that contains only whitespace
+ for (var name$1 in slots) {
+ if (slots[name$1].every(isWhitespace)) {
+ delete slots[name$1];
+ }
+ }
+ return slots
+}
+
+function isWhitespace (node) {
+ return (node.isComment && !node.asyncFactory) || node.text === ' '
+}
+
+function resolveScopedSlots (
+ fns, // see flow/vnode
+ res
+) {
+ res = res || {};
+ for (var i = 0; i < fns.length; i++) {
+ if (Array.isArray(fns[i])) {
+ resolveScopedSlots(fns[i], res);
+ } else {
+ res[fns[i].key] = fns[i].fn;
+ }
+ }
+ return res
+}
+
+/* */
+
+var activeInstance = null;
+var isUpdatingChildComponent = false;
+
+function initLifecycle (vm) {
+ var options = vm.$options;
+
+ // locate first non-abstract parent
+ var parent = options.parent;
+ if (parent && !options.abstract) {
+ while (parent.$options.abstract && parent.$parent) {
+ parent = parent.$parent;
+ }
+ parent.$children.push(vm);
+ }
+
+ vm.$parent = parent;
+ vm.$root = parent ? parent.$root : vm;
+
+ vm.$children = [];
+ vm.$refs = {};
+
+ vm._watcher = null;
+ vm._inactive = null;
+ vm._directInactive = false;
+ vm._isMounted = false;
+ vm._isDestroyed = false;
+ vm._isBeingDestroyed = false;
+}
+
+function lifecycleMixin (Vue) {
+ Vue.prototype._update = function (vnode, hydrating) {
+ var vm = this;
+ if (vm._isMounted) {
+ callHook(vm, 'beforeUpdate');
+ }
+ var prevEl = vm.$el;
+ var prevVnode = vm._vnode;
+ var prevActiveInstance = activeInstance;
+ activeInstance = vm;
+ vm._vnode = vnode;
+ // Vue.prototype.__patch__ is injected in entry points
+ // based on the rendering backend used.
+ if (!prevVnode) {
+ // initial render
+ vm.$el = vm.__patch__(
+ vm.$el, vnode, hydrating, false /* removeOnly */,
+ vm.$options._parentElm,
+ vm.$options._refElm
+ );
+ // no need for the ref nodes after initial patch
+ // this prevents keeping a detached DOM tree in memory (#5851)
+ vm.$options._parentElm = vm.$options._refElm = null;
+ } else {
+ // updates
+ vm.$el = vm.__patch__(prevVnode, vnode);
+ }
+ activeInstance = prevActiveInstance;
+ // update __vue__ reference
+ if (prevEl) {
+ prevEl.__vue__ = null;
+ }
+ if (vm.$el) {
+ vm.$el.__vue__ = vm;
+ }
+ // if parent is an HOC, update its $el as well
+ if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
+ vm.$parent.$el = vm.$el;
+ }
+ // updated hook is called by the scheduler to ensure that children are
+ // updated in a parent's updated hook.
+ };
+
+ Vue.prototype.$forceUpdate = function () {
+ var vm = this;
+ if (vm._watcher) {
+ vm._watcher.update();
+ }
+ };
+
+ Vue.prototype.$destroy = function () {
+ var vm = this;
+ if (vm._isBeingDestroyed) {
+ return
+ }
+ callHook(vm, 'beforeDestroy');
+ vm._isBeingDestroyed = true;
+ // remove self from parent
+ var parent = vm.$parent;
+ if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
+ remove(parent.$children, vm);
+ }
+ // teardown watchers
+ if (vm._watcher) {
+ vm._watcher.teardown();
+ }
+ var i = vm._watchers.length;
+ while (i--) {
+ vm._watchers[i].teardown();
+ }
+ // remove reference from data ob
+ // frozen object may not have observer.
+ if (vm._data.__ob__) {
+ vm._data.__ob__.vmCount--;
+ }
+ // call the last hook...
+ vm._isDestroyed = true;
+ // invoke destroy hooks on current rendered tree
+ vm.__patch__(vm._vnode, null);
+ // fire destroyed hook
+ callHook(vm, 'destroyed');
+ // turn off all instance listeners.
+ vm.$off();
+ // remove __vue__ reference
+ if (vm.$el) {
+ vm.$el.__vue__ = null;
+ }
+ // release circular reference (#6759)
+ if (vm.$vnode) {
+ vm.$vnode.parent = null;
+ }
+ };
+}
+
+function mountComponent (
+ vm,
+ el,
+ hydrating
+) {
+ vm.$el = el;
+ if (!vm.$options.render) {
+ vm.$options.render = createEmptyVNode;
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ /* istanbul ignore if */
+ if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
+ vm.$options.el || el) {
+ warn(
+ 'You are using the runtime-only build of Vue where the template ' +
+ 'compiler is not available. Either pre-compile the templates into ' +
+ 'render functions, or use the compiler-included build.',
+ vm
+ );
+ } else {
+ warn(
+ 'Failed to mount component: template or render function not defined.',
+ vm
+ );
+ }
+ }
+ }
+ callHook(vm, 'beforeMount');
+
+ var updateComponent;
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && config.performance && mark) {
+ updateComponent = function () {
+ var name = vm._name;
+ var id = vm._uid;
+ var startTag = "vue-perf-start:" + id;
+ var endTag = "vue-perf-end:" + id;
+
+ mark(startTag);
+ var vnode = vm._render();
+ mark(endTag);
+ measure(("vue " + name + " render"), startTag, endTag);
+
+ mark(startTag);
+ vm._update(vnode, hydrating);
+ mark(endTag);
+ measure(("vue " + name + " patch"), startTag, endTag);
+ };
+ } else {
+ updateComponent = function () {
+ vm._update(vm._render(), hydrating);
+ };
+ }
+
+ // we set this to vm._watcher inside the watcher's constructor
+ // since the watcher's initial patch may call $forceUpdate (e.g. inside child
+ // component's mounted hook), which relies on vm._watcher being already defined
+ new Watcher(vm, updateComponent, noop, null, true /* isRenderWatcher */);
+ hydrating = false;
+
+ // manually mounted instance, call mounted on self
+ // mounted is called for render-created child components in its inserted hook
+ if (vm.$vnode == null) {
+ vm._isMounted = true;
+ callHook(vm, 'mounted');
+ }
+ return vm
+}
+
+function updateChildComponent (
+ vm,
+ propsData,
+ listeners,
+ parentVnode,
+ renderChildren
+) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ isUpdatingChildComponent = true;
+ }
+
+ // determine whether component has slot children
+ // we need to do this before overwriting $options._renderChildren
+ var hasChildren = !!(
+ renderChildren || // has new static slots
+ vm.$options._renderChildren || // has old static slots
+ parentVnode.data.scopedSlots || // has new scoped slots
+ vm.$scopedSlots !== emptyObject // has old scoped slots
+ );
+
+ vm.$options._parentVnode = parentVnode;
+ vm.$vnode = parentVnode; // update vm's placeholder node without re-render
+
+ if (vm._vnode) { // update child tree's parent
+ vm._vnode.parent = parentVnode;
+ }
+ vm.$options._renderChildren = renderChildren;
+
+ // update $attrs and $listeners hash
+ // these are also reactive so they may trigger child update if the child
+ // used them during render
+ vm.$attrs = parentVnode.data.attrs || emptyObject;
+ vm.$listeners = listeners || emptyObject;
+
+ // update props
+ if (propsData && vm.$options.props) {
+ toggleObserving(false);
+ var props = vm._props;
+ var propKeys = vm.$options._propKeys || [];
+ for (var i = 0; i < propKeys.length; i++) {
+ var key = propKeys[i];
+ var propOptions = vm.$options.props; // wtf flow?
+ props[key] = validateProp(key, propOptions, propsData, vm);
+ }
+ toggleObserving(true);
+ // keep a copy of raw propsData
+ vm.$options.propsData = propsData;
+ }
+
+ // update listeners
+ listeners = listeners || emptyObject;
+ var oldListeners = vm.$options._parentListeners;
+ vm.$options._parentListeners = listeners;
+ updateComponentListeners(vm, listeners, oldListeners);
+
+ // resolve slots + force update if has children
+ if (hasChildren) {
+ vm.$slots = resolveSlots(renderChildren, parentVnode.context);
+ vm.$forceUpdate();
+ }
+
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ isUpdatingChildComponent = false;
+ }
+}
+
+function isInInactiveTree (vm) {
+ while (vm && (vm = vm.$parent)) {
+ if (vm._inactive) { return true }
+ }
+ return false
+}
+
+function activateChildComponent (vm, direct) {
+ if (direct) {
+ vm._directInactive = false;
+ if (isInInactiveTree(vm)) {
+ return
+ }
+ } else if (vm._directInactive) {
+ return
+ }
+ if (vm._inactive || vm._inactive === null) {
+ vm._inactive = false;
+ for (var i = 0; i < vm.$children.length; i++) {
+ activateChildComponent(vm.$children[i]);
+ }
+ callHook(vm, 'activated');
+ }
+}
+
+function deactivateChildComponent (vm, direct) {
+ if (direct) {
+ vm._directInactive = true;
+ if (isInInactiveTree(vm)) {
+ return
+ }
+ }
+ if (!vm._inactive) {
+ vm._inactive = true;
+ for (var i = 0; i < vm.$children.length; i++) {
+ deactivateChildComponent(vm.$children[i]);
+ }
+ callHook(vm, 'deactivated');
+ }
+}
+
+function callHook (vm, hook) {
+ // #7573 disable dep collection when invoking lifecycle hooks
+ pushTarget();
+ var handlers = vm.$options[hook];
+ if (handlers) {
+ for (var i = 0, j = handlers.length; i < j; i++) {
+ try {
+ handlers[i].call(vm);
+ } catch (e) {
+ handleError(e, vm, (hook + " hook"));
+ }
+ }
+ }
+ if (vm._hasHookEvent) {
+ vm.$emit('hook:' + hook);
+ }
+ popTarget();
+}
+
+/* */
+
+
+var MAX_UPDATE_COUNT = 100;
+
+var queue = [];
+var activatedChildren = [];
+var has = {};
+var circular = {};
+var waiting = false;
+var flushing = false;
+var index = 0;
+
+/**
+ * Reset the scheduler's state.
+ */
+function resetSchedulerState () {
+ index = queue.length = activatedChildren.length = 0;
+ has = {};
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ circular = {};
+ }
+ waiting = flushing = false;
+}
+
+/**
+ * Flush both queues and run the watchers.
+ */
+function flushSchedulerQueue () {
+ flushing = true;
+ var watcher, id;
+
+ // Sort queue before flush.
+ // This ensures that:
+ // 1. Components are updated from parent to child. (because parent is always
+ // created before the child)
+ // 2. A component's user watchers are run before its render watcher (because
+ // user watchers are created before the render watcher)
+ // 3. If a component is destroyed during a parent component's watcher run,
+ // its watchers can be skipped.
+ queue.sort(function (a, b) { return a.id - b.id; });
+
+ // do not cache length because more watchers might be pushed
+ // as we run existing watchers
+ for (index = 0; index < queue.length; index++) {
+ watcher = queue[index];
+ id = watcher.id;
+ has[id] = null;
+ watcher.run();
+ // in dev build, check and stop circular updates.
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && has[id] != null) {
+ circular[id] = (circular[id] || 0) + 1;
+ if (circular[id] > MAX_UPDATE_COUNT) {
+ warn(
+ 'You may have an infinite update loop ' + (
+ watcher.user
+ ? ("in watcher with expression \"" + (watcher.expression) + "\"")
+ : "in a component render function."
+ ),
+ watcher.vm
+ );
+ break
+ }
+ }
+ }
+
+ // keep copies of post queues before resetting state
+ var activatedQueue = activatedChildren.slice();
+ var updatedQueue = queue.slice();
+
+ resetSchedulerState();
+
+ // call component updated and activated hooks
+ callActivatedHooks(activatedQueue);
+ callUpdatedHooks(updatedQueue);
+
+ // devtool hook
+ /* istanbul ignore if */
+ if (devtools && config.devtools) {
+ devtools.emit('flush');
+ }
+}
+
+function callUpdatedHooks (queue) {
+ var i = queue.length;
+ while (i--) {
+ var watcher = queue[i];
+ var vm = watcher.vm;
+ if (vm._watcher === watcher && vm._isMounted) {
+ callHook(vm, 'updated');
+ }
+ }
+}
+
+/**
+ * Queue a kept-alive component that was activated during patch.
+ * The queue will be processed after the entire tree has been patched.
+ */
+function queueActivatedComponent (vm) {
+ // setting _inactive to false here so that a render function can
+ // rely on checking whether it's in an inactive tree (e.g. router-view)
+ vm._inactive = false;
+ activatedChildren.push(vm);
+}
+
+function callActivatedHooks (queue) {
+ for (var i = 0; i < queue.length; i++) {
+ queue[i]._inactive = true;
+ activateChildComponent(queue[i], true /* true */);
+ }
+}
+
+/**
+ * Push a watcher into the watcher queue.
+ * Jobs with duplicate IDs will be skipped unless it's
+ * pushed when the queue is being flushed.
+ */
+function queueWatcher (watcher) {
+ var id = watcher.id;
+ if (has[id] == null) {
+ has[id] = true;
+ if (!flushing) {
+ queue.push(watcher);
+ } else {
+ // if already flushing, splice the watcher based on its id
+ // if already past its id, it will be run next immediately.
+ var i = queue.length - 1;
+ while (i > index && queue[i].id > watcher.id) {
+ i--;
+ }
+ queue.splice(i + 1, 0, watcher);
+ }
+ // queue the flush
+ if (!waiting) {
+ waiting = true;
+ nextTick(flushSchedulerQueue);
+ }
+ }
+}
+
+/* */
+
+var uid$1 = 0;
+
+/**
+ * A watcher parses an expression, collects dependencies,
+ * and fires callback when the expression value changes.
+ * This is used for both the $watch() api and directives.
+ */
+var Watcher = function Watcher (
+ vm,
+ expOrFn,
+ cb,
+ options,
+ isRenderWatcher
+) {
+ this.vm = vm;
+ if (isRenderWatcher) {
+ vm._watcher = this;
+ }
+ vm._watchers.push(this);
+ // options
+ if (options) {
+ this.deep = !!options.deep;
+ this.user = !!options.user;
+ this.lazy = !!options.lazy;
+ this.sync = !!options.sync;
+ } else {
+ this.deep = this.user = this.lazy = this.sync = false;
+ }
+ this.cb = cb;
+ this.id = ++uid$1; // uid for batching
+ this.active = true;
+ this.dirty = this.lazy; // for lazy watchers
+ this.deps = [];
+ this.newDeps = [];
+ this.depIds = new _Set();
+ this.newDepIds = new _Set();
+ this.expression = Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production'
+ ? expOrFn.toString()
+ : '';
+ // parse expression for getter
+ if (typeof expOrFn === 'function') {
+ this.getter = expOrFn;
+ } else {
+ this.getter = parsePath(expOrFn);
+ if (!this.getter) {
+ this.getter = function () {};
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ "Failed watching path: \"" + expOrFn + "\" " +
+ 'Watcher only accepts simple dot-delimited paths. ' +
+ 'For full control, use a function instead.',
+ vm
+ );
+ }
+ }
+ this.value = this.lazy
+ ? undefined
+ : this.get();
+};
+
+/**
+ * Evaluate the getter, and re-collect dependencies.
+ */
+Watcher.prototype.get = function get () {
+ pushTarget(this);
+ var value;
+ var vm = this.vm;
+ try {
+ value = this.getter.call(vm, vm);
+ } catch (e) {
+ if (this.user) {
+ handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
+ } else {
+ throw e
+ }
+ } finally {
+ // "touch" every property so they are all tracked as
+ // dependencies for deep watching
+ if (this.deep) {
+ traverse(value);
+ }
+ popTarget();
+ this.cleanupDeps();
+ }
+ return value
+};
+
+/**
+ * Add a dependency to this directive.
+ */
+Watcher.prototype.addDep = function addDep (dep) {
+ var id = dep.id;
+ if (!this.newDepIds.has(id)) {
+ this.newDepIds.add(id);
+ this.newDeps.push(dep);
+ if (!this.depIds.has(id)) {
+ dep.addSub(this);
+ }
+ }
+};
+
+/**
+ * Clean up for dependency collection.
+ */
+Watcher.prototype.cleanupDeps = function cleanupDeps () {
+ var this$1 = this;
+
+ var i = this.deps.length;
+ while (i--) {
+ var dep = this$1.deps[i];
+ if (!this$1.newDepIds.has(dep.id)) {
+ dep.removeSub(this$1);
+ }
+ }
+ var tmp = this.depIds;
+ this.depIds = this.newDepIds;
+ this.newDepIds = tmp;
+ this.newDepIds.clear();
+ tmp = this.deps;
+ this.deps = this.newDeps;
+ this.newDeps = tmp;
+ this.newDeps.length = 0;
+};
+
+/**
+ * Subscriber interface.
+ * Will be called when a dependency changes.
+ */
+Watcher.prototype.update = function update () {
+ /* istanbul ignore else */
+ if (this.lazy) {
+ this.dirty = true;
+ } else if (this.sync) {
+ this.run();
+ } else {
+ queueWatcher(this);
+ }
+};
+
+/**
+ * Scheduler job interface.
+ * Will be called by the scheduler.
+ */
+Watcher.prototype.run = function run () {
+ if (this.active) {
+ var value = this.get();
+ if (
+ value !== this.value ||
+ // Deep watchers and watchers on Object/Arrays should fire even
+ // when the value is the same, because the value may
+ // have mutated.
+ isObject(value) ||
+ this.deep
+ ) {
+ // set new value
+ var oldValue = this.value;
+ this.value = value;
+ if (this.user) {
+ try {
+ this.cb.call(this.vm, value, oldValue);
+ } catch (e) {
+ handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
+ }
+ } else {
+ this.cb.call(this.vm, value, oldValue);
+ }
+ }
+ }
+};
+
+/**
+ * Evaluate the value of the watcher.
+ * This only gets called for lazy watchers.
+ */
+Watcher.prototype.evaluate = function evaluate () {
+ this.value = this.get();
+ this.dirty = false;
+};
+
+/**
+ * Depend on all deps collected by this watcher.
+ */
+Watcher.prototype.depend = function depend () {
+ var this$1 = this;
+
+ var i = this.deps.length;
+ while (i--) {
+ this$1.deps[i].depend();
+ }
+};
+
+/**
+ * Remove self from all dependencies' subscriber list.
+ */
+Watcher.prototype.teardown = function teardown () {
+ var this$1 = this;
+
+ if (this.active) {
+ // remove self from vm's watcher list
+ // this is a somewhat expensive operation so we skip it
+ // if the vm is being destroyed.
+ if (!this.vm._isBeingDestroyed) {
+ remove(this.vm._watchers, this);
+ }
+ var i = this.deps.length;
+ while (i--) {
+ this$1.deps[i].removeSub(this$1);
+ }
+ this.active = false;
+ }
+};
+
+/* */
+
+var sharedPropertyDefinition = {
+ enumerable: true,
+ configurable: true,
+ get: noop,
+ set: noop
+};
+
+function proxy (target, sourceKey, key) {
+ sharedPropertyDefinition.get = function proxyGetter () {
+ return this[sourceKey][key]
+ };
+ sharedPropertyDefinition.set = function proxySetter (val) {
+ this[sourceKey][key] = val;
+ };
+ Object.defineProperty(target, key, sharedPropertyDefinition);
+}
+
+function initState (vm) {
+ vm._watchers = [];
+ var opts = vm.$options;
+ if (opts.props) { initProps(vm, opts.props); }
+ if (opts.methods) { initMethods(vm, opts.methods); }
+ if (opts.data) {
+ initData(vm);
+ } else {
+ observe(vm._data = {}, true /* asRootData */);
+ }
+ if (opts.computed) { initComputed(vm, opts.computed); }
+ if (opts.watch && opts.watch !== nativeWatch) {
+ initWatch(vm, opts.watch);
+ }
+}
+
+function initProps (vm, propsOptions) {
+ var propsData = vm.$options.propsData || {};
+ var props = vm._props = {};
+ // cache prop keys so that future props updates can iterate using Array
+ // instead of dynamic object key enumeration.
+ var keys = vm.$options._propKeys = [];
+ var isRoot = !vm.$parent;
+ // root instance props should be converted
+ if (!isRoot) {
+ toggleObserving(false);
+ }
+ var loop = function ( key ) {
+ keys.push(key);
+ var value = validateProp(key, propsOptions, propsData, vm);
+ /* istanbul ignore else */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ var hyphenatedKey = hyphenate(key);
+ if (isReservedAttribute(hyphenatedKey) ||
+ config.isReservedAttr(hyphenatedKey)) {
+ warn(
+ ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
+ vm
+ );
+ }
+ defineReactive(props, key, value, function () {
+ if (vm.$parent && !isUpdatingChildComponent) {
+ warn(
+ "Avoid mutating a prop directly since the value will be " +
+ "overwritten whenever the parent component re-renders. " +
+ "Instead, use a data or computed property based on the prop's " +
+ "value. Prop being mutated: \"" + key + "\"",
+ vm
+ );
+ }
+ });
+ } else {
+ defineReactive(props, key, value);
+ }
+ // static props are already proxied on the component's prototype
+ // during Vue.extend(). We only need to proxy props defined at
+ // instantiation here.
+ if (!(key in vm)) {
+ proxy(vm, "_props", key);
+ }
+ };
+
+ for (var key in propsOptions) loop( key );
+ toggleObserving(true);
+}
+
+function initData (vm) {
+ var data = vm.$options.data;
+ data = vm._data = typeof data === 'function'
+ ? getData(data, vm)
+ : data || {};
+ if (!isPlainObject(data)) {
+ data = {};
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'data functions should return an object:\n' +
+ 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
+ vm
+ );
+ }
+ // proxy data on instance
+ var keys = Object.keys(data);
+ var props = vm.$options.props;
+ var methods = vm.$options.methods;
+ var i = keys.length;
+ while (i--) {
+ var key = keys[i];
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (methods && hasOwn(methods, key)) {
+ warn(
+ ("Method \"" + key + "\" has already been defined as a data property."),
+ vm
+ );
+ }
+ }
+ if (props && hasOwn(props, key)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ "The data property \"" + key + "\" is already declared as a prop. " +
+ "Use prop default value instead.",
+ vm
+ );
+ } else if (!isReserved(key)) {
+ proxy(vm, "_data", key);
+ }
+ }
+ // observe data
+ observe(data, true /* asRootData */);
+}
+
+function getData (data, vm) {
+ // #7573 disable dep collection when invoking data getters
+ pushTarget();
+ try {
+ return data.call(vm, vm)
+ } catch (e) {
+ handleError(e, vm, "data()");
+ return {}
+ } finally {
+ popTarget();
+ }
+}
+
+var computedWatcherOptions = { lazy: true };
+
+function initComputed (vm, computed) {
+ // $flow-disable-line
+ var watchers = vm._computedWatchers = Object.create(null);
+ // computed properties are just getters during SSR
+ var isSSR = isServerRendering();
+
+ for (var key in computed) {
+ var userDef = computed[key];
+ var getter = typeof userDef === 'function' ? userDef : userDef.get;
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && getter == null) {
+ warn(
+ ("Getter is missing for computed property \"" + key + "\"."),
+ vm
+ );
+ }
+
+ if (!isSSR) {
+ // create internal watcher for the computed property.
+ watchers[key] = new Watcher(
+ vm,
+ getter || noop,
+ noop,
+ computedWatcherOptions
+ );
+ }
+
+ // component-defined computed properties are already defined on the
+ // component prototype. We only need to define computed properties defined
+ // at instantiation here.
+ if (!(key in vm)) {
+ defineComputed(vm, key, userDef);
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (key in vm.$data) {
+ warn(("The computed property \"" + key + "\" is already defined in data."), vm);
+ } else if (vm.$options.props && key in vm.$options.props) {
+ warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
+ }
+ }
+ }
+}
+
+function defineComputed (
+ target,
+ key,
+ userDef
+) {
+ var shouldCache = !isServerRendering();
+ if (typeof userDef === 'function') {
+ sharedPropertyDefinition.get = shouldCache
+ ? createComputedGetter(key)
+ : userDef;
+ sharedPropertyDefinition.set = noop;
+ } else {
+ sharedPropertyDefinition.get = userDef.get
+ ? shouldCache && userDef.cache !== false
+ ? createComputedGetter(key)
+ : userDef.get
+ : noop;
+ sharedPropertyDefinition.set = userDef.set
+ ? userDef.set
+ : noop;
+ }
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ sharedPropertyDefinition.set === noop) {
+ sharedPropertyDefinition.set = function () {
+ warn(
+ ("Computed property \"" + key + "\" was assigned to but it has no setter."),
+ this
+ );
+ };
+ }
+ Object.defineProperty(target, key, sharedPropertyDefinition);
+}
+
+function createComputedGetter (key) {
+ return function computedGetter () {
+ var watcher = this._computedWatchers && this._computedWatchers[key];
+ if (watcher) {
+ if (watcher.dirty) {
+ watcher.evaluate();
+ }
+ if (Dep.target) {
+ watcher.depend();
+ }
+ return watcher.value
+ }
+ }
+}
+
+function initMethods (vm, methods) {
+ var props = vm.$options.props;
+ for (var key in methods) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (methods[key] == null) {
+ warn(
+ "Method \"" + key + "\" has an undefined value in the component definition. " +
+ "Did you reference the function correctly?",
+ vm
+ );
+ }
+ if (props && hasOwn(props, key)) {
+ warn(
+ ("Method \"" + key + "\" has already been defined as a prop."),
+ vm
+ );
+ }
+ if ((key in vm) && isReserved(key)) {
+ warn(
+ "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
+ "Avoid defining component methods that start with _ or $."
+ );
+ }
+ }
+ vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
+ }
+}
+
+function initWatch (vm, watch) {
+ for (var key in watch) {
+ var handler = watch[key];
+ if (Array.isArray(handler)) {
+ for (var i = 0; i < handler.length; i++) {
+ createWatcher(vm, key, handler[i]);
+ }
+ } else {
+ createWatcher(vm, key, handler);
+ }
+ }
+}
+
+function createWatcher (
+ vm,
+ expOrFn,
+ handler,
+ options
+) {
+ if (isPlainObject(handler)) {
+ options = handler;
+ handler = handler.handler;
+ }
+ if (typeof handler === 'string') {
+ handler = vm[handler];
+ }
+ return vm.$watch(expOrFn, handler, options)
+}
+
+function stateMixin (Vue) {
+ // flow somehow has problems with directly declared definition object
+ // when using Object.defineProperty, so we have to procedurally build up
+ // the object here.
+ var dataDef = {};
+ dataDef.get = function () { return this._data };
+ var propsDef = {};
+ propsDef.get = function () { return this._props };
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ dataDef.set = function (newData) {
+ warn(
+ 'Avoid replacing instance root $data. ' +
+ 'Use nested data properties instead.',
+ this
+ );
+ };
+ propsDef.set = function () {
+ warn("$props is readonly.", this);
+ };
+ }
+ Object.defineProperty(Vue.prototype, '$data', dataDef);
+ Object.defineProperty(Vue.prototype, '$props', propsDef);
+
+ Vue.prototype.$set = set;
+ Vue.prototype.$delete = del;
+
+ Vue.prototype.$watch = function (
+ expOrFn,
+ cb,
+ options
+ ) {
+ var vm = this;
+ if (isPlainObject(cb)) {
+ return createWatcher(vm, expOrFn, cb, options)
+ }
+ options = options || {};
+ options.user = true;
+ var watcher = new Watcher(vm, expOrFn, cb, options);
+ if (options.immediate) {
+ cb.call(vm, watcher.value);
+ }
+ return function unwatchFn () {
+ watcher.teardown();
+ }
+ };
+}
+
+/* */
+
+function initProvide (vm) {
+ var provide = vm.$options.provide;
+ if (provide) {
+ vm._provided = typeof provide === 'function'
+ ? provide.call(vm)
+ : provide;
+ }
+}
+
+function initInjections (vm) {
+ var result = resolveInject(vm.$options.inject, vm);
+ if (result) {
+ toggleObserving(false);
+ Object.keys(result).forEach(function (key) {
+ /* istanbul ignore else */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ defineReactive(vm, key, result[key], function () {
+ warn(
+ "Avoid mutating an injected value directly since the changes will be " +
+ "overwritten whenever the provided component re-renders. " +
+ "injection being mutated: \"" + key + "\"",
+ vm
+ );
+ });
+ } else {
+ defineReactive(vm, key, result[key]);
+ }
+ });
+ toggleObserving(true);
+ }
+}
+
+function resolveInject (inject, vm) {
+ if (inject) {
+ // inject is :any because flow is not smart enough to figure out cached
+ var result = Object.create(null);
+ var keys = hasSymbol
+ ? Reflect.ownKeys(inject).filter(function (key) {
+ /* istanbul ignore next */
+ return Object.getOwnPropertyDescriptor(inject, key).enumerable
+ })
+ : Object.keys(inject);
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ var provideKey = inject[key].from;
+ var source = vm;
+ while (source) {
+ if (source._provided && hasOwn(source._provided, provideKey)) {
+ result[key] = source._provided[provideKey];
+ break
+ }
+ source = source.$parent;
+ }
+ if (!source) {
+ if ('default' in inject[key]) {
+ var provideDefault = inject[key].default;
+ result[key] = typeof provideDefault === 'function'
+ ? provideDefault.call(vm)
+ : provideDefault;
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(("Injection \"" + key + "\" not found"), vm);
+ }
+ }
+ }
+ return result
+ }
+}
+
+/* */
+
+/**
+ * Runtime helper for rendering v-for lists.
+ */
+function renderList (
+ val,
+ render
+) {
+ var ret, i, l, keys, key;
+ if (Array.isArray(val) || typeof val === 'string') {
+ ret = new Array(val.length);
+ for (i = 0, l = val.length; i < l; i++) {
+ ret[i] = render(val[i], i);
+ }
+ } else if (typeof val === 'number') {
+ ret = new Array(val);
+ for (i = 0; i < val; i++) {
+ ret[i] = render(i + 1, i);
+ }
+ } else if (isObject(val)) {
+ keys = Object.keys(val);
+ ret = new Array(keys.length);
+ for (i = 0, l = keys.length; i < l; i++) {
+ key = keys[i];
+ ret[i] = render(val[key], key, i);
+ }
+ }
+ if (isDef(ret)) {
+ (ret)._isVList = true;
+ }
+ return ret
+}
+
+/* */
+
+/**
+ * Runtime helper for rendering
+ */
+function renderSlot (
+ name,
+ fallback,
+ props,
+ bindObject
+) {
+ var scopedSlotFn = this.$scopedSlots[name];
+ var nodes;
+ if (scopedSlotFn) { // scoped slot
+ props = props || {};
+ if (bindObject) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && !isObject(bindObject)) {
+ warn(
+ 'slot v-bind without argument expects an Object',
+ this
+ );
+ }
+ props = extend(extend({}, bindObject), props);
+ }
+ nodes = scopedSlotFn(props) || fallback;
+ } else {
+ var slotNodes = this.$slots[name];
+ // warn duplicate slot usage
+ if (slotNodes) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && slotNodes._rendered) {
+ warn(
+ "Duplicate presence of slot \"" + name + "\" found in the same render tree " +
+ "- this will likely cause render errors.",
+ this
+ );
+ }
+ slotNodes._rendered = true;
+ }
+ nodes = slotNodes || fallback;
+ }
+
+ var target = props && props.slot;
+ if (target) {
+ return this.$createElement('template', { slot: target }, nodes)
+ } else {
+ return nodes
+ }
+}
+
+/* */
+
+/**
+ * Runtime helper for resolving filters
+ */
+function resolveFilter (id) {
+ return resolveAsset(this.$options, 'filters', id, true) || identity
+}
+
+/* */
+
+function isKeyNotMatch (expect, actual) {
+ if (Array.isArray(expect)) {
+ return expect.indexOf(actual) === -1
+ } else {
+ return expect !== actual
+ }
+}
+
+/**
+ * Runtime helper for checking keyCodes from config.
+ * exposed as Vue.prototype._k
+ * passing in eventKeyName as last argument separately for backwards compat
+ */
+function checkKeyCodes (
+ eventKeyCode,
+ key,
+ builtInKeyCode,
+ eventKeyName,
+ builtInKeyName
+) {
+ var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
+ if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
+ return isKeyNotMatch(builtInKeyName, eventKeyName)
+ } else if (mappedKeyCode) {
+ return isKeyNotMatch(mappedKeyCode, eventKeyCode)
+ } else if (eventKeyName) {
+ return hyphenate(eventKeyName) !== key
+ }
+}
+
+/* */
+
+/**
+ * Runtime helper for merging v-bind="object" into a VNode's data.
+ */
+function bindObjectProps (
+ data,
+ tag,
+ value,
+ asProp,
+ isSync
+) {
+ if (value) {
+ if (!isObject(value)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'v-bind without argument expects an Object or Array value',
+ this
+ );
+ } else {
+ if (Array.isArray(value)) {
+ value = toObject(value);
+ }
+ var hash;
+ var loop = function ( key ) {
+ if (
+ key === 'class' ||
+ key === 'style' ||
+ isReservedAttribute(key)
+ ) {
+ hash = data;
+ } else {
+ var type = data.attrs && data.attrs.type;
+ hash = asProp || config.mustUseProp(tag, type, key)
+ ? data.domProps || (data.domProps = {})
+ : data.attrs || (data.attrs = {});
+ }
+ if (!(key in hash)) {
+ hash[key] = value[key];
+
+ if (isSync) {
+ var on = data.on || (data.on = {});
+ on[("update:" + key)] = function ($event) {
+ value[key] = $event;
+ };
+ }
+ }
+ };
+
+ for (var key in value) loop( key );
+ }
+ }
+ return data
+}
+
+/* */
+
+/**
+ * Runtime helper for rendering static trees.
+ */
+function renderStatic (
+ index,
+ isInFor
+) {
+ var cached = this._staticTrees || (this._staticTrees = []);
+ var tree = cached[index];
+ // if has already-rendered static tree and not inside v-for,
+ // we can reuse the same tree.
+ if (tree && !isInFor) {
+ return tree
+ }
+ // otherwise, render a fresh tree.
+ tree = cached[index] = this.$options.staticRenderFns[index].call(
+ this._renderProxy,
+ null,
+ this // for render fns generated for functional component templates
+ );
+ markStatic(tree, ("__static__" + index), false);
+ return tree
+}
+
+/**
+ * Runtime helper for v-once.
+ * Effectively it means marking the node as static with a unique key.
+ */
+function markOnce (
+ tree,
+ index,
+ key
+) {
+ markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
+ return tree
+}
+
+function markStatic (
+ tree,
+ key,
+ isOnce
+) {
+ if (Array.isArray(tree)) {
+ for (var i = 0; i < tree.length; i++) {
+ if (tree[i] && typeof tree[i] !== 'string') {
+ markStaticNode(tree[i], (key + "_" + i), isOnce);
+ }
+ }
+ } else {
+ markStaticNode(tree, key, isOnce);
+ }
+}
+
+function markStaticNode (node, key, isOnce) {
+ node.isStatic = true;
+ node.key = key;
+ node.isOnce = isOnce;
+}
+
+/* */
+
+function bindObjectListeners (data, value) {
+ if (value) {
+ if (!isPlainObject(value)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'v-on without argument expects an Object value',
+ this
+ );
+ } else {
+ var on = data.on = data.on ? extend({}, data.on) : {};
+ for (var key in value) {
+ var existing = on[key];
+ var ours = value[key];
+ on[key] = existing ? [].concat(existing, ours) : ours;
+ }
+ }
+ }
+ return data
+}
+
+/* */
+
+function installRenderHelpers (target) {
+ target._o = markOnce;
+ target._n = toNumber;
+ target._s = toString;
+ target._l = renderList;
+ target._t = renderSlot;
+ target._q = looseEqual;
+ target._i = looseIndexOf;
+ target._m = renderStatic;
+ target._f = resolveFilter;
+ target._k = checkKeyCodes;
+ target._b = bindObjectProps;
+ target._v = createTextVNode;
+ target._e = createEmptyVNode;
+ target._u = resolveScopedSlots;
+ target._g = bindObjectListeners;
+}
+
+/* */
+
+function FunctionalRenderContext (
+ data,
+ props,
+ children,
+ parent,
+ Ctor
+) {
+ var options = Ctor.options;
+ // ensure the createElement function in functional components
+ // gets a unique context - this is necessary for correct named slot check
+ var contextVm;
+ if (hasOwn(parent, '_uid')) {
+ contextVm = Object.create(parent);
+ // $flow-disable-line
+ contextVm._original = parent;
+ } else {
+ // the context vm passed in is a functional context as well.
+ // in this case we want to make sure we are able to get a hold to the
+ // real context instance.
+ contextVm = parent;
+ // $flow-disable-line
+ parent = parent._original;
+ }
+ var isCompiled = isTrue(options._compiled);
+ var needNormalization = !isCompiled;
+
+ this.data = data;
+ this.props = props;
+ this.children = children;
+ this.parent = parent;
+ this.listeners = data.on || emptyObject;
+ this.injections = resolveInject(options.inject, parent);
+ this.slots = function () { return resolveSlots(children, parent); };
+
+ // support for compiled functional template
+ if (isCompiled) {
+ // exposing $options for renderStatic()
+ this.$options = options;
+ // pre-resolve slots for renderSlot()
+ this.$slots = this.slots();
+ this.$scopedSlots = data.scopedSlots || emptyObject;
+ }
+
+ if (options._scopeId) {
+ this._c = function (a, b, c, d) {
+ var vnode = createElement(contextVm, a, b, c, d, needNormalization);
+ if (vnode && !Array.isArray(vnode)) {
+ vnode.fnScopeId = options._scopeId;
+ vnode.fnContext = parent;
+ }
+ return vnode
+ };
+ } else {
+ this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
+ }
+}
+
+installRenderHelpers(FunctionalRenderContext.prototype);
+
+function createFunctionalComponent (
+ Ctor,
+ propsData,
+ data,
+ contextVm,
+ children
+) {
+ var options = Ctor.options;
+ var props = {};
+ var propOptions = options.props;
+ if (isDef(propOptions)) {
+ for (var key in propOptions) {
+ props[key] = validateProp(key, propOptions, propsData || emptyObject);
+ }
+ } else {
+ if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
+ if (isDef(data.props)) { mergeProps(props, data.props); }
+ }
+
+ var renderContext = new FunctionalRenderContext(
+ data,
+ props,
+ children,
+ contextVm,
+ Ctor
+ );
+
+ var vnode = options.render.call(null, renderContext._c, renderContext);
+
+ if (vnode instanceof VNode) {
+ return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)
+ } else if (Array.isArray(vnode)) {
+ var vnodes = normalizeChildren(vnode) || [];
+ var res = new Array(vnodes.length);
+ for (var i = 0; i < vnodes.length; i++) {
+ res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options);
+ }
+ return res
+ }
+}
+
+function cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {
+ // #7817 clone node before setting fnContext, otherwise if the node is reused
+ // (e.g. it was from a cached normal slot) the fnContext causes named slots
+ // that should not be matched to match.
+ var clone = cloneVNode(vnode);
+ clone.fnContext = contextVm;
+ clone.fnOptions = options;
+ if (data.slot) {
+ (clone.data || (clone.data = {})).slot = data.slot;
+ }
+ return clone
+}
+
+function mergeProps (to, from) {
+ for (var key in from) {
+ to[camelize(key)] = from[key];
+ }
+}
+
+/* */
+
+
+
+
+// Register the component hook to weex native render engine.
+// The hook will be triggered by native, not javascript.
+
+
+// Updates the state of the component to weex native render engine.
+
+/* */
+
+// https://github.com/Hanks10100/weex-native-directive/tree/master/component
+
+// listening on native callback
+
+/* */
+
+/* */
+
+// inline hooks to be invoked on component VNodes during patch
+var componentVNodeHooks = {
+ init: function init (
+ vnode,
+ hydrating,
+ parentElm,
+ refElm
+ ) {
+ if (
+ vnode.componentInstance &&
+ !vnode.componentInstance._isDestroyed &&
+ vnode.data.keepAlive
+ ) {
+ // kept-alive components, treat as a patch
+ var mountedNode = vnode; // work around flow
+ componentVNodeHooks.prepatch(mountedNode, mountedNode);
+ } else {
+ var child = vnode.componentInstance = createComponentInstanceForVnode(
+ vnode,
+ activeInstance,
+ parentElm,
+ refElm
+ );
+ child.$mount(hydrating ? vnode.elm : undefined, hydrating);
+ }
+ },
+
+ prepatch: function prepatch (oldVnode, vnode) {
+ var options = vnode.componentOptions;
+ var child = vnode.componentInstance = oldVnode.componentInstance;
+ updateChildComponent(
+ child,
+ options.propsData, // updated props
+ options.listeners, // updated listeners
+ vnode, // new parent vnode
+ options.children // new children
+ );
+ },
+
+ insert: function insert (vnode) {
+ var context = vnode.context;
+ var componentInstance = vnode.componentInstance;
+ if (!componentInstance._isMounted) {
+ componentInstance._isMounted = true;
+ callHook(componentInstance, 'mounted');
+ }
+ if (vnode.data.keepAlive) {
+ if (context._isMounted) {
+ // vue-router#1212
+ // During updates, a kept-alive component's child components may
+ // change, so directly walking the tree here may call activated hooks
+ // on incorrect children. Instead we push them into a queue which will
+ // be processed after the whole patch process ended.
+ queueActivatedComponent(componentInstance);
+ } else {
+ activateChildComponent(componentInstance, true /* direct */);
+ }
+ }
+ },
+
+ destroy: function destroy (vnode) {
+ var componentInstance = vnode.componentInstance;
+ if (!componentInstance._isDestroyed) {
+ if (!vnode.data.keepAlive) {
+ componentInstance.$destroy();
+ } else {
+ deactivateChildComponent(componentInstance, true /* direct */);
+ }
+ }
+ }
+};
+
+var hooksToMerge = Object.keys(componentVNodeHooks);
+
+function createComponent (
+ Ctor,
+ data,
+ context,
+ children,
+ tag
+) {
+ if (isUndef(Ctor)) {
+ return
+ }
+
+ var baseCtor = context.$options._base;
+
+ // plain options object: turn it into a constructor
+ if (isObject(Ctor)) {
+ Ctor = baseCtor.extend(Ctor);
+ }
+
+ // if at this stage it's not a constructor or an async component factory,
+ // reject.
+ if (typeof Ctor !== 'function') {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(("Invalid Component definition: " + (String(Ctor))), context);
+ }
+ return
+ }
+
+ // async component
+ var asyncFactory;
+ if (isUndef(Ctor.cid)) {
+ asyncFactory = Ctor;
+ Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context);
+ if (Ctor === undefined) {
+ // return a placeholder node for async component, which is rendered
+ // as a comment node but preserves all the raw information for the node.
+ // the information will be used for async server-rendering and hydration.
+ return createAsyncPlaceholder(
+ asyncFactory,
+ data,
+ context,
+ children,
+ tag
+ )
+ }
+ }
+
+ data = data || {};
+
+ // resolve constructor options in case global mixins are applied after
+ // component constructor creation
+ resolveConstructorOptions(Ctor);
+
+ // transform component v-model data into props & events
+ if (isDef(data.model)) {
+ transformModel(Ctor.options, data);
+ }
+
+ // extract props
+ var propsData = extractPropsFromVNodeData(data, Ctor, tag);
+
+ // functional component
+ if (isTrue(Ctor.options.functional)) {
+ return createFunctionalComponent(Ctor, propsData, data, context, children)
+ }
+
+ // extract listeners, since these needs to be treated as
+ // child component listeners instead of DOM listeners
+ var listeners = data.on;
+ // replace with listeners with .native modifier
+ // so it gets processed during parent component patch.
+ data.on = data.nativeOn;
+
+ if (isTrue(Ctor.options.abstract)) {
+ // abstract components do not keep anything
+ // other than props & listeners & slot
+
+ // work around flow
+ var slot = data.slot;
+ data = {};
+ if (slot) {
+ data.slot = slot;
+ }
+ }
+
+ // install component management hooks onto the placeholder node
+ installComponentHooks(data);
+
+ // return a placeholder vnode
+ var name = Ctor.options.name || tag;
+ var vnode = new VNode(
+ ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
+ data, undefined, undefined, undefined, context,
+ { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
+ asyncFactory
+ );
+
+ // Weex specific: invoke recycle-list optimized @render function for
+ // extracting cell-slot template.
+ // https://github.com/Hanks10100/weex-native-directive/tree/master/component
+ /* istanbul ignore if */
+ return vnode
+}
+
+function createComponentInstanceForVnode (
+ vnode, // we know it's MountedComponentVNode but flow doesn't
+ parent, // activeInstance in lifecycle state
+ parentElm,
+ refElm
+) {
+ var options = {
+ _isComponent: true,
+ parent: parent,
+ _parentVnode: vnode,
+ _parentElm: parentElm || null,
+ _refElm: refElm || null
+ };
+ // check inline-template render functions
+ var inlineTemplate = vnode.data.inlineTemplate;
+ if (isDef(inlineTemplate)) {
+ options.render = inlineTemplate.render;
+ options.staticRenderFns = inlineTemplate.staticRenderFns;
+ }
+ return new vnode.componentOptions.Ctor(options)
+}
+
+function installComponentHooks (data) {
+ var hooks = data.hook || (data.hook = {});
+ for (var i = 0; i < hooksToMerge.length; i++) {
+ var key = hooksToMerge[i];
+ hooks[key] = componentVNodeHooks[key];
+ }
+}
+
+// transform component v-model info (value and callback) into
+// prop and event handler respectively.
+function transformModel (options, data) {
+ var prop = (options.model && options.model.prop) || 'value';
+ var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;
+ var on = data.on || (data.on = {});
+ if (isDef(on[event])) {
+ on[event] = [data.model.callback].concat(on[event]);
+ } else {
+ on[event] = data.model.callback;
+ }
+}
+
+/* */
+
+var SIMPLE_NORMALIZE = 1;
+var ALWAYS_NORMALIZE = 2;
+
+// wrapper function for providing a more flexible interface
+// without getting yelled at by flow
+function createElement (
+ context,
+ tag,
+ data,
+ children,
+ normalizationType,
+ alwaysNormalize
+) {
+ if (Array.isArray(data) || isPrimitive(data)) {
+ normalizationType = children;
+ children = data;
+ data = undefined;
+ }
+ if (isTrue(alwaysNormalize)) {
+ normalizationType = ALWAYS_NORMALIZE;
+ }
+ return _createElement(context, tag, data, children, normalizationType)
+}
+
+function _createElement (
+ context,
+ tag,
+ data,
+ children,
+ normalizationType
+) {
+ if (isDef(data) && isDef((data).__ob__)) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
+ 'Always create fresh vnode data objects in each render!',
+ context
+ );
+ return createEmptyVNode()
+ }
+ // object syntax in v-bind
+ if (isDef(data) && isDef(data.is)) {
+ tag = data.is;
+ }
+ if (!tag) {
+ // in case of component :is set to falsy value
+ return createEmptyVNode()
+ }
+ // warn against non-primitive key
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ isDef(data) && isDef(data.key) && !isPrimitive(data.key)
+ ) {
+ {
+ warn(
+ 'Avoid using non-primitive value as key, ' +
+ 'use string/number value instead.',
+ context
+ );
+ }
+ }
+ // support single function children as default scoped slot
+ if (Array.isArray(children) &&
+ typeof children[0] === 'function'
+ ) {
+ data = data || {};
+ data.scopedSlots = { default: children[0] };
+ children.length = 0;
+ }
+ if (normalizationType === ALWAYS_NORMALIZE) {
+ children = normalizeChildren(children);
+ } else if (normalizationType === SIMPLE_NORMALIZE) {
+ children = simpleNormalizeChildren(children);
+ }
+ var vnode, ns;
+ if (typeof tag === 'string') {
+ var Ctor;
+ ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
+ if (config.isReservedTag(tag)) {
+ // platform built-in elements
+ vnode = new VNode(
+ config.parsePlatformTagName(tag), data, children,
+ undefined, undefined, context
+ );
+ } else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
+ // component
+ vnode = createComponent(Ctor, data, context, children, tag);
+ } else {
+ // unknown or unlisted namespaced elements
+ // check at runtime because it may get assigned a namespace when its
+ // parent normalizes children
+ vnode = new VNode(
+ tag, data, children,
+ undefined, undefined, context
+ );
+ }
+ } else {
+ // direct component options / constructor
+ vnode = createComponent(tag, data, context, children);
+ }
+ if (Array.isArray(vnode)) {
+ return vnode
+ } else if (isDef(vnode)) {
+ if (isDef(ns)) { applyNS(vnode, ns); }
+ if (isDef(data)) { registerDeepBindings(data); }
+ return vnode
+ } else {
+ return createEmptyVNode()
+ }
+}
+
+function applyNS (vnode, ns, force) {
+ vnode.ns = ns;
+ if (vnode.tag === 'foreignObject') {
+ // use default namespace inside foreignObject
+ ns = undefined;
+ force = true;
+ }
+ if (isDef(vnode.children)) {
+ for (var i = 0, l = vnode.children.length; i < l; i++) {
+ var child = vnode.children[i];
+ if (isDef(child.tag) && (
+ isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
+ applyNS(child, ns, force);
+ }
+ }
+ }
+}
+
+// ref #5318
+// necessary to ensure parent re-render when deep bindings like :style and
+// :class are used on slot nodes
+function registerDeepBindings (data) {
+ if (isObject(data.style)) {
+ traverse(data.style);
+ }
+ if (isObject(data.class)) {
+ traverse(data.class);
+ }
+}
+
+/* */
+
+function initRender (vm) {
+ vm._vnode = null; // the root of the child tree
+ vm._staticTrees = null; // v-once cached trees
+ var options = vm.$options;
+ var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
+ var renderContext = parentVnode && parentVnode.context;
+ vm.$slots = resolveSlots(options._renderChildren, renderContext);
+ vm.$scopedSlots = emptyObject;
+ // bind the createElement fn to this instance
+ // so that we get proper render context inside it.
+ // args order: tag, data, children, normalizationType, alwaysNormalize
+ // internal version is used by render functions compiled from templates
+ vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
+ // normalization is always applied for the public version, used in
+ // user-written render functions.
+ vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
+
+ // $attrs & $listeners are exposed for easier HOC creation.
+ // they need to be reactive so that HOCs using them are always updated
+ var parentData = parentVnode && parentVnode.data;
+
+ /* istanbul ignore else */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
+ !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
+ }, true);
+ defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
+ !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
+ }, true);
+ } else {
+ defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);
+ defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);
+ }
+}
+
+function renderMixin (Vue) {
+ // install runtime convenience helpers
+ installRenderHelpers(Vue.prototype);
+
+ Vue.prototype.$nextTick = function (fn) {
+ return nextTick(fn, this)
+ };
+
+ Vue.prototype._render = function () {
+ var vm = this;
+ var ref = vm.$options;
+ var render = ref.render;
+ var _parentVnode = ref._parentVnode;
+
+ // reset _rendered flag on slots for duplicate slot check
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ for (var key in vm.$slots) {
+ // $flow-disable-line
+ vm.$slots[key]._rendered = false;
+ }
+ }
+
+ if (_parentVnode) {
+ vm.$scopedSlots = _parentVnode.data.scopedSlots || emptyObject;
+ }
+
+ // set parent vnode. this allows render functions to have access
+ // to the data on the placeholder node.
+ vm.$vnode = _parentVnode;
+ // render self
+ var vnode;
+ try {
+ vnode = render.call(vm._renderProxy, vm.$createElement);
+ } catch (e) {
+ handleError(e, vm, "render");
+ // return error render result,
+ // or previous vnode to prevent render error causing blank component
+ /* istanbul ignore else */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (vm.$options.renderError) {
+ try {
+ vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
+ } catch (e) {
+ handleError(e, vm, "renderError");
+ vnode = vm._vnode;
+ }
+ } else {
+ vnode = vm._vnode;
+ }
+ } else {
+ vnode = vm._vnode;
+ }
+ }
+ // return empty vnode in case the render function errored out
+ if (!(vnode instanceof VNode)) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && Array.isArray(vnode)) {
+ warn(
+ 'Multiple root nodes returned from render function. Render function ' +
+ 'should return a single root node.',
+ vm
+ );
+ }
+ vnode = createEmptyVNode();
+ }
+ // set parent
+ vnode.parent = _parentVnode;
+ return vnode
+ };
+}
+
+/* */
+
+var uid$3 = 0;
+
+function initMixin (Vue) {
+ Vue.prototype._init = function (options) {
+ var vm = this;
+ // a uid
+ vm._uid = uid$3++;
+
+ var startTag, endTag;
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && config.performance && mark) {
+ startTag = "vue-perf-start:" + (vm._uid);
+ endTag = "vue-perf-end:" + (vm._uid);
+ mark(startTag);
+ }
+
+ // a flag to avoid this being observed
+ vm._isVue = true;
+ // merge options
+ if (options && options._isComponent) {
+ // optimize internal component instantiation
+ // since dynamic options merging is pretty slow, and none of the
+ // internal component options needs special treatment.
+ initInternalComponent(vm, options);
+ } else {
+ vm.$options = mergeOptions(
+ resolveConstructorOptions(vm.constructor),
+ options || {},
+ vm
+ );
+ }
+ /* istanbul ignore else */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ initProxy(vm);
+ } else {
+ vm._renderProxy = vm;
+ }
+ // expose real self
+ vm._self = vm;
+ initLifecycle(vm);
+ initEvents(vm);
+ initRender(vm);
+ callHook(vm, 'beforeCreate');
+ initInjections(vm); // resolve injections before data/props
+ initState(vm);
+ initProvide(vm); // resolve provide after data/props
+ callHook(vm, 'created');
+
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && config.performance && mark) {
+ vm._name = formatComponentName(vm, false);
+ mark(endTag);
+ measure(("vue " + (vm._name) + " init"), startTag, endTag);
+ }
+
+ if (vm.$options.el) {
+ vm.$mount(vm.$options.el);
+ }
+ };
+}
+
+function initInternalComponent (vm, options) {
+ var opts = vm.$options = Object.create(vm.constructor.options);
+ // doing this because it's faster than dynamic enumeration.
+ var parentVnode = options._parentVnode;
+ opts.parent = options.parent;
+ opts._parentVnode = parentVnode;
+ opts._parentElm = options._parentElm;
+ opts._refElm = options._refElm;
+
+ var vnodeComponentOptions = parentVnode.componentOptions;
+ opts.propsData = vnodeComponentOptions.propsData;
+ opts._parentListeners = vnodeComponentOptions.listeners;
+ opts._renderChildren = vnodeComponentOptions.children;
+ opts._componentTag = vnodeComponentOptions.tag;
+
+ if (options.render) {
+ opts.render = options.render;
+ opts.staticRenderFns = options.staticRenderFns;
+ }
+}
+
+function resolveConstructorOptions (Ctor) {
+ var options = Ctor.options;
+ if (Ctor.super) {
+ var superOptions = resolveConstructorOptions(Ctor.super);
+ var cachedSuperOptions = Ctor.superOptions;
+ if (superOptions !== cachedSuperOptions) {
+ // super option changed,
+ // need to resolve new options.
+ Ctor.superOptions = superOptions;
+ // check if there are any late-modified/attached options (#4976)
+ var modifiedOptions = resolveModifiedOptions(Ctor);
+ // update base extend options
+ if (modifiedOptions) {
+ extend(Ctor.extendOptions, modifiedOptions);
+ }
+ options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
+ if (options.name) {
+ options.components[options.name] = Ctor;
+ }
+ }
+ }
+ return options
+}
+
+function resolveModifiedOptions (Ctor) {
+ var modified;
+ var latest = Ctor.options;
+ var extended = Ctor.extendOptions;
+ var sealed = Ctor.sealedOptions;
+ for (var key in latest) {
+ if (latest[key] !== sealed[key]) {
+ if (!modified) { modified = {}; }
+ modified[key] = dedupe(latest[key], extended[key], sealed[key]);
+ }
+ }
+ return modified
+}
+
+function dedupe (latest, extended, sealed) {
+ // compare latest and sealed to ensure lifecycle hooks won't be duplicated
+ // between merges
+ if (Array.isArray(latest)) {
+ var res = [];
+ sealed = Array.isArray(sealed) ? sealed : [sealed];
+ extended = Array.isArray(extended) ? extended : [extended];
+ for (var i = 0; i < latest.length; i++) {
+ // push original options and not sealed options to exclude duplicated options
+ if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {
+ res.push(latest[i]);
+ }
+ }
+ return res
+ } else {
+ return latest
+ }
+}
+
+function Vue (options) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ !(this instanceof Vue)
+ ) {
+ warn('Vue is a constructor and should be called with the `new` keyword');
+ }
+ this._init(options);
+}
+
+initMixin(Vue);
+stateMixin(Vue);
+eventsMixin(Vue);
+lifecycleMixin(Vue);
+renderMixin(Vue);
+
+/* */
+
+function initUse (Vue) {
+ Vue.use = function (plugin) {
+ var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
+ if (installedPlugins.indexOf(plugin) > -1) {
+ return this
+ }
+
+ // additional parameters
+ var args = toArray(arguments, 1);
+ args.unshift(this);
+ if (typeof plugin.install === 'function') {
+ plugin.install.apply(plugin, args);
+ } else if (typeof plugin === 'function') {
+ plugin.apply(null, args);
+ }
+ installedPlugins.push(plugin);
+ return this
+ };
+}
+
+/* */
+
+function initMixin$1 (Vue) {
+ Vue.mixin = function (mixin) {
+ this.options = mergeOptions(this.options, mixin);
+ return this
+ };
+}
+
+/* */
+
+function initExtend (Vue) {
+ /**
+ * Each instance constructor, including Vue, has a unique
+ * cid. This enables us to create wrapped "child
+ * constructors" for prototypal inheritance and cache them.
+ */
+ Vue.cid = 0;
+ var cid = 1;
+
+ /**
+ * Class inheritance
+ */
+ Vue.extend = function (extendOptions) {
+ extendOptions = extendOptions || {};
+ var Super = this;
+ var SuperId = Super.cid;
+ var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
+ if (cachedCtors[SuperId]) {
+ return cachedCtors[SuperId]
+ }
+
+ var name = extendOptions.name || Super.options.name;
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && name) {
+ validateComponentName(name);
+ }
+
+ var Sub = function VueComponent (options) {
+ this._init(options);
+ };
+ Sub.prototype = Object.create(Super.prototype);
+ Sub.prototype.constructor = Sub;
+ Sub.cid = cid++;
+ Sub.options = mergeOptions(
+ Super.options,
+ extendOptions
+ );
+ Sub['super'] = Super;
+
+ // For props and computed properties, we define the proxy getters on
+ // the Vue instances at extension time, on the extended prototype. This
+ // avoids Object.defineProperty calls for each instance created.
+ if (Sub.options.props) {
+ initProps$1(Sub);
+ }
+ if (Sub.options.computed) {
+ initComputed$1(Sub);
+ }
+
+ // allow further extension/mixin/plugin usage
+ Sub.extend = Super.extend;
+ Sub.mixin = Super.mixin;
+ Sub.use = Super.use;
+
+ // create asset registers, so extended classes
+ // can have their private assets too.
+ ASSET_TYPES.forEach(function (type) {
+ Sub[type] = Super[type];
+ });
+ // enable recursive self-lookup
+ if (name) {
+ Sub.options.components[name] = Sub;
+ }
+
+ // keep a reference to the super options at extension time.
+ // later at instantiation we can check if Super's options have
+ // been updated.
+ Sub.superOptions = Super.options;
+ Sub.extendOptions = extendOptions;
+ Sub.sealedOptions = extend({}, Sub.options);
+
+ // cache constructor
+ cachedCtors[SuperId] = Sub;
+ return Sub
+ };
+}
+
+function initProps$1 (Comp) {
+ var props = Comp.options.props;
+ for (var key in props) {
+ proxy(Comp.prototype, "_props", key);
+ }
+}
+
+function initComputed$1 (Comp) {
+ var computed = Comp.options.computed;
+ for (var key in computed) {
+ defineComputed(Comp.prototype, key, computed[key]);
+ }
+}
+
+/* */
+
+function initAssetRegisters (Vue) {
+ /**
+ * Create asset registration methods.
+ */
+ ASSET_TYPES.forEach(function (type) {
+ Vue[type] = function (
+ id,
+ definition
+ ) {
+ if (!definition) {
+ return this.options[type + 's'][id]
+ } else {
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && type === 'component') {
+ validateComponentName(id);
+ }
+ if (type === 'component' && isPlainObject(definition)) {
+ definition.name = definition.name || id;
+ definition = this.options._base.extend(definition);
+ }
+ if (type === 'directive' && typeof definition === 'function') {
+ definition = { bind: definition, update: definition };
+ }
+ this.options[type + 's'][id] = definition;
+ return definition
+ }
+ };
+ });
+}
+
+/* */
+
+function getComponentName (opts) {
+ return opts && (opts.Ctor.options.name || opts.tag)
+}
+
+function matches (pattern, name) {
+ if (Array.isArray(pattern)) {
+ return pattern.indexOf(name) > -1
+ } else if (typeof pattern === 'string') {
+ return pattern.split(',').indexOf(name) > -1
+ } else if (isRegExp(pattern)) {
+ return pattern.test(name)
+ }
+ /* istanbul ignore next */
+ return false
+}
+
+function pruneCache (keepAliveInstance, filter) {
+ var cache = keepAliveInstance.cache;
+ var keys = keepAliveInstance.keys;
+ var _vnode = keepAliveInstance._vnode;
+ for (var key in cache) {
+ var cachedNode = cache[key];
+ if (cachedNode) {
+ var name = getComponentName(cachedNode.componentOptions);
+ if (name && !filter(name)) {
+ pruneCacheEntry(cache, key, keys, _vnode);
+ }
+ }
+ }
+}
+
+function pruneCacheEntry (
+ cache,
+ key,
+ keys,
+ current
+) {
+ var cached$$1 = cache[key];
+ if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
+ cached$$1.componentInstance.$destroy();
+ }
+ cache[key] = null;
+ remove(keys, key);
+}
+
+var patternTypes = [String, RegExp, Array];
+
+var KeepAlive = {
+ name: 'keep-alive',
+ abstract: true,
+
+ props: {
+ include: patternTypes,
+ exclude: patternTypes,
+ max: [String, Number]
+ },
+
+ created: function created () {
+ this.cache = Object.create(null);
+ this.keys = [];
+ },
+
+ destroyed: function destroyed () {
+ var this$1 = this;
+
+ for (var key in this$1.cache) {
+ pruneCacheEntry(this$1.cache, key, this$1.keys);
+ }
+ },
+
+ mounted: function mounted () {
+ var this$1 = this;
+
+ this.$watch('include', function (val) {
+ pruneCache(this$1, function (name) { return matches(val, name); });
+ });
+ this.$watch('exclude', function (val) {
+ pruneCache(this$1, function (name) { return !matches(val, name); });
+ });
+ },
+
+ render: function render () {
+ var slot = this.$slots.default;
+ var vnode = getFirstComponentChild(slot);
+ var componentOptions = vnode && vnode.componentOptions;
+ if (componentOptions) {
+ // check pattern
+ var name = getComponentName(componentOptions);
+ var ref = this;
+ var include = ref.include;
+ var exclude = ref.exclude;
+ if (
+ // not included
+ (include && (!name || !matches(include, name))) ||
+ // excluded
+ (exclude && name && matches(exclude, name))
+ ) {
+ return vnode
+ }
+
+ var ref$1 = this;
+ var cache = ref$1.cache;
+ var keys = ref$1.keys;
+ var key = vnode.key == null
+ // same constructor may get registered as different local components
+ // so cid alone is not enough (#3269)
+ ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
+ : vnode.key;
+ if (cache[key]) {
+ vnode.componentInstance = cache[key].componentInstance;
+ // make current key freshest
+ remove(keys, key);
+ keys.push(key);
+ } else {
+ cache[key] = vnode;
+ keys.push(key);
+ // prune oldest entry
+ if (this.max && keys.length > parseInt(this.max)) {
+ pruneCacheEntry(cache, keys[0], keys, this._vnode);
+ }
+ }
+
+ vnode.data.keepAlive = true;
+ }
+ return vnode || (slot && slot[0])
+ }
+}
+
+var builtInComponents = {
+ KeepAlive: KeepAlive
+}
+
+/* */
+
+function initGlobalAPI (Vue) {
+ // config
+ var configDef = {};
+ configDef.get = function () { return config; };
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ configDef.set = function () {
+ warn(
+ 'Do not replace the Vue.config object, set individual fields instead.'
+ );
+ };
+ }
+ Object.defineProperty(Vue, 'config', configDef);
+
+ // exposed util methods.
+ // NOTE: these are not considered part of the public API - avoid relying on
+ // them unless you are aware of the risk.
+ Vue.util = {
+ warn: warn,
+ extend: extend,
+ mergeOptions: mergeOptions,
+ defineReactive: defineReactive
+ };
+
+ Vue.set = set;
+ Vue.delete = del;
+ Vue.nextTick = nextTick;
+
+ Vue.options = Object.create(null);
+ ASSET_TYPES.forEach(function (type) {
+ Vue.options[type + 's'] = Object.create(null);
+ });
+
+ // this is used to identify the "base" constructor to extend all plain-object
+ // components with in Weex's multi-instance scenarios.
+ Vue.options._base = Vue;
+
+ extend(Vue.options.components, builtInComponents);
+
+ initUse(Vue);
+ initMixin$1(Vue);
+ initExtend(Vue);
+ initAssetRegisters(Vue);
+}
+
+initGlobalAPI(Vue);
+
+Object.defineProperty(Vue.prototype, '$isServer', {
+ get: isServerRendering
+});
+
+Object.defineProperty(Vue.prototype, '$ssrContext', {
+ get: function get () {
+ /* istanbul ignore next */
+ return this.$vnode && this.$vnode.ssrContext
+ }
+});
+
+// expose FunctionalRenderContext for ssr runtime helper installation
+Object.defineProperty(Vue, 'FunctionalRenderContext', {
+ value: FunctionalRenderContext
+});
+
+Vue.version = '2.5.16';
+
+/* */
+
+// these are reserved for web because they are directly compiled away
+// during template compilation
+var isReservedAttr = makeMap('style,class');
+
+// attributes that should be using props for binding
+var acceptValue = makeMap('input,textarea,option,select,progress');
+var mustUseProp = function (tag, type, attr) {
+ return (
+ (attr === 'value' && acceptValue(tag)) && type !== 'button' ||
+ (attr === 'selected' && tag === 'option') ||
+ (attr === 'checked' && tag === 'input') ||
+ (attr === 'muted' && tag === 'video')
+ )
+};
+
+var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
+
+var isBooleanAttr = makeMap(
+ 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
+ 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
+ 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
+ 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
+ 'required,reversed,scoped,seamless,selected,sortable,translate,' +
+ 'truespeed,typemustmatch,visible'
+);
+
+var xlinkNS = 'http://www.w3.org/1999/xlink';
+
+var isXlink = function (name) {
+ return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
+};
+
+var getXlinkProp = function (name) {
+ return isXlink(name) ? name.slice(6, name.length) : ''
+};
+
+var isFalsyAttrValue = function (val) {
+ return val == null || val === false
+};
+
+/* */
+
+function genClassForVnode (vnode) {
+ var data = vnode.data;
+ var parentNode = vnode;
+ var childNode = vnode;
+ while (isDef(childNode.componentInstance)) {
+ childNode = childNode.componentInstance._vnode;
+ if (childNode && childNode.data) {
+ data = mergeClassData(childNode.data, data);
+ }
+ }
+ while (isDef(parentNode = parentNode.parent)) {
+ if (parentNode && parentNode.data) {
+ data = mergeClassData(data, parentNode.data);
+ }
+ }
+ return renderClass(data.staticClass, data.class)
+}
+
+function mergeClassData (child, parent) {
+ return {
+ staticClass: concat(child.staticClass, parent.staticClass),
+ class: isDef(child.class)
+ ? [child.class, parent.class]
+ : parent.class
+ }
+}
+
+function renderClass (
+ staticClass,
+ dynamicClass
+) {
+ if (isDef(staticClass) || isDef(dynamicClass)) {
+ return concat(staticClass, stringifyClass(dynamicClass))
+ }
+ /* istanbul ignore next */
+ return ''
+}
+
+function concat (a, b) {
+ return a ? b ? (a + ' ' + b) : a : (b || '')
+}
+
+function stringifyClass (value) {
+ if (Array.isArray(value)) {
+ return stringifyArray(value)
+ }
+ if (isObject(value)) {
+ return stringifyObject(value)
+ }
+ if (typeof value === 'string') {
+ return value
+ }
+ /* istanbul ignore next */
+ return ''
+}
+
+function stringifyArray (value) {
+ var res = '';
+ var stringified;
+ for (var i = 0, l = value.length; i < l; i++) {
+ if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
+ if (res) { res += ' '; }
+ res += stringified;
+ }
+ }
+ return res
+}
+
+function stringifyObject (value) {
+ var res = '';
+ for (var key in value) {
+ if (value[key]) {
+ if (res) { res += ' '; }
+ res += key;
+ }
+ }
+ return res
+}
+
+/* */
+
+var namespaceMap = {
+ svg: 'http://www.w3.org/2000/svg',
+ math: 'http://www.w3.org/1998/Math/MathML'
+};
+
+var isHTMLTag = makeMap(
+ 'html,body,base,head,link,meta,style,title,' +
+ 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
+ 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
+ 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
+ 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
+ 'embed,object,param,source,canvas,script,noscript,del,ins,' +
+ 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
+ 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
+ 'output,progress,select,textarea,' +
+ 'details,dialog,menu,menuitem,summary,' +
+ 'content,element,shadow,template,blockquote,iframe,tfoot'
+);
+
+// this map is intentionally selective, only covering SVG elements that may
+// contain child elements.
+var isSVG = makeMap(
+ 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
+ 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
+ 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
+ true
+);
+
+
+
+var isReservedTag = function (tag) {
+ return isHTMLTag(tag) || isSVG(tag)
+};
+
+function getTagNamespace (tag) {
+ if (isSVG(tag)) {
+ return 'svg'
+ }
+ // basic support for MathML
+ // note it doesn't support other MathML elements being component roots
+ if (tag === 'math') {
+ return 'math'
+ }
+}
+
+var unknownElementCache = Object.create(null);
+function isUnknownElement (tag) {
+ /* istanbul ignore if */
+ if (!inBrowser) {
+ return true
+ }
+ if (isReservedTag(tag)) {
+ return false
+ }
+ tag = tag.toLowerCase();
+ /* istanbul ignore if */
+ if (unknownElementCache[tag] != null) {
+ return unknownElementCache[tag]
+ }
+ var el = document.createElement(tag);
+ if (tag.indexOf('-') > -1) {
+ // http://stackoverflow.com/a/28210364/1070244
+ return (unknownElementCache[tag] = (
+ el.constructor === window.HTMLUnknownElement ||
+ el.constructor === window.HTMLElement
+ ))
+ } else {
+ return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
+ }
+}
+
+var isTextInputType = makeMap('text,number,password,search,email,tel,url');
+
+/* */
+
+/**
+ * Query an element selector if it's not an element already.
+ */
+function query (el) {
+ if (typeof el === 'string') {
+ var selected = document.querySelector(el);
+ if (!selected) {
+ Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && warn(
+ 'Cannot find element: ' + el
+ );
+ return document.createElement('div')
+ }
+ return selected
+ } else {
+ return el
+ }
+}
+
+/* */
+
+function createElement$1 (tagName, vnode) {
+ var elm = document.createElement(tagName);
+ if (tagName !== 'select') {
+ return elm
+ }
+ // false or null will remove the attribute but undefined will not
+ if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
+ elm.setAttribute('multiple', 'multiple');
+ }
+ return elm
+}
+
+function createElementNS (namespace, tagName) {
+ return document.createElementNS(namespaceMap[namespace], tagName)
+}
+
+function createTextNode (text) {
+ return document.createTextNode(text)
+}
+
+function createComment (text) {
+ return document.createComment(text)
+}
+
+function insertBefore (parentNode, newNode, referenceNode) {
+ parentNode.insertBefore(newNode, referenceNode);
+}
+
+function removeChild (node, child) {
+ node.removeChild(child);
+}
+
+function appendChild (node, child) {
+ node.appendChild(child);
+}
+
+function parentNode (node) {
+ return node.parentNode
+}
+
+function nextSibling (node) {
+ return node.nextSibling
+}
+
+function tagName (node) {
+ return node.tagName
+}
+
+function setTextContent (node, text) {
+ node.textContent = text;
+}
+
+function setStyleScope (node, scopeId) {
+ node.setAttribute(scopeId, '');
+}
+
+
+var nodeOps = Object.freeze({
+ createElement: createElement$1,
+ createElementNS: createElementNS,
+ createTextNode: createTextNode,
+ createComment: createComment,
+ insertBefore: insertBefore,
+ removeChild: removeChild,
+ appendChild: appendChild,
+ parentNode: parentNode,
+ nextSibling: nextSibling,
+ tagName: tagName,
+ setTextContent: setTextContent,
+ setStyleScope: setStyleScope
+});
+
+/* */
+
+var ref = {
+ create: function create (_, vnode) {
+ registerRef(vnode);
+ },
+ update: function update (oldVnode, vnode) {
+ if (oldVnode.data.ref !== vnode.data.ref) {
+ registerRef(oldVnode, true);
+ registerRef(vnode);
+ }
+ },
+ destroy: function destroy (vnode) {
+ registerRef(vnode, true);
+ }
+}
+
+function registerRef (vnode, isRemoval) {
+ var key = vnode.data.ref;
+ if (!isDef(key)) { return }
+
+ var vm = vnode.context;
+ var ref = vnode.componentInstance || vnode.elm;
+ var refs = vm.$refs;
+ if (isRemoval) {
+ if (Array.isArray(refs[key])) {
+ remove(refs[key], ref);
+ } else if (refs[key] === ref) {
+ refs[key] = undefined;
+ }
+ } else {
+ if (vnode.data.refInFor) {
+ if (!Array.isArray(refs[key])) {
+ refs[key] = [ref];
+ } else if (refs[key].indexOf(ref) < 0) {
+ // $flow-disable-line
+ refs[key].push(ref);
+ }
+ } else {
+ refs[key] = ref;
+ }
+ }
+}
+
+/**
+ * Virtual DOM patching algorithm based on Snabbdom by
+ * Simon Friis Vindum (@paldepind)
+ * Licensed under the MIT License
+ * https://github.com/paldepind/snabbdom/blob/master/LICENSE
+ *
+ * modified by Evan You (@yyx990803)
+ *
+ * Not type-checking this because this file is perf-critical and the cost
+ * of making flow understand it is not worth it.
+ */
+
+var emptyNode = new VNode('', {}, []);
+
+var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
+
+function sameVnode (a, b) {
+ return (
+ a.key === b.key && (
+ (
+ a.tag === b.tag &&
+ a.isComment === b.isComment &&
+ isDef(a.data) === isDef(b.data) &&
+ sameInputType(a, b)
+ ) || (
+ isTrue(a.isAsyncPlaceholder) &&
+ a.asyncFactory === b.asyncFactory &&
+ isUndef(b.asyncFactory.error)
+ )
+ )
+ )
+}
+
+function sameInputType (a, b) {
+ if (a.tag !== 'input') { return true }
+ var i;
+ var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
+ var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
+ return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)
+}
+
+function createKeyToOldIdx (children, beginIdx, endIdx) {
+ var i, key;
+ var map = {};
+ for (i = beginIdx; i <= endIdx; ++i) {
+ key = children[i].key;
+ if (isDef(key)) { map[key] = i; }
+ }
+ return map
+}
+
+function createPatchFunction (backend) {
+ var i, j;
+ var cbs = {};
+
+ var modules = backend.modules;
+ var nodeOps = backend.nodeOps;
+
+ for (i = 0; i < hooks.length; ++i) {
+ cbs[hooks[i]] = [];
+ for (j = 0; j < modules.length; ++j) {
+ if (isDef(modules[j][hooks[i]])) {
+ cbs[hooks[i]].push(modules[j][hooks[i]]);
+ }
+ }
+ }
+
+ function emptyNodeAt (elm) {
+ return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
+ }
+
+ function createRmCb (childElm, listeners) {
+ function remove () {
+ if (--remove.listeners === 0) {
+ removeNode(childElm);
+ }
+ }
+ remove.listeners = listeners;
+ return remove
+ }
+
+ function removeNode (el) {
+ var parent = nodeOps.parentNode(el);
+ // element may have already been removed due to v-html / v-text
+ if (isDef(parent)) {
+ nodeOps.removeChild(parent, el);
+ }
+ }
+
+ function isUnknownElement$$1 (vnode, inVPre) {
+ return (
+ !inVPre &&
+ !vnode.ns &&
+ !(
+ config.ignoredElements.length &&
+ config.ignoredElements.some(function (ignore) {
+ return isRegExp(ignore)
+ ? ignore.test(vnode.tag)
+ : ignore === vnode.tag
+ })
+ ) &&
+ config.isUnknownElement(vnode.tag)
+ )
+ }
+
+ var creatingElmInVPre = 0;
+
+ function createElm (
+ vnode,
+ insertedVnodeQueue,
+ parentElm,
+ refElm,
+ nested,
+ ownerArray,
+ index
+ ) {
+ if (isDef(vnode.elm) && isDef(ownerArray)) {
+ // This vnode was used in a previous render!
+ // now it's used as a new node, overwriting its elm would cause
+ // potential patch errors down the road when it's used as an insertion
+ // reference node. Instead, we clone the node on-demand before creating
+ // associated DOM element for it.
+ vnode = ownerArray[index] = cloneVNode(vnode);
+ }
+
+ vnode.isRootInsert = !nested; // for transition enter check
+ if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
+ return
+ }
+
+ var data = vnode.data;
+ var children = vnode.children;
+ var tag = vnode.tag;
+ if (isDef(tag)) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (data && data.pre) {
+ creatingElmInVPre++;
+ }
+ if (isUnknownElement$$1(vnode, creatingElmInVPre)) {
+ warn(
+ 'Unknown custom element: <' + tag + '> - did you ' +
+ 'register the component correctly? For recursive components, ' +
+ 'make sure to provide the "name" option.',
+ vnode.context
+ );
+ }
+ }
+
+ vnode.elm = vnode.ns
+ ? nodeOps.createElementNS(vnode.ns, tag)
+ : nodeOps.createElement(tag, vnode);
+ setScope(vnode);
+
+ /* istanbul ignore if */
+ {
+ createChildren(vnode, children, insertedVnodeQueue);
+ if (isDef(data)) {
+ invokeCreateHooks(vnode, insertedVnodeQueue);
+ }
+ insert(parentElm, vnode.elm, refElm);
+ }
+
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' && data && data.pre) {
+ creatingElmInVPre--;
+ }
+ } else if (isTrue(vnode.isComment)) {
+ vnode.elm = nodeOps.createComment(vnode.text);
+ insert(parentElm, vnode.elm, refElm);
+ } else {
+ vnode.elm = nodeOps.createTextNode(vnode.text);
+ insert(parentElm, vnode.elm, refElm);
+ }
+ }
+
+ function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
+ var i = vnode.data;
+ if (isDef(i)) {
+ var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
+ if (isDef(i = i.hook) && isDef(i = i.init)) {
+ i(vnode, false /* hydrating */, parentElm, refElm);
+ }
+ // after calling the init hook, if the vnode is a child component
+ // it should've created a child instance and mounted it. the child
+ // component also has set the placeholder vnode's elm.
+ // in that case we can just return the element and be done.
+ if (isDef(vnode.componentInstance)) {
+ initComponent(vnode, insertedVnodeQueue);
+ if (isTrue(isReactivated)) {
+ reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
+ }
+ return true
+ }
+ }
+ }
+
+ function initComponent (vnode, insertedVnodeQueue) {
+ if (isDef(vnode.data.pendingInsert)) {
+ insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
+ vnode.data.pendingInsert = null;
+ }
+ vnode.elm = vnode.componentInstance.$el;
+ if (isPatchable(vnode)) {
+ invokeCreateHooks(vnode, insertedVnodeQueue);
+ setScope(vnode);
+ } else {
+ // empty component root.
+ // skip all element-related modules except for ref (#3455)
+ registerRef(vnode);
+ // make sure to invoke the insert hook
+ insertedVnodeQueue.push(vnode);
+ }
+ }
+
+ function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
+ var i;
+ // hack for #4339: a reactivated component with inner transition
+ // does not trigger because the inner node's created hooks are not called
+ // again. It's not ideal to involve module-specific logic in here but
+ // there doesn't seem to be a better way to do it.
+ var innerNode = vnode;
+ while (innerNode.componentInstance) {
+ innerNode = innerNode.componentInstance._vnode;
+ if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
+ for (i = 0; i < cbs.activate.length; ++i) {
+ cbs.activate[i](emptyNode, innerNode);
+ }
+ insertedVnodeQueue.push(innerNode);
+ break
+ }
+ }
+ // unlike a newly created component,
+ // a reactivated keep-alive component doesn't insert itself
+ insert(parentElm, vnode.elm, refElm);
+ }
+
+ function insert (parent, elm, ref$$1) {
+ if (isDef(parent)) {
+ if (isDef(ref$$1)) {
+ if (ref$$1.parentNode === parent) {
+ nodeOps.insertBefore(parent, elm, ref$$1);
+ }
+ } else {
+ nodeOps.appendChild(parent, elm);
+ }
+ }
+ }
+
+ function createChildren (vnode, children, insertedVnodeQueue) {
+ if (Array.isArray(children)) {
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ checkDuplicateKeys(children);
+ }
+ for (var i = 0; i < children.length; ++i) {
+ createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
+ }
+ } else if (isPrimitive(vnode.text)) {
+ nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
+ }
+ }
+
+ function isPatchable (vnode) {
+ while (vnode.componentInstance) {
+ vnode = vnode.componentInstance._vnode;
+ }
+ return isDef(vnode.tag)
+ }
+
+ function invokeCreateHooks (vnode, insertedVnodeQueue) {
+ for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
+ cbs.create[i$1](emptyNode, vnode);
+ }
+ i = vnode.data.hook; // Reuse variable
+ if (isDef(i)) {
+ if (isDef(i.create)) { i.create(emptyNode, vnode); }
+ if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }
+ }
+ }
+
+ // set scope id attribute for scoped CSS.
+ // this is implemented as a special case to avoid the overhead
+ // of going through the normal attribute patching process.
+ function setScope (vnode) {
+ var i;
+ if (isDef(i = vnode.fnScopeId)) {
+ nodeOps.setStyleScope(vnode.elm, i);
+ } else {
+ var ancestor = vnode;
+ while (ancestor) {
+ if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
+ nodeOps.setStyleScope(vnode.elm, i);
+ }
+ ancestor = ancestor.parent;
+ }
+ }
+ // for slot content they should also get the scopeId from the host instance.
+ if (isDef(i = activeInstance) &&
+ i !== vnode.context &&
+ i !== vnode.fnContext &&
+ isDef(i = i.$options._scopeId)
+ ) {
+ nodeOps.setStyleScope(vnode.elm, i);
+ }
+ }
+
+ function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
+ for (; startIdx <= endIdx; ++startIdx) {
+ createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
+ }
+ }
+
+ function invokeDestroyHook (vnode) {
+ var i, j;
+ var data = vnode.data;
+ if (isDef(data)) {
+ if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }
+ for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }
+ }
+ if (isDef(i = vnode.children)) {
+ for (j = 0; j < vnode.children.length; ++j) {
+ invokeDestroyHook(vnode.children[j]);
+ }
+ }
+ }
+
+ function removeVnodes (parentElm, vnodes, startIdx, endIdx) {
+ for (; startIdx <= endIdx; ++startIdx) {
+ var ch = vnodes[startIdx];
+ if (isDef(ch)) {
+ if (isDef(ch.tag)) {
+ removeAndInvokeRemoveHook(ch);
+ invokeDestroyHook(ch);
+ } else { // Text node
+ removeNode(ch.elm);
+ }
+ }
+ }
+ }
+
+ function removeAndInvokeRemoveHook (vnode, rm) {
+ if (isDef(rm) || isDef(vnode.data)) {
+ var i;
+ var listeners = cbs.remove.length + 1;
+ if (isDef(rm)) {
+ // we have a recursively passed down rm callback
+ // increase the listeners count
+ rm.listeners += listeners;
+ } else {
+ // directly removing
+ rm = createRmCb(vnode.elm, listeners);
+ }
+ // recursively invoke hooks on child component root node
+ if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {
+ removeAndInvokeRemoveHook(i, rm);
+ }
+ for (i = 0; i < cbs.remove.length; ++i) {
+ cbs.remove[i](vnode, rm);
+ }
+ if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {
+ i(vnode, rm);
+ } else {
+ rm();
+ }
+ } else {
+ removeNode(vnode.elm);
+ }
+ }
+
+ function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
+ var oldStartIdx = 0;
+ var newStartIdx = 0;
+ var oldEndIdx = oldCh.length - 1;
+ var oldStartVnode = oldCh[0];
+ var oldEndVnode = oldCh[oldEndIdx];
+ var newEndIdx = newCh.length - 1;
+ var newStartVnode = newCh[0];
+ var newEndVnode = newCh[newEndIdx];
+ var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
+
+ // removeOnly is a special flag used only by
+ // to ensure removed elements stay in correct relative positions
+ // during leaving transitions
+ var canMove = !removeOnly;
+
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ checkDuplicateKeys(newCh);
+ }
+
+ while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
+ if (isUndef(oldStartVnode)) {
+ oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
+ } else if (isUndef(oldEndVnode)) {
+ oldEndVnode = oldCh[--oldEndIdx];
+ } else if (sameVnode(oldStartVnode, newStartVnode)) {
+ patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);
+ oldStartVnode = oldCh[++oldStartIdx];
+ newStartVnode = newCh[++newStartIdx];
+ } else if (sameVnode(oldEndVnode, newEndVnode)) {
+ patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);
+ oldEndVnode = oldCh[--oldEndIdx];
+ newEndVnode = newCh[--newEndIdx];
+ } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
+ patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);
+ canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
+ oldStartVnode = oldCh[++oldStartIdx];
+ newEndVnode = newCh[--newEndIdx];
+ } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
+ patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);
+ canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
+ oldEndVnode = oldCh[--oldEndIdx];
+ newStartVnode = newCh[++newStartIdx];
+ } else {
+ if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
+ idxInOld = isDef(newStartVnode.key)
+ ? oldKeyToIdx[newStartVnode.key]
+ : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
+ if (isUndef(idxInOld)) { // New element
+ createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
+ } else {
+ vnodeToMove = oldCh[idxInOld];
+ if (sameVnode(vnodeToMove, newStartVnode)) {
+ patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue);
+ oldCh[idxInOld] = undefined;
+ canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
+ } else {
+ // same key but different element. treat as new element
+ createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
+ }
+ }
+ newStartVnode = newCh[++newStartIdx];
+ }
+ }
+ if (oldStartIdx > oldEndIdx) {
+ refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
+ addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
+ } else if (newStartIdx > newEndIdx) {
+ removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
+ }
+ }
+
+ function checkDuplicateKeys (children) {
+ var seenKeys = {};
+ for (var i = 0; i < children.length; i++) {
+ var vnode = children[i];
+ var key = vnode.key;
+ if (isDef(key)) {
+ if (seenKeys[key]) {
+ warn(
+ ("Duplicate keys detected: '" + key + "'. This may cause an update error."),
+ vnode.context
+ );
+ } else {
+ seenKeys[key] = true;
+ }
+ }
+ }
+ }
+
+ function findIdxInOld (node, oldCh, start, end) {
+ for (var i = start; i < end; i++) {
+ var c = oldCh[i];
+ if (isDef(c) && sameVnode(node, c)) { return i }
+ }
+ }
+
+ function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {
+ if (oldVnode === vnode) {
+ return
+ }
+
+ var elm = vnode.elm = oldVnode.elm;
+
+ if (isTrue(oldVnode.isAsyncPlaceholder)) {
+ if (isDef(vnode.asyncFactory.resolved)) {
+ hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
+ } else {
+ vnode.isAsyncPlaceholder = true;
+ }
+ return
+ }
+
+ // reuse element for static trees.
+ // note we only do this if the vnode is cloned -
+ // if the new node is not cloned it means the render functions have been
+ // reset by the hot-reload-api and we need to do a proper re-render.
+ if (isTrue(vnode.isStatic) &&
+ isTrue(oldVnode.isStatic) &&
+ vnode.key === oldVnode.key &&
+ (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))
+ ) {
+ vnode.componentInstance = oldVnode.componentInstance;
+ return
+ }
+
+ var i;
+ var data = vnode.data;
+ if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
+ i(oldVnode, vnode);
+ }
+
+ var oldCh = oldVnode.children;
+ var ch = vnode.children;
+ if (isDef(data) && isPatchable(vnode)) {
+ for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
+ if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
+ }
+ if (isUndef(vnode.text)) {
+ if (isDef(oldCh) && isDef(ch)) {
+ if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }
+ } else if (isDef(ch)) {
+ if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }
+ addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
+ } else if (isDef(oldCh)) {
+ removeVnodes(elm, oldCh, 0, oldCh.length - 1);
+ } else if (isDef(oldVnode.text)) {
+ nodeOps.setTextContent(elm, '');
+ }
+ } else if (oldVnode.text !== vnode.text) {
+ nodeOps.setTextContent(elm, vnode.text);
+ }
+ if (isDef(data)) {
+ if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
+ }
+ }
+
+ function invokeInsertHook (vnode, queue, initial) {
+ // delay insert hooks for component root nodes, invoke them after the
+ // element is really inserted
+ if (isTrue(initial) && isDef(vnode.parent)) {
+ vnode.parent.data.pendingInsert = queue;
+ } else {
+ for (var i = 0; i < queue.length; ++i) {
+ queue[i].data.hook.insert(queue[i]);
+ }
+ }
+ }
+
+ var hydrationBailed = false;
+ // list of modules that can skip create hook during hydration because they
+ // are already rendered on the client or has no need for initialization
+ // Note: style is excluded because it relies on initial clone for future
+ // deep updates (#7063).
+ var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
+
+ // Note: this is a browser-only function so we can assume elms are DOM nodes.
+ function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {
+ var i;
+ var tag = vnode.tag;
+ var data = vnode.data;
+ var children = vnode.children;
+ inVPre = inVPre || (data && data.pre);
+ vnode.elm = elm;
+
+ if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
+ vnode.isAsyncPlaceholder = true;
+ return true
+ }
+ // assert node match
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ if (!assertNodeMatch(elm, vnode, inVPre)) {
+ return false
+ }
+ }
+ if (isDef(data)) {
+ if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }
+ if (isDef(i = vnode.componentInstance)) {
+ // child component. it should have hydrated its own tree.
+ initComponent(vnode, insertedVnodeQueue);
+ return true
+ }
+ }
+ if (isDef(tag)) {
+ if (isDef(children)) {
+ // empty element, allow client to pick up and populate children
+ if (!elm.hasChildNodes()) {
+ createChildren(vnode, children, insertedVnodeQueue);
+ } else {
+ // v-html and domProps: innerHTML
+ if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {
+ if (i !== elm.innerHTML) {
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ typeof console !== 'undefined' &&
+ !hydrationBailed
+ ) {
+ hydrationBailed = true;
+ console.warn('Parent: ', elm);
+ console.warn('server innerHTML: ', i);
+ console.warn('client innerHTML: ', elm.innerHTML);
+ }
+ return false
+ }
+ } else {
+ // iterate and compare children lists
+ var childrenMatch = true;
+ var childNode = elm.firstChild;
+ for (var i$1 = 0; i$1 < children.length; i$1++) {
+ if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {
+ childrenMatch = false;
+ break
+ }
+ childNode = childNode.nextSibling;
+ }
+ // if childNode is not null, it means the actual childNodes list is
+ // longer than the virtual children list.
+ if (!childrenMatch || childNode) {
+ /* istanbul ignore if */
+ if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production' &&
+ typeof console !== 'undefined' &&
+ !hydrationBailed
+ ) {
+ hydrationBailed = true;
+ console.warn('Parent: ', elm);
+ console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
+ }
+ return false
+ }
+ }
+ }
+ }
+ if (isDef(data)) {
+ var fullInvoke = false;
+ for (var key in data) {
+ if (!isRenderedModule(key)) {
+ fullInvoke = true;
+ invokeCreateHooks(vnode, insertedVnodeQueue);
+ break
+ }
+ }
+ if (!fullInvoke && data['class']) {
+ // ensure collecting deps for deep class bindings for future updates
+ traverse(data['class']);
+ }
+ }
+ } else if (elm.data !== vnode.text) {
+ elm.data = vnode.text;
+ }
+ return true
+ }
+
+ function assertNodeMatch (node, vnode, inVPre) {
+ if (isDef(vnode.tag)) {
+ return vnode.tag.indexOf('vue-component') === 0 || (
+ !isUnknownElement$$1(vnode, inVPre) &&
+ vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
+ )
+ } else {
+ return node.nodeType === (vnode.isComment ? 8 : 3)
+ }
+ }
+
+ return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
+ if (isUndef(vnode)) {
+ if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }
+ return
+ }
+
+ var isInitialPatch = false;
+ var insertedVnodeQueue = [];
+
+ if (isUndef(oldVnode)) {
+ // empty mount (likely as component), create new root element
+ isInitialPatch = true;
+ createElm(vnode, insertedVnodeQueue, parentElm, refElm);
+ } else {
+ var isRealElement = isDef(oldVnode.nodeType);
+ if (!isRealElement && sameVnode(oldVnode, vnode)) {
+ // patch existing root node
+ patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);
+ } else {
+ if (isRealElement) {
+ // mounting to a real element
+ // check if this is server-rendered content and if we can perform
+ // a successful hydration.
+ if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
+ oldVnode.removeAttribute(SSR_ATTR);
+ hydrating = true;
+ }
+ if (isTrue(hydrating)) {
+ if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
+ invokeInsertHook(vnode, insertedVnodeQueue, true);
+ return oldVnode
+ } else if (Object({"KILN_VERSION":"10.2.2","LOG":"trace"}).NODE_ENV !== 'production') {
+ warn(
+ 'The client-side rendered virtual DOM tree is not matching ' +
+ 'server-rendered content. This is likely caused by incorrect ' +
+ 'HTML markup, for example nesting block-level elements inside ' +
+ ', or missing
. Bailing hydration and performing ' +
+ 'full client-side render.'
+ );
+ }
+ }
+ // either not server-rendered, or hydration failed.
+ // create an empty node and replace it
+ oldVnode = emptyNodeAt(oldVnode);
+ }
+
+ // replacing existing element
+ var oldElm = oldVnode.elm;
+ var parentElm$1 = nodeOps.parentNode(oldElm);
+
+ // create new node
+ createElm(
+ vnode,
+ insertedVnodeQueue,
+ // extremely rare edge case: do not insert if old element is in a
+ // leaving transition. Only happens when combining transition +
+ // keep-alive + HOCs. (#4590)
+ oldElm._leaveCb ? null : parentElm$1,
+ nodeOps.nextSibling(oldElm)
+ );
+
+ // update parent placeholder node element, recursively
+ if (isDef(vnode.parent)) {
+ var ancestor = vnode.parent;
+ var patchable = isPatchable(vnode);
+ while (ancestor) {
+ for (var i = 0; i < cbs.destroy.length; ++i) {
+ cbs.destroy[i](ancestor);
+ }
+ ancestor.elm = vnode.elm;
+ if (patchable) {
+ for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
+ cbs.create[i$1](emptyNode, ancestor);
+ }
+ // #6513
+ // invoke insert hooks that may have been merged by create hooks.
+ // e.g. for directives that uses the "inserted" hook.
+ var insert = ancestor.data.hook.insert;
+ if (insert.merged) {
+ // start at index 1 to avoid re-invoking component mounted hook
+ for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {
+ insert.fns[i$2]();
+ }
+ }
+ } else {
+ registerRef(ancestor);
+ }
+ ancestor = ancestor.parent;
+ }
+ }
+
+ // destroy old node
+ if (isDef(parentElm$1)) {
+ removeVnodes(parentElm$1, [oldVnode], 0, 0);
+ } else if (isDef(oldVnode.tag)) {
+ invokeDestroyHook(oldVnode);
+ }
+ }
+ }
+
+ invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
+ return vnode.elm
+ }
+}
+
+/* */
+
+var directives = {
+ create: updateDirectives,
+ update: updateDirectives,
+ destroy: function unbindDirectives (vnode) {
+ updateDirectives(vnode, emptyNode);
+ }
+}
+
+function updateDirectives (oldVnode, vnode) {
+ if (oldVnode.data.directives || vnode.data.directives) {
+ _update(oldVnode, vnode);
+ }
+}
+
+function _update (oldVnode, vnode) {
+ var isCreate = oldVnode === emptyNode;
+ var isDestroy = vnode === emptyNode;
+ var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
+ var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
+
+ var dirsWithInsert = [];
+ var dirsWithPostpatch = [];
+
+ var key, oldDir, dir;
+ for (key in newDirs) {
+ oldDir = oldDirs[key];
+ dir = newDirs[key];
+ if (!oldDir) {
+ // new directive, bind
+ callHook$1(dir, 'bind', vnode, oldVnode);
+ if (dir.def && dir.def.inserted) {
+ dirsWithInsert.push(dir);
+ }
+ } else {
+ // existing directive, update
+ dir.oldValue = oldDir.value;
+ callHook$1(dir, 'update', vnode, oldVnode);
+ if (dir.def && dir.def.componentUpdated) {
+ dirsWithPostpatch.push(dir);
+ }
+ }
+ }
+
+ if (dirsWithInsert.length) {
+ var callInsert = function () {
+ for (var i = 0; i < dirsWithInsert.length; i++) {
+ callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
+ }
+ };
+ if (isCreate) {
+ mergeVNodeHook(vnode, 'insert', callInsert);
+ } else {
+ callInsert();
+ }
+ }
+
+ if (dirsWithPostpatch.length) {
+ mergeVNodeHook(vnode, 'postpatch', function () {
+ for (var i = 0; i < dirsWithPostpatch.length; i++) {
+ callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
+ }
+ });
+ }
+
+ if (!isCreate) {
+ for (key in oldDirs) {
+ if (!newDirs[key]) {
+ // no longer present, unbind
+ callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
+ }
+ }
+ }
+}
+
+var emptyModifiers = Object.create(null);
+
+function normalizeDirectives$1 (
+ dirs,
+ vm
+) {
+ var res = Object.create(null);
+ if (!dirs) {
+ // $flow-disable-line
+ return res
+ }
+ var i, dir;
+ for (i = 0; i < dirs.length; i++) {
+ dir = dirs[i];
+ if (!dir.modifiers) {
+ // $flow-disable-line
+ dir.modifiers = emptyModifiers;
+ }
+ res[getRawDirName(dir)] = dir;
+ dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
+ }
+ // $flow-disable-line
+ return res
+}
+
+function getRawDirName (dir) {
+ return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
+}
+
+function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
+ var fn = dir.def && dir.def[hook];
+ if (fn) {
+ try {
+ fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
+ } catch (e) {
+ handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook"));
+ }
+ }
+}
+
+var baseModules = [
+ ref,
+ directives
+]
+
+/* */
+
+function updateAttrs (oldVnode, vnode) {
+ var opts = vnode.componentOptions;
+ if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
+ return
+ }
+ if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
+ return
+ }
+ var key, cur, old;
+ var elm = vnode.elm;
+ var oldAttrs = oldVnode.data.attrs || {};
+ var attrs = vnode.data.attrs || {};
+ // clone observed objects, as the user probably wants to mutate it
+ if (isDef(attrs.__ob__)) {
+ attrs = vnode.data.attrs = extend({}, attrs);
+ }
+
+ for (key in attrs) {
+ cur = attrs[key];
+ old = oldAttrs[key];
+ if (old !== cur) {
+ setAttr(elm, key, cur);
+ }
+ }
+ // #4391: in IE9, setting type can reset value for input[type=radio]
+ // #6666: IE/Edge forces progress value down to 1 before setting a max
+ /* istanbul ignore if */
+ if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
+ setAttr(elm, 'value', attrs.value);
+ }
+ for (key in oldAttrs) {
+ if (isUndef(attrs[key])) {
+ if (isXlink(key)) {
+ elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
+ } else if (!isEnumeratedAttr(key)) {
+ elm.removeAttribute(key);
+ }
+ }
+ }
+}
+
+function setAttr (el, key, value) {
+ if (el.tagName.indexOf('-') > -1) {
+ baseSetAttr(el, key, value);
+ } else if (isBooleanAttr(key)) {
+ // set attribute for blank value
+ // e.g.
+ if (isFalsyAttrValue(value)) {
+ el.removeAttribute(key);
+ } else {
+ // technically allowfullscreen is a boolean attribute for