cache) {
+ this.cache = cache;
+ }
+
+ @Override
+ public R get(K key) {
+ return cache.getIfPresent(key);
+ }
+
+ @Override
+ public R remove(K key) {
+ var value = cache.getIfPresent(key);
+ cache.invalidate(key);
+ return value;
+ }
+
+ @Override
+ public void put(K key, R object) {
+ cache.put(key, object);
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java b/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java
new file mode 100644
index 0000000000..89fbcef70f
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java
@@ -0,0 +1,51 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache;
+
+import java.time.Duration;
+
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.client.KubernetesClient;
+
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+
+/**
+ * A factory for Caffeine -backed {@link
+ * BoundedItemStore}. The implementation uses a {@link CaffeineBoundedCache} to store resources and
+ * progressively evict them if they haven't been used in a while. The idea about
+ * CaffeinBoundedItemStore-s is that, caffeine will cache the resources which were recently used,
+ * and will evict resource, which are not used for a while. This is ideal for startup performance
+ * and efficiency when all resources should be cached to avoid undue load on the API server. This is
+ * why setting a maximal cache size is not practical and the approach of evicting least recently
+ * used resources was chosen. However, depending on controller implementations and domains, it could
+ * happen that some / many of these resources are then seldom or even reconciled anymore. In that
+ * situation, large amounts of memory might be consumed to cache resources that are never used
+ * again.
+ *
+ * Note that if a resource is reconciled and is not present anymore in cache, it will
+ * transparently be fetched again from the API server. Similarly, since associated secondary
+ * resources are usually reconciled too, they might need to be fetched and populated to the cache,
+ * and will remain there for some time, for subsequent reconciliations.
+ */
+public class CaffeineBoundedItemStores {
+
+ private CaffeineBoundedItemStores() {}
+
+ /**
+ * @param client Kubernetes Client
+ * @param rClass resource class
+ * @param accessExpireDuration the duration after resources is evicted from cache if not accessed.
+ * @return the ItemStore implementation
+ * @param resource type
+ */
+ @SuppressWarnings("unused")
+ public static BoundedItemStore boundedItemStore(
+ KubernetesClient client, Class rClass, Duration accessExpireDuration) {
+ Cache cache = Caffeine.newBuilder().expireAfterAccess(accessExpireDuration).build();
+ return boundedItemStore(client, rClass, cache);
+ }
+
+ public static BoundedItemStore boundedItemStore(
+ KubernetesClient client, Class rClass, Cache cache) {
+ return new BoundedItemStore<>(new CaffeineBoundedCache<>(cache), rClass, client);
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java
new file mode 100644
index 0000000000..532e5237f8
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java
@@ -0,0 +1,107 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache;
+
+import java.time.Duration;
+import java.util.stream.IntStream;
+
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.client.CustomResource;
+import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestSpec;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestStatus;
+
+import static io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler.DATA_KEY;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.awaitility.Awaitility.await;
+
+public abstract class BoundedCacheTestBase<
+ P extends CustomResource> {
+
+ private static final Logger log = LoggerFactory.getLogger(BoundedCacheTestBase.class);
+
+ public static final int NUMBER_OF_RESOURCE_TO_TEST = 3;
+ public static final String RESOURCE_NAME_PREFIX = "test-";
+ public static final String INITIAL_DATA_PREFIX = "data-";
+ public static final String UPDATED_PREFIX = "updatedPrefix";
+
+ @Test
+ void reconciliationWorksWithLimitedCache() {
+ createTestResources();
+
+ assertConfigMapData(INITIAL_DATA_PREFIX);
+
+ updateTestResources();
+
+ assertConfigMapData(UPDATED_PREFIX);
+
+ deleteTestResources();
+
+ assertConfigMapsDeleted();
+ }
+
+ private void assertConfigMapsDeleted() {
+ await()
+ .atMost(Duration.ofSeconds(120))
+ .untilAsserted(
+ () ->
+ IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST)
+ .forEach(
+ i -> {
+ var cm = extension().get(ConfigMap.class, RESOURCE_NAME_PREFIX + i);
+ assertThat(cm).isNull();
+ }));
+ }
+
+ private void deleteTestResources() {
+ IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST)
+ .forEach(
+ i -> {
+ var cm = extension().get(customResourceClass(), RESOURCE_NAME_PREFIX + i);
+ var deleted = extension().delete(cm);
+ if (!deleted) {
+ log.warn("Custom resource might not be deleted: {}", cm);
+ }
+ });
+ }
+
+ private void updateTestResources() {
+ IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST)
+ .forEach(
+ i -> {
+ var cm = extension().get(ConfigMap.class, RESOURCE_NAME_PREFIX + i);
+ cm.getData().put(DATA_KEY, UPDATED_PREFIX + i);
+ extension().replace(cm);
+ });
+ }
+
+ void assertConfigMapData(String dataPrefix) {
+ await()
+ .untilAsserted(
+ () ->
+ IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST)
+ .forEach(i -> assertConfigMap(i, dataPrefix)));
+ }
+
+ private void assertConfigMap(int i, String prefix) {
+ var cm = extension().get(ConfigMap.class, RESOURCE_NAME_PREFIX + i);
+ assertThat(cm).isNotNull();
+ assertThat(cm.getData().get(DATA_KEY)).isEqualTo(prefix + i);
+ }
+
+ private void createTestResources() {
+ IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST)
+ .forEach(
+ i -> {
+ extension().create(createTestResource(i));
+ });
+ }
+
+ abstract P createTestResource(int index);
+
+ abstract Class customResourceClass();
+
+ abstract LocallyRunOperatorExtension extension();
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java
new file mode 100644
index 0000000000..0c16c1227b
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java
@@ -0,0 +1,53 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache;
+
+import java.time.Duration;
+
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.clusterscope.BoundedCacheClusterScopeTestCustomResource;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.clusterscope.BoundedCacheClusterScopeTestReconciler;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestSpec;
+
+import static io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler.boundedItemStore;
+
+public class CaffeineBoundedCacheClusterScopeIT
+ extends BoundedCacheTestBase {
+
+ @RegisterExtension
+ LocallyRunOperatorExtension extension =
+ LocallyRunOperatorExtension.builder()
+ .withReconciler(
+ new BoundedCacheClusterScopeTestReconciler(),
+ o -> {
+ o.withItemStore(
+ boundedItemStore(
+ new KubernetesClientBuilder().build(),
+ BoundedCacheClusterScopeTestCustomResource.class,
+ Duration.ofMinutes(1),
+ 1));
+ })
+ .build();
+
+ @Override
+ BoundedCacheClusterScopeTestCustomResource createTestResource(int index) {
+ var res = new BoundedCacheClusterScopeTestCustomResource();
+ res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME_PREFIX + index).build());
+ res.setSpec(new BoundedCacheTestSpec());
+ res.getSpec().setData(INITIAL_DATA_PREFIX + index);
+ res.getSpec().setTargetNamespace(extension.getNamespace());
+ return res;
+ }
+
+ @Override
+ Class customResourceClass() {
+ return BoundedCacheClusterScopeTestCustomResource.class;
+ }
+
+ @Override
+ LocallyRunOperatorExtension extension() {
+ return extension;
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java
new file mode 100644
index 0000000000..534d7b2027
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java
@@ -0,0 +1,52 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache;
+
+import java.time.Duration;
+
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestCustomResource;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestReconciler;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestSpec;
+
+import static io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler.boundedItemStore;
+
+class CaffeineBoundedCacheNamespacedIT
+ extends BoundedCacheTestBase {
+
+ @RegisterExtension
+ LocallyRunOperatorExtension extension =
+ LocallyRunOperatorExtension.builder()
+ .withReconciler(
+ new BoundedCacheTestReconciler(),
+ o -> {
+ o.withItemStore(
+ boundedItemStore(
+ new KubernetesClientBuilder().build(),
+ BoundedCacheTestCustomResource.class,
+ Duration.ofMinutes(1),
+ 1));
+ })
+ .build();
+
+ BoundedCacheTestCustomResource createTestResource(int index) {
+ var res = new BoundedCacheTestCustomResource();
+ res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME_PREFIX + index).build());
+ res.setSpec(new BoundedCacheTestSpec());
+ res.getSpec().setData(INITIAL_DATA_PREFIX + index);
+ res.getSpec().setTargetNamespace(extension.getNamespace());
+ return res;
+ }
+
+ @Override
+ Class customResourceClass() {
+ return BoundedCacheTestCustomResource.class;
+ }
+
+ @Override
+ LocallyRunOperatorExtension extension() {
+ return extension;
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java
new file mode 100644
index 0000000000..b059ac033b
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java
@@ -0,0 +1,118 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
+import io.fabric8.kubernetes.client.CustomResource;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.*;
+import io.javaoperatorsdk.operator.processing.event.source.EventSource;
+import io.javaoperatorsdk.operator.processing.event.source.cache.BoundedItemStore;
+import io.javaoperatorsdk.operator.processing.event.source.cache.CaffeineBoundedItemStores;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.clusterscope.BoundedCacheClusterScopeTestReconciler;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestSpec;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestStatus;
+import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
+import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers;
+
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+
+public abstract class AbstractTestReconciler<
+ P extends CustomResource>
+ implements Reconciler {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(BoundedCacheClusterScopeTestReconciler.class);
+
+ public static final String DATA_KEY = "dataKey";
+
+ @Override
+ public UpdateControl
reconcile(P resource, Context
context) {
+ var maybeConfigMap = context.getSecondaryResource(ConfigMap.class);
+ maybeConfigMap.ifPresentOrElse(
+ cm -> updateConfigMapIfNeeded(cm, resource, context),
+ () -> createConfigMap(resource, context));
+ ensureStatus(resource);
+ log.info("Reconciled: {}", resource.getMetadata().getName());
+ return UpdateControl.patchStatus(resource);
+ }
+
+ protected void updateConfigMapIfNeeded(ConfigMap cm, P resource, Context
context) {
+ var data = cm.getData().get(DATA_KEY);
+ if (data == null || data.equals(resource.getSpec().getData())) {
+ cm.setData(Map.of(DATA_KEY, resource.getSpec().getData()));
+ context.getClient().configMaps().resource(cm).replace();
+ }
+ }
+
+ protected void createConfigMap(P resource, Context
context) {
+ var cm =
+ new ConfigMapBuilder()
+ .withMetadata(
+ new ObjectMetaBuilder()
+ .withName(resource.getMetadata().getName())
+ .withNamespace(resource.getSpec().getTargetNamespace())
+ .build())
+ .withData(Map.of(DATA_KEY, resource.getSpec().getData()))
+ .build();
+ cm.addOwnerReference(resource);
+ context.getClient().configMaps().resource(cm).create();
+ }
+
+ @Override
+ public List> prepareEventSources(EventSourceContext context) {
+
+ var boundedItemStore =
+ boundedItemStore(
+ new KubernetesClientBuilder().build(),
+ ConfigMap.class,
+ Duration.ofMinutes(1),
+ 1); // setting max size for testing purposes
+
+ var es =
+ new InformerEventSource<>(
+ InformerEventSourceConfiguration.from(ConfigMap.class, primaryClass())
+ .withItemStore(boundedItemStore)
+ .withSecondaryToPrimaryMapper(
+ Mappers.fromOwnerReferences(
+ context.getPrimaryResourceClass(),
+ this instanceof BoundedCacheClusterScopeTestReconciler))
+ .build(),
+ context);
+
+ return List.of(es);
+ }
+
+ private void ensureStatus(P resource) {
+ if (resource.getStatus() == null) {
+ resource.setStatus(new BoundedCacheTestStatus());
+ }
+ }
+
+ public static BoundedItemStore boundedItemStore(
+ KubernetesClient client,
+ Class rClass,
+ Duration accessExpireDuration,
+ // max size is only for testing purposes
+ long cacheMaxSize) {
+ Cache cache =
+ Caffeine.newBuilder()
+ .expireAfterAccess(accessExpireDuration)
+ .maximumSize(cacheMaxSize)
+ .build();
+ return CaffeineBoundedItemStores.boundedItemStore(client, rClass, cache);
+ }
+
+ protected abstract Class primaryClass();
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java
new file mode 100644
index 0000000000..6fc9a5babc
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java
@@ -0,0 +1,14 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.clusterscope;
+
+import io.fabric8.kubernetes.client.CustomResource;
+import io.fabric8.kubernetes.model.annotation.Group;
+import io.fabric8.kubernetes.model.annotation.ShortNames;
+import io.fabric8.kubernetes.model.annotation.Version;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestSpec;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope.BoundedCacheTestStatus;
+
+@Group("sample.javaoperatorsdk")
+@Version("v1")
+@ShortNames("bccs")
+public class BoundedCacheClusterScopeTestCustomResource
+ extends CustomResource {}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java
new file mode 100644
index 0000000000..93f103cbf2
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java
@@ -0,0 +1,14 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.clusterscope;
+
+import io.javaoperatorsdk.operator.api.reconciler.*;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler;
+
+@ControllerConfiguration
+public class BoundedCacheClusterScopeTestReconciler
+ extends AbstractTestReconciler {
+
+ @Override
+ protected Class primaryClass() {
+ return BoundedCacheClusterScopeTestCustomResource.class;
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java
new file mode 100644
index 0000000000..9b77aa7bf8
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java
@@ -0,0 +1,13 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope;
+
+import io.fabric8.kubernetes.api.model.Namespaced;
+import io.fabric8.kubernetes.client.CustomResource;
+import io.fabric8.kubernetes.model.annotation.Group;
+import io.fabric8.kubernetes.model.annotation.ShortNames;
+import io.fabric8.kubernetes.model.annotation.Version;
+
+@Group("sample.javaoperatorsdk")
+@Version("v1")
+@ShortNames("bct")
+public class BoundedCacheTestCustomResource
+ extends CustomResource implements Namespaced {}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestReconciler.java
new file mode 100644
index 0000000000..6b95665585
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestReconciler.java
@@ -0,0 +1,14 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope;
+
+import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
+import io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler;
+
+@ControllerConfiguration
+public class BoundedCacheTestReconciler
+ extends AbstractTestReconciler {
+
+ @Override
+ protected Class primaryClass() {
+ return BoundedCacheTestCustomResource.class;
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestSpec.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestSpec.java
new file mode 100644
index 0000000000..63e5876267
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestSpec.java
@@ -0,0 +1,25 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope;
+
+public class BoundedCacheTestSpec {
+
+ private String data;
+ private String targetNamespace;
+
+ public String getData() {
+ return data;
+ }
+
+ public BoundedCacheTestSpec setData(String data) {
+ this.data = data;
+ return this;
+ }
+
+ public String getTargetNamespace() {
+ return targetNamespace;
+ }
+
+ public BoundedCacheTestSpec setTargetNamespace(String targetNamespace) {
+ this.targetNamespace = targetNamespace;
+ return this;
+ }
+}
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java
new file mode 100644
index 0000000000..5aa5ca2258
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java
@@ -0,0 +1,3 @@
+package io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope;
+
+public class BoundedCacheTestStatus {}
diff --git a/caffeine-bounded-cache-support/src/test/resources/log4j2.xml b/caffeine-bounded-cache-support/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000..f23cf772dd
--- /dev/null
+++ b/caffeine-bounded-cache-support/src/test/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/contributing/eclipse-google-style.xml b/contributing/eclipse-google-style.xml
deleted file mode 100644
index 52bedc6ebd..0000000000
--- a/contributing/eclipse-google-style.xml
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/contributing/eclipse.importorder b/contributing/eclipse.importorder
deleted file mode 100644
index 8a156041e9..0000000000
--- a/contributing/eclipse.importorder
+++ /dev/null
@@ -1,7 +0,0 @@
-0=java
-1=javax
-2=org
-3=io
-4=com
-5=
-6=\#
diff --git a/docs/.gitignore b/docs/.gitignore
index d1c9ff6a5b..40b67f41a7 100644
--- a/docs/.gitignore
+++ b/docs/.gitignore
@@ -1,4 +1,5 @@
-.jekyll-cache/
-_site/
-.DS_Store
-.sass-cache
\ No newline at end of file
+/public
+resources/
+node_modules/
+package-lock.json
+.hugo_build.lock
\ No newline at end of file
diff --git a/docs/.nvmrc b/docs/.nvmrc
new file mode 100644
index 0000000000..b009dfb9d9
--- /dev/null
+++ b/docs/.nvmrc
@@ -0,0 +1 @@
+lts/*
diff --git a/docs/404.md b/docs/404.md
deleted file mode 100644
index 3c3670a81b..0000000000
--- a/docs/404.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: 404 - page doesn't exist!
-description: 404 - are you lost?
-layout: default
-permalink: /404.html
----
-
-## Sorry, the page you were looking for could not be found.
-{:.uk-section .uk-container .uk-text-center}
-
-### Return to our [home page]({{ "/" | relative_url }}), or [contact us](https://discord.gg/DacEhAy) if you can’t find what you are looking for.
-{: .uk-container .uk-text-center}
diff --git a/docs/CNAME b/docs/CNAME
deleted file mode 100644
index 492c587214..0000000000
--- a/docs/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-javaoperatorsdk.io
\ No newline at end of file
diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
deleted file mode 100644
index 3fe567f1e7..0000000000
--- a/docs/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: Contributor Covenant Code of Conduct
-description: Code of Conduct
-layout: default
-permalink: /coc.html
----
-
-All participants to the Java Operator SDK project are required to comply with
-the following code of conduct, which is based on v2.0 of the [Contributor
-Covenant](https://www.contributor-covenant.org/).
-
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-* The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
- address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to adam.sandor@container-solutions.com or any of the project admins.
-
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
-
-Community Impact Guidelines were inspired by [Mozilla's code of conduct
-enforcement ladder](https://github.com/mozilla/diversity).
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see the FAQ at
-https://www.contributor-covenant.org/faq. Translations are available at
-https://www.contributor-covenant.org/translations.
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 0000000000..5ea571c69d
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,57 @@
+# Contributing to Java Operator SDK Documentation
+
+Thank you for your interest in improving the Java Operator SDK documentation! We welcome contributions from the community and appreciate your help in making our documentation better.
+
+## How to Contribute
+
+### Getting Started
+
+1. **Fork the repository** and clone your fork locally
+2. **Create a new branch** for your changes
+3. **Make your improvements** to the documentation
+4. **Test your changes** locally using `hugo server`
+5. **Submit a pull request** with a clear description of your changes
+
+### Types of Contributions
+
+We welcome various types of contributions:
+
+- **Content improvements**: Fix typos, clarify explanations, add examples
+- **New documentation**: Add missing sections or entirely new guides
+- **Structural improvements**: Better organization, navigation, or formatting
+- **Translation**: Help translate documentation to other languages
+
+## Guidelines
+
+### Writing Style
+
+- Use clear, concise language
+- Write in active voice when possible
+- Define technical terms when first used
+- Include practical examples where helpful
+- Keep sentences and paragraphs reasonably short
+
+### Technical Requirements
+
+- Test all code examples to ensure they work
+- Use proper markdown formatting
+- Follow existing documentation structure and conventions
+- Ensure links work and point to current resources
+
+## Legal Requirements
+
+### Contributor License Agreement
+
+All contributions must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution; the CLA simply gives us permission to use and redistribute your contributions as part of the project.
+
+Visit to see your current agreements on file or to sign a new one.
+
+You generally only need to submit a CLA once, so if you've already submitted one (even for a different project), you probably don't need to do it again.
+
+### Code Review Process
+
+All submissions, including those by project members, require review. We use GitHub pull requests for this purpose. Please consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.
+
+## Community Guidelines
+
+This project follows [Google's Open Source Community Guidelines](https://opensource.google.com/conduct/).
diff --git a/docs/Dockerfile b/docs/Dockerfile
new file mode 100644
index 0000000000..232d8f70c4
--- /dev/null
+++ b/docs/Dockerfile
@@ -0,0 +1,4 @@
+FROM floryn90/hugo:ext-alpine
+
+RUN apk add git && \
+ git config --global --add safe.directory /src
diff --git a/docs/Gemfile b/docs/Gemfile
deleted file mode 100644
index 2334a63fb9..0000000000
--- a/docs/Gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# frozen_string_literal: true
-
-source "https://rubygems.org/"
-
-git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
-
-gem "jekyll", "~> 4.2"
-gem "jekyll-github-metadata"
\ No newline at end of file
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
deleted file mode 100644
index 605cd1d411..0000000000
--- a/docs/Gemfile.lock
+++ /dev/null
@@ -1,86 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- addressable (2.8.0)
- public_suffix (>= 2.0.2, < 5.0)
- colorator (1.1.0)
- concurrent-ruby (1.1.9)
- em-websocket (0.5.2)
- eventmachine (>= 0.12.9)
- http_parser.rb (~> 0.6.0)
- eventmachine (1.2.7)
- faraday (1.3.0)
- faraday-net_http (~> 1.0)
- multipart-post (>= 1.2, < 3)
- ruby2_keywords
- faraday-net_http (1.0.1)
- ffi (1.15.3)
- forwardable-extended (2.6.0)
- http_parser.rb (0.6.0)
- i18n (1.8.10)
- concurrent-ruby (~> 1.0)
- jekyll (4.2.0)
- addressable (~> 2.4)
- colorator (~> 1.0)
- em-websocket (~> 0.5)
- i18n (~> 1.0)
- jekyll-sass-converter (~> 2.0)
- jekyll-watch (~> 2.0)
- kramdown (~> 2.3)
- kramdown-parser-gfm (~> 1.0)
- liquid (~> 4.0)
- mercenary (~> 0.4.0)
- pathutil (~> 0.9)
- rouge (~> 3.0)
- safe_yaml (~> 1.0)
- terminal-table (~> 2.0)
- jekyll-github-metadata (2.13.0)
- jekyll (>= 3.4, < 5.0)
- octokit (~> 4.0, != 4.4.0)
- jekyll-sass-converter (2.1.0)
- sassc (> 2.0.1, < 3.0)
- jekyll-watch (2.2.1)
- listen (~> 3.0)
- kramdown (2.3.1)
- rexml
- kramdown-parser-gfm (1.1.0)
- kramdown (~> 2.0)
- liquid (4.0.3)
- listen (3.5.1)
- rb-fsevent (~> 0.10, >= 0.10.3)
- rb-inotify (~> 0.9, >= 0.9.10)
- mercenary (0.4.0)
- multipart-post (2.1.1)
- octokit (4.20.0)
- faraday (>= 0.9)
- sawyer (~> 0.8.0, >= 0.5.3)
- pathutil (0.16.2)
- forwardable-extended (~> 2.6)
- public_suffix (4.0.6)
- rb-fsevent (0.11.0)
- rb-inotify (0.10.1)
- ffi (~> 1.0)
- rexml (3.2.5)
- rouge (3.26.0)
- ruby2_keywords (0.0.4)
- safe_yaml (1.0.5)
- sassc (2.4.0)
- ffi (~> 1.9)
- sawyer (0.8.2)
- addressable (>= 2.3.5)
- faraday (> 0.8, < 2.0)
- terminal-table (2.0.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- unicode-display_width (1.7.0)
-
-PLATFORMS
- ruby
- universal-darwin-20
- x86_64-linux
-
-DEPENDENCIES
- jekyll (~> 4.2)
- jekyll-github-metadata
-
-BUNDLED WITH
- 2.2.30
diff --git a/docs/LICENSE b/docs/LICENSE
new file mode 100644
index 0000000000..261eeb9e9f
--- /dev/null
+++ b/docs/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000000..14f675b53b
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,82 @@
+# Java Operator SDK Documentation
+
+This repository contains the documentation website for the Java Operator SDK (JOSDK), built using Hugo and the Docsy theme.
+
+## About Java Operator SDK
+
+Java Operator SDK is a framework that makes it easy to build Kubernetes operators in Java. It provides APIs designed to feel natural to Java developers and handles common operator challenges automatically, allowing you to focus on your business logic.
+
+## Development Setup
+
+This documentation site uses Hugo v0.125.7 with the Docsy theme.
+
+## Prerequisites
+
+- Hugo v0.125.7 or later (extended version required)
+- Node.js and npm (for PostCSS processing)
+- Git
+
+## Local Development
+
+### Quick Start
+
+1. Clone this repository
+2. Install dependencies:
+ ```bash
+ npm install
+ ```
+3. Start the development server:
+ ```bash
+ hugo server
+ ```
+4. Open your browser to `http://localhost:1313`
+
+### Using Docker
+
+You can also run the documentation site using Docker:
+
+1. Build the container:
+ ```bash
+ docker-compose build
+ ```
+2. Run the container:
+ ```bash
+ docker-compose up
+ ```
+ > **Note**: You can combine both commands with `docker-compose up --build`
+
+3. Access the site at `http://localhost:1313`
+
+To stop the container, press **Ctrl + C** in your terminal.
+
+To clean up Docker resources:
+```bash
+docker-compose rm
+```
+
+## Contributing
+
+We welcome contributions to improve the documentation! Please see our [contribution guidelines](CONTRIBUTING.md) for details on how to get started.
+
+## Troubleshooting
+
+### Module Compatibility Error
+If you see an error about module compatibility, ensure you're using Hugo v0.110.0 or higher:
+```console
+Error: Error building site: failed to extract shortcode: template for shortcode "blocks/cover" not found
+```
+
+### SCSS Processing Error
+If you encounter SCSS-related errors, make sure you have the extended version of Hugo installed:
+```console
+Error: TOCSS: failed to transform "scss/main.scss"
+```
+
+### Go Binary Not Found
+If you see "binary with name 'go' not found", install the Go programming language from [golang.org](https://golang.org).
+
+## Links
+
+- [Hugo Documentation](https://gohugo.io/documentation/)
+- [Docsy Theme Documentation](https://www.docsy.dev/docs/)
+- [Java Operator SDK GitHub Repository](https://github.com/operator-framework/java-operator-sdk)
diff --git a/docs/_config.yml b/docs/_config.yml
deleted file mode 100644
index a2b8fba679..0000000000
--- a/docs/_config.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-
-# Site settings
-name: Java Operator SDK
-title: Java Operator SDK
-description: Build Kubernetes Operators in Java without hassle
-logo: logo-white.svg
-logo-icon: logo-icon.svg
-permalink: /:title/
-date_format: "%b %-d, %Y"
-images: /assets/images/
-
-
-# Rouge highlighter
-markdown: kramdown
-highlighter: rouge
-
-kramdown:
- parse_block_html: true
- permalink: /:title
- syntax_highlighter_opts:
- disable : true
-
-plugins:
- - "jekyll-github-metadata"
diff --git a/docs/_data/navbar.yml b/docs/_data/navbar.yml
deleted file mode 100644
index ae95f15c5c..0000000000
--- a/docs/_data/navbar.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-# Navbar menu navigation links
- - title: Home
- url: /
- - title: Docs
- url: /docs/getting-started
- - title: Code of Conduct
- url: /coc
- - title: Releases
- url: /releases
-# Navbar buttons or social icons
- - title: Join Discord
- url: https://discord.gg/DacEhAy
- button: default
- type: discord
- - title: Contribute
- url: https://github.com/java-operator-sdk/java-operator-sdk
- button: default
- type: github
-
diff --git a/docs/_data/sidebar.yml b/docs/_data/sidebar.yml
deleted file mode 100644
index 5bd1f2ce22..0000000000
--- a/docs/_data/sidebar.yml
+++ /dev/null
@@ -1,20 +0,0 @@
- # Navbar menu navigation links
- - title: Intro to Operators
- url: /docs/intro-operators
- - title: Getting Started
- url: /docs/getting-started
- - title: How to use Samples
- url: /docs/using-samples
- - title: Features
- url: /docs/features
- - title: Patterns and Best Practices
- url: /docs/patterns-best-practices
- - title: FAQ
- url: /docs/faq
- - title: Architecture and Internals
- url: /docs/architecture-and-internals
- - title: Contributing
- url: /docs/contributing
- - title: Migrating from v1 to v2
- url: /docs/v2-migration
-
diff --git a/docs/_includes/analytics.html b/docs/_includes/analytics.html
deleted file mode 100644
index 40863e94bc..0000000000
--- a/docs/_includes/analytics.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html
deleted file mode 100644
index 34449face3..0000000000
--- a/docs/_includes/footer.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- {% for link in site.data.navbar%}
- {% include menuItems.html %}
- {% endfor %}
-
-
Released under the Apache License 2.0
- Copyright © 2020 - {{ 'now' | date: "%Y" }} Container Solutions
-
-
diff --git a/docs/_includes/hero.html b/docs/_includes/hero.html
deleted file mode 100644
index d0057b772c..0000000000
--- a/docs/_includes/hero.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- {% if site.logo %}
-
- {% endif %}
-
[ {{ site.title }} ]
-
-
-
-
diff --git a/docs/_includes/heroDefault.html b/docs/_includes/heroDefault.html
deleted file mode 100644
index d41d20d043..0000000000
--- a/docs/_includes/heroDefault.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
[ {{ page.title }} ]
-
-
diff --git a/docs/_includes/links.html b/docs/_includes/links.html
deleted file mode 100644
index 835fa7d2e4..0000000000
--- a/docs/_includes/links.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/_includes/menuItems.html b/docs/_includes/menuItems.html
deleted file mode 100644
index bc59ec3990..0000000000
--- a/docs/_includes/menuItems.html
+++ /dev/null
@@ -1,49 +0,0 @@
-{% assign domain = '' | relative_url %}
-{% if link.url == page.url %}
-{% assign current = ' class="uk-active"' %}
-{% else %}
-{% assign current = ' class=""' %}
-{% endif %}
-{% if link.title %}
-
-{% if link.url %}
-{% if link.button %}
-
-{% else %}
-{{ link.title }}
-{% endif %}
-{% else %}
-{{ link.title }}
-{% endif %}
-{% if link.dropdown != null %}
-
-
- {% for item in link.dropdown %}
- {% if item.url != null %}
- {% assign domain = '' | relative_url %}
- {% if item.url == page.url %}
- {% assign current = ' class="uk-active"' %}
- {% else %}
- {% assign current = ' class=""' %}
- {% endif %}
- {{ item.title }}
- {% else %}
-
- {% endif %}
- {% endfor %}
-
-
-{% endif %}
-
-{% endif %}
-
diff --git a/docs/_includes/navbar.html b/docs/_includes/navbar.html
deleted file mode 100644
index 736396a4a6..0000000000
--- a/docs/_includes/navbar.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
diff --git a/docs/_includes/scripts.html b/docs/_includes/scripts.html
deleted file mode 100644
index f3ca7b56a5..0000000000
--- a/docs/_includes/scripts.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/_includes/sidebar.html b/docs/_includes/sidebar.html
deleted file mode 100644
index 1700a6f0b3..0000000000
--- a/docs/_includes/sidebar.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
deleted file mode 100644
index 0aa2dda932..0000000000
--- a/docs/_layouts/default.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
- {% if page.title %}{{ page.title }}{% else %}{{ site.title | escape }}{% endif %}
- {% include links.html %}
- {% include analytics.html %}
-
-
-{% include navbar.html %}
-{% include heroDefault.html %}
-
-{% include footer.html %}
-{% include scripts.html %}
-
-
diff --git a/docs/_layouts/docs.html b/docs/_layouts/docs.html
deleted file mode 100644
index 1283d701d6..0000000000
--- a/docs/_layouts/docs.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
- {% if page.title %}{{ page.title }}{% else %}{{ site.title | escape }}{% endif %}
- {% include links.html %}
- {% include analytics.html %}
-
-
- {% include navbar.html %}
-
-
- {% include scripts.html %}
-
-
diff --git a/docs/_layouts/homepage.html b/docs/_layouts/homepage.html
deleted file mode 100644
index 2804029ac3..0000000000
--- a/docs/_layouts/homepage.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
- {% if page.title %}{{ page.title }}{% else %}{{ site.title | escape }}{% endif %}
- {% include links.html %}
- {% include analytics.html %}
-
-
- {% include navbar.html %}
- {% include hero.html %}
-
- {{ content }}
-
- {% include footer.html %}
- {% include scripts.html %}
-
-
diff --git a/docs/_sass/theme/mixins.scss b/docs/_sass/theme/mixins.scss
deleted file mode 100644
index 35030aa78d..0000000000
--- a/docs/_sass/theme/mixins.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// Mixins
-// ========================================================================
-
-.uk-offcanvas-bar .uk-navbar-item {
- min-height: 50px;
- justify-content: flex-start;
-}
-.full-page{
- min-height: calc(100vh - 518px)
-}
-
-
-
diff --git a/docs/_sass/theme/uikit.scss b/docs/_sass/theme/uikit.scss
deleted file mode 100644
index 25d543ef2f..0000000000
--- a/docs/_sass/theme/uikit.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-// Import UIkit components
-
-// The commented out imports are elements that can be used but they are not necessary at the moment
-// They are left in to make it easier to see what needs to be imported when creating new page elements
-// for example: you want to create a form so you uncomment @import "https://github.com/uikit/components/form.scss" for the styles to apply;
-
-// Base
-@import "https://github.com/uikit/components/variables.scss";
-@import "https://github.com/uikit/components/mixin.scss";
-@import "https://github.com/uikit/components/base.scss";
-
-// Elements
-@import "https://github.com/uikit/components/link.scss";
-@import "https://github.com/uikit/components/heading.scss";
-@import "https://github.com/uikit/components/divider.scss";
-@import "https://github.com/uikit/components/list.scss";
-@import "https://github.com/uikit/components/description-list.scss";
-@import "https://github.com/uikit/components/icon.scss";
-@import "https://github.com/uikit/components/button.scss";
-//@import "https://github.com/uikit/components/progress.scss";
-//@import "https://github.com/uikit/components/table.scss";
-//@import "https://github.com/uikit/components/form-range.scss";
-//@import "https://github.com/uikit/components/form.scss";
-
-// Layout
-@import "https://github.com/uikit/components/section.scss";
-@import "https://github.com/uikit/components/container.scss";
-@import "https://github.com/uikit/components/tile.scss";
-@import "https://github.com/uikit/components/card.scss";
-
-// Common
-@import "https://github.com/uikit/components/article.scss";
-//@import "https://github.com/uikit/components/close.scss";
-//@import "https://github.com/uikit/components/spinner.scss";
-//@import "https://github.com/uikit/components/totop.scss";
-//@import "https://github.com/uikit/components/marker.scss";
-//@import "https://github.com/uikit/components/alert.scss";
-//@import "https://github.com/uikit/components/placeholder.scss";
-//@import "https://github.com/uikit/components/badge.scss";
-//@import "https://github.com/uikit/components/label.scss";
-//@import "https://github.com/uikit/components/overlay.scss";
-//@import "https://github.com/uikit/components/comment.scss";
-//@import "https://github.com/uikit/components/search.scss";
-
-// JavaScript
-@import "https://github.com/uikit/components/modal.scss";
-@import "https://github.com/uikit/components/sticky.scss";
-@import "https://github.com/uikit/components/offcanvas.scss";
-@import "https://github.com/uikit/components/leader.scss";
-//@import "https://github.com/uikit/components/accordion.scss";
-//@import "https://github.com/uikit/components/drop.scss";
-//@import "https://github.com/uikit/components/dropdown.scss";
-//@import "https://github.com/uikit/components/slideshow.scss";
-//@import "https://github.com/uikit/components/slider.scss";
-//@import "https://github.com/uikit/components/switcher.scss";
-//@import "https://github.com/uikit/components/notification.scss";
-//@import "https://github.com/uikit/components/tooltip.scss";
-//@import "https://github.com/uikit/components/sortable.scss";
-//@import "https://github.com/uikit/components/countdown.scss";
-// Scrollspy
-// Toggle
-// Scroll
-
-@import "https://github.com/uikit/components/grid.scss";
-
-// Navs
-@import "https://github.com/uikit/components/nav.scss";
-@import "https://github.com/uikit/components/navbar.scss";
-@import "https://github.com/uikit/components/subnav.scss";
-//@import "https://github.com/uikit/components/breadcrumb.scss";
-//@import "https://github.com/uikit/components/pagination.scss";
-//@import "https://github.com/uikit/components/tab.scss";
-//@import "https://github.com/uikit/components/slidenav.scss";
-//@import "https://github.com/uikit/components/dotnav.scss";
-//@import "https://github.com/uikit/components/thumbnav.scss";
-//@import "https://github.com/uikit/components/iconnav.scss";
-
-//@import "https://github.com/uikit/components/lightbox.scss";
-
-// Utilities
-
-@import "https://github.com/uikit/components/width.scss";
-@import "https://github.com/uikit/components/height.scss";
-@import "https://github.com/uikit/components/text.scss";
-@import "https://github.com/uikit/components/background.scss";
-@import "https://github.com/uikit/components/align.scss";
-@import "https://github.com/uikit/components/svg.scss";
-@import "https://github.com/uikit/components/utility.scss";
-@import "https://github.com/uikit/components/flex.scss";
-@import "https://github.com/uikit/components/margin.scss";
-@import "https://github.com/uikit/components/padding.scss";
-@import "https://github.com/uikit/components/position.scss";
-@import "https://github.com/uikit/components/visibility.scss";
-//@import "https://github.com/uikit/components/transition.scss";
-//@import "https://github.com/uikit/components/column.scss";
-//@import "https://github.com/uikit/components/cover.scss";
-//@import "https://github.com/uikit/components/animation.scss";
-//@import "https://github.com/uikit/components/inverse.scss";
-
-//@import "https://github.com/uikit/components/print.scss";
\ No newline at end of file
diff --git a/docs/_sass/theme/variables.scss b/docs/_sass/theme/variables.scss
deleted file mode 100644
index a33b84d199..0000000000
--- a/docs/_sass/theme/variables.scss
+++ /dev/null
@@ -1,138 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&display=swap');
-@import url('https://fonts.googleapis.com/css2?family=Asap:wght@700&display=swap');
-
-// Global variables
-$global-primary-background: #fc9c62;
-$global-secondary-background: darken($global-primary-background, 60%);
-$global-success-background: #32d296;
-$global-muted-background: #FEF6EB;
-$global-warning-background: #faa05a;
-$global-danger-background: #cc2b48;
-$global-font-family: 'Open sans', san-serif;
-$global-link-color: darken($global-primary-background, 25%);
-$global-link-hover-color: darken($global-primary-background, 30%);
-$global-small-font-size: 0.875rem;
-$global-muted-color: #ffffff;
-
-$global-xxlarge-font-size: 2.75rem;
-$global-xlarge-font-size: 2rem;
-$global-large-font-size: 1.5rem;
-$global-medium-font-size: 1.25rem;
-$xsmall-font-size: 0.875rem;
-
-// Base variables
-$base-body-font-family: 'Open sans', san-serif;
-$base-body-font-size: 1rem;
-$base-body-font-weight: 400;
-$base-body-line-height: 1.7;
-$base-heading-font-family: 'Open sans', san-serif;
-$base-heading-font-weight: 600;
-$base-heading-color: $global-secondary-background;
-$base-h1-line-height: 1.5;
-$base-h2-line-height: 1.5;
-$base-link-hover-text-decoration: none;
-$base-body-color: $global-secondary-background;
-$base-code-font-family: 'Open sans', san-serif;
-$base-code-color: $global-secondary-background;
-$base-code-font-size: $xsmall-font-size;
-$base-pre-font-size: $xsmall-font-size;
-$base-pre-line-height: 1.65;
-$base-pre-font-family: $base-code-font-family;
-$base-pre-color: $base-code-color;
-$border-light: $global-muted-color;
-$border-rounded-border-radius: 2px;
-$text-lead-font-size: 1.125rem;
-$link-muted-hover-color: $global-secondary-background;
-$link-text-hover-color: #9e9aaa;
-$overlay-primary-background: rgba(34,34,34,0.8);
-$logo-font-family: 'Asap', sans-serif;
-
-// Accordion variables
-$accordion-item-margin-top: 20px;
-$accordion-title-font-size: 1.1875rem;
-$accordion-title-color: $global-link-color;
-$accordion-title-hover-color: $global-link-color;
-$accordion-content-margin-top: 20px;
-$accordion-icon-color: $global-primary-background;
-$accordion-icon-background-color: lighten( $global-primary-background, 57% );
-$internal-accordion-open-image: "data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolyline fill='none' stroke='$global-secondary-background' stroke-width='1.03' points='4 13 10 7 16 13' /%3E%3C/svg%3E";
-$internal-accordion-close-image: "data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolyline fill='none' stroke='$global-secondary-background' stroke-width='1.03' points='16 7 10 13 4 7' /%3E%3C/svg%3E";
-
-// Article variables
-$article-title-font-size-m: 2.625rem;
-$article-title-line-height: 1.4;
-$article-meta-font-size: 0.8125rem;
-$article-meta-line-height: 1.6;
-
-// Button variables
-$button-font-weight: 400;
-$button-default-color: $global-secondary-background;
-$button-default-hover-background: $button-default-color;
-$button-default-hover-color: $global-muted-background;
-$button-default-active-background: $button-default-color;
-$button-default-active-color: $global-muted-background;
-$button-default-border: $button-default-color;
-$button-default-hover-border: $button-default-color;
-$button-default-active-border: $button-default-color;
-$button-warning-background: $global-warning-background;
-$button-warning-hover-background: darken($button-warning-background, 7%);
-$button-success-background: $global-success-background;
-$button-success-hover-background: darken($button-success-background, 5%);
-$inverse-button-primary-color: $global-secondary-background;
-$inverse-button-primary-hover-color: $global-secondary-background;
-
-// Card variables
-$card-small-body-padding-horizontal: 25px;
-$card-small-body-padding-vertical: 25px;
-$card-title-font-size: 1.25rem;
-$card-default-title-color: $base-heading-color;
-$card-default-color: $base-body-color;
-
-// Heading variables
-$heading-large-font-size-l: 5rem;
-$heading-divider-border-width: 1px;
-$heading-divider-border: #d0d5de;
-
-// Logo variables
-$logo-font-size: 1.35rem;
-$logo-color: $global-secondary-background;
-$logo-hover-color: $global-secondary-background;
-$inverse-logo-color: $global-muted-color;
-$inverse-logo-hover-color: $global-muted-color;
-
-// Navigation variables
-$nav-primary-item-font-size: $global-large-font-size;
-$navbar-background: $global-primary-background;
-$navbar-nav-item-height: 60px;
-$navbar-nav-item-color: $global-muted-color;
-$navbar-nav-item-active-color: $global-secondary-background;
-$navbar-nav-item-hover-color: lighten($global-secondary-background, 20%);
-$navbar-nav-item-font-size: 0.8rem;
-$navbar-nav-item-text-transform: uppercase;
-$navbar-toggle-color: lighten($global-secondary-background, 30%);
-$navbar-toggle-hover-color: $global-secondary-background;
-$navbar-dropdown-nav-item-color: $base-body-color;
-$offcanvas-bar-color-mode: dark;
-$offcanvas-bar-background: $global-muted-color;
-$subnav-item-font-size: $global-small-font-size;
-$subnav-item-text-transform: uppercase;
-$subnav-item-active-color: lighten($global-secondary-background, 30%);
-$subnav-item-hover-color: lighten($global-secondary-background, 20%);
-$link-muted-hover-color : lighten($global-secondary-background, 20%);
-
-// Search variables
-$search-default-background: $global-muted-color;
-$search-default-focus-background: $global-muted-color;
-$inverse-search-default-background: rgba(0, 0, 0, 0.3);
-$inverse-search-default-focus-background: rgba(0, 0, 0, 0.5);
-
-// Section variables
-$section-success-background: $global-success-background;
-$section-success-color-mode: light;
-$section-danger-background: $global-danger-background;
-$section-danger-color-mode: light;
-$section-large-padding-vertical-m: 120px;
-
-// Sidebar variables
-$sidebar-width: 200px;
-$sidebar-width-l: 300px;
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/_buttons.scss b/docs/_sass/uikit/components/_buttons.scss
deleted file mode 100644
index 00a4800604..0000000000
--- a/docs/_sass/uikit/components/_buttons.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-.button {
- background-color: #2841f9;
- border: 0;
- border-radius: 0;
- display: inline-block;
- height: 30px;
- line-height: inherit;
- margin-left: 5px;
- margin-right: 15px;
- padding: 0px;
- white-space: nowrap;
- width: 30px;
-}
-
-.button-text,
-input[type=submit] {
- background-color: #000;
- border: 0;
- border-radius: 20px;
- box-shadow: 0;
- color: #fff !important;
- display: inline-block;
- font-size: 20px;
- line-height: 30px;
- margin: 10px 0px;
- padding: 10px 30px;
-
- &:hover {
- color: #fff;
- text-decoration: none;
- }
-}
-
diff --git a/docs/_sass/uikit/components/_content.scss b/docs/_sass/uikit/components/_content.scss
deleted file mode 100644
index f7be03c6cc..0000000000
--- a/docs/_sass/uikit/components/_content.scss
+++ /dev/null
@@ -1,120 +0,0 @@
-.content {
- align-items: center;
- font-size: 22px;
- line-height: 30px;
- justify-content: space-between;
- margin-left: auto;
- margin-right: auto;
- max-width: 940px;
- padding: 80px 0px;
-
- h1 {
- font-size: 32px;
- font-weight: bold;
- line-height: 36px;
- margin: 20px 0px 30px;
- text-transform: uppercase;
- }
-
- table {
- width: 100%;
-
- td {
- float: none;
- width: 50%;
-
- a {
- color: #000;
- margin: 20px;
- vertical-align: middle;
-
- &:hover {
- color: #000;
- text-decoration: none;
- }
- }
- }
-
- @media all and (max-width: 700px) {
- td {
- float: left;
- width: 100%;
- }
- }
- }
-
- ul.plusminus {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li.minus {
- padding: 0px 0px 0px 40px;
- position: relative;
-
- &:before {
- content: "-";
- font-weight: 800;
- left: 16px;
- position: absolute;
- }
- }
-
- li.plus {
- padding: 0px 0px 0px 40px;
- position: relative;
-
- &:before {
- content: "+";
- font-weight: 800;
- left: 16px;
- position: absolute;
- }
- }
- }
-}
-
-.book-section {
- background-color: #000;
- background-image: url("#{$baseurl}/assets/images/pattern%20white_1.png");
- background-size: cover;
- color: #fff;
- font-weight: 600;
-
- a {
- color: #fff;
- text-decoration: underline;
-
- &:hover {
- color: #fff;
- }
- }
-
- div {
- background-color: transparent;
- background-image: none;
- }
-}
-
-.cta-section {
- text-align: center;
-
- strong {
- text-transform: uppercase;
- }
-}
-
-.patterns-section {
- a {
- color: #000;
- font-size: 32px;
- font-weight: 600;
- line-height: 36px;
- margin: 30px 0px 0px;
-
- &:hover {
- color: #000;
- text-decoration: none;
- }
- }
-}
diff --git a/docs/_sass/uikit/components/_footer.scss b/docs/_sass/uikit/components/_footer.scss
deleted file mode 100644
index 93216c2f02..0000000000
--- a/docs/_sass/uikit/components/_footer.scss
+++ /dev/null
@@ -1,49 +0,0 @@
-.footer-strip {
- background-image: url("#{$baseurl}/assets/images/bg.png");
- background-size: cover;
- color: #fff;
- font-weight: 700;
- font-size: 15px;
-}
-
-.footer-menu {
- align-items: center;
- display: block;
- flex-direction: row;
- justify-content: space-between;
- margin-left: auto;
- margin-right: auto;
- max-width: 940px;
-
- ul {
- list-style: none;
- margin: 0;
- padding: 0;
- text-align: center;
-
- li {
- display: inline-block;
- padding: 20px;
-
- a {
- color: #ffffff;
- text-decoration: none;
- }
- }
- }
-}
-
-.footer-title {
- align-items: center;
- display: block;
- flex-direction: row;
- justify-content: space-between;
- margin-left: auto;
- margin-right: auto;
- max-width: 940px;
- text-align: right;
-
- img {
- height: 40px
- }
-}
diff --git a/docs/_sass/uikit/components/_header.scss b/docs/_sass/uikit/components/_header.scss
deleted file mode 100644
index 59cd4c60e1..0000000000
--- a/docs/_sass/uikit/components/_header.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-.header-strip {
- background-color: #fff;
- color: #000;
- font-weight: 800;
- position: sticky;
- top: 0px;
- width: 100%;
- z-index: 9999999;
-}
-
-.header {
- margin-left: auto;
- margin-right: auto;
- max-width: 940px;
-
- img {
- height: 40px
- }
-}
diff --git a/docs/_sass/uikit/components/_import.components.scss b/docs/_sass/uikit/components/_import.components.scss
deleted file mode 100644
index c24ec00469..0000000000
--- a/docs/_sass/uikit/components/_import.components.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-// Base
-@import "https://github.com/variables";
-@import "https://github.com/mixin";
-@import "https://github.com/base";
-
-// Elements
-@import "https://github.com/link";
-@import "https://github.com/heading";
-@import "https://github.com/divider";
-@import "https://github.com/list";
-@import "https://github.com/description-list";
-@import "https://github.com/table";
-@import "https://github.com/icon";
-@import "https://github.com/form"; // After: Icon
-@import "https://github.com/button";
-
-// Layout
-@import "https://github.com/section";
-@import "https://github.com/container";
-@import "https://github.com/grid";
-@import "https://github.com/tile";
-@import "https://github.com/card";
-
-// Common
-@import "https://github.com/close"; // After: Icon
-@import "https://github.com/spinner"; // After: Icon
-@import "https://github.com/totop"; // After: Icon
-@import "https://github.com/alert"; // After: Close
-@import "https://github.com/badge";
-@import "https://github.com/label";
-@import "https://github.com/overlay"; // After: Icon
-@import "https://github.com/article"; // After: Subnav
-@import "https://github.com/comment"; // After: Subnav
-@import "https://github.com/search"; // After: Icon
-
-// Navs
-@import "https://github.com/nav";
-@import "https://github.com/navbar"; // After: Card, Grid, Nav, Icon, Search
-@import "https://github.com/subnav";
-@import "https://github.com/breadcrumb";
-@import "https://github.com/pagination";
-@import "https://github.com/tab";
-@import "https://github.com/slidenav"; // After: Icon
-@import "https://github.com/dotnav";
-
-// JavaScript
-@import "https://github.com/accordion";
-@import "https://github.com/drop"; // After: Card
-@import "https://github.com/dropdown"; // After: Card
-@import "https://github.com/modal"; // After: Close
-@import "https://github.com/sticky";
-@import "https://github.com/offcanvas";
-@import "https://github.com/switcher";
-// Scrollspy
-// Toggle
-// Scroll
diff --git a/docs/_sass/uikit/components/_import.scss b/docs/_sass/uikit/components/_import.scss
deleted file mode 100644
index fe35f261cf..0000000000
--- a/docs/_sass/uikit/components/_import.scss
+++ /dev/null
@@ -1,94 +0,0 @@
-// Base
-@import "https://github.com/variables";
-@import "https://github.com/mixin";
-@import "https://github.com/base";
-
-// Elements
-@import "https://github.com/link";
-@import "https://github.com/heading";
-@import "https://github.com/divider";
-@import "https://github.com/list";
-@import "https://github.com/description-list";
-@import "https://github.com/table";
-@import "https://github.com/icon";
-@import "https://github.com/form-range";
-@import "https://github.com/form"; // After: Icon, Form Range
-@import "https://github.com/button";
-@import "https://github.com/progress";
-
-// Layout
-@import "https://github.com/section";
-@import "https://github.com/container";
-@import "https://github.com/tile";
-@import "https://github.com/card";
-
-// Common
-@import "https://github.com/close"; // After: Icon
-@import "https://github.com/spinner"; // After: Icon
-@import "https://github.com/totop"; // After: Icon
-@import "https://github.com/marker"; // After: Icon
-@import "https://github.com/alert"; // After: Close
-@import "https://github.com/placeholder";
-@import "https://github.com/badge";
-@import "https://github.com/label";
-@import "https://github.com/overlay"; // After: Icon
-@import "https://github.com/article";
-@import "https://github.com/comment";
-@import "https://github.com/search"; // After: Icon
-
-// JavaScript
-@import "https://github.com/accordion";
-@import "https://github.com/drop"; // After: Card
-@import "https://github.com/dropdown"; // After: Card
-@import "https://github.com/modal"; // After: Close
-@import "https://github.com/slideshow";
-@import "https://github.com/slider";
-@import "https://github.com/sticky";
-@import "https://github.com/offcanvas";
-@import "https://github.com/switcher";
-@import "https://github.com/leader";
-@import "https://github.com/notification";
-@import "https://github.com/tooltip";
-@import "https://github.com/sortable";
-@import "https://github.com/countdown";
-// Scrollspy
-// Toggle
-// Scroll
-
-@import "https://github.com/grid";
-
-// Navs
-@import "https://github.com/nav";
-@import "https://github.com/navbar"; // After: Card, Grid, Nav, Icon, Search
-@import "https://github.com/subnav";
-@import "https://github.com/breadcrumb";
-@import "https://github.com/pagination";
-@import "https://github.com/tab";
-@import "https://github.com/slidenav"; // After: Icon
-@import "https://github.com/dotnav";
-@import "https://github.com/thumbnav";
-@import "https://github.com/iconnav";
-
-@import "https://github.com/lightbox"; // After: Close, Slidenav
-
-// Utilities
-@import "https://github.com/animation";
-@import "https://github.com/width";
-@import "https://github.com/height";
-@import "https://github.com/text";
-@import "https://github.com/column";
-@import "https://github.com/cover";
-@import "https://github.com/background";
-@import "https://github.com/align";
-@import "https://github.com/svg";
-@import "https://github.com/utility";
-@import "https://github.com/flex"; // After: Utility
-@import "https://github.com/margin";
-@import "https://github.com/padding";
-@import "https://github.com/position";
-@import "https://github.com/transition";
-@import "https://github.com/visibility";
-@import "https://github.com/inverse";
-
-// Need to be loaded last
-@import "https://github.com/print";
diff --git a/docs/_sass/uikit/components/_import.utilities.scss b/docs/_sass/uikit/components/_import.utilities.scss
deleted file mode 100644
index 53712a56e7..0000000000
--- a/docs/_sass/uikit/components/_import.utilities.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-// Utilities
-@import "https://github.com/animation";
-@import "https://github.com/width";
-@import "https://github.com/text";
-@import "https://github.com/column";
-@import "https://github.com/cover";
-@import "https://github.com/background";
-@import "https://github.com/align";
-@import "https://github.com/utility";
-@import "https://github.com/flex"; // After: Utility
-@import "https://github.com/margin";
-@import "https://github.com/padding";
-@import "https://github.com/position";
-@import "https://github.com/transition";
-@import "https://github.com/visibility";
-@import "https://github.com/inverse";
-
-// Need to be loaded last
-@import "https://github.com/print";
diff --git a/docs/_sass/uikit/components/_logo.scss b/docs/_sass/uikit/components/_logo.scss
deleted file mode 100644
index 90875da1bc..0000000000
--- a/docs/_sass/uikit/components/_logo.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.logo {
- font-size: 20px;
-
- a {
- color: inherit;
- text-decoration: none;
- }
-}
diff --git a/docs/_sass/uikit/components/_main-menu.scss b/docs/_sass/uikit/components/_main-menu.scss
deleted file mode 100644
index 457b9bbd0a..0000000000
--- a/docs/_sass/uikit/components/_main-menu.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-.main-menu {
- justify-content: flex-end;
-
- a {
- color: inherit;
- margin: 10px 20px;
- text-decoration: none;
- }
-
- button {
- background-color: inherit;
- border: none;
- color: inherit;
- margin: 0 20px 0 0;
- }
-}
-
-.dropdown-menu {
- background-color: #fff;
- color: #000;
-}
-
-.dropdown-item {
- font-size: 14px;
- font-weight: 800;
- padding: 10px 20px;
-
- &:hover {
- background-color: inherit;
- color: inherit;
- }
-}
diff --git a/docs/_sass/uikit/components/_navigation-bar.scss b/docs/_sass/uikit/components/_navigation-bar.scss
deleted file mode 100644
index 3cf2bdd76a..0000000000
--- a/docs/_sass/uikit/components/_navigation-bar.scss
+++ /dev/null
@@ -1,91 +0,0 @@
-.header {
- border-bottom: 1px solid #E2E8F0;
-}
-.navbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 1rem 1.5rem;
-}
-#hamburger {
- margin-bottom: 0;
- display: none;
-}
-.bar {
- display: block;
- width: 25px;
- height: 3px;
- margin: 5px auto;
- -webkit-transition: all 0.3s ease-in-out;
- transition: all 0.3s ease-in-out;
- background-color: #101010;
-}
-ul#nav-menu{
- list-style: none;
- display: flex;
- align-content: center;
- justify-content: space-evenly;
- margin-bottom:0;
- li{
- padding: 1rem;
- margin-bottom: 0;
- a{
- text-decoration: none;
- }
- }
-
-}
-#nav-item {
- margin-left: 5rem;
-}
-.nav-link {
- font-size: 1.6rem;
- font-weight: 400;
- color: #475569;
- &:hover {
- color: #482ff7;
- }
-}
-.nav-logo {
- font-size: 2.1rem;
- font-weight: 500;
- color: #482ff7;
- padding: 1rem;
-}
-@media only screen and (max-width: 768px) {
- #nav-menu {
- position: fixed;
- left: -100%;
- top: 5rem;
- flex-direction: column;
- background-color: #fff;
- width: 100%;
- border-radius: 10px;
- text-align: center;
- transition: 0.3s;
- box-shadow: 0 10px 27px rgba(0, 0, 0, 0.05);
- }
- #nav-menu.active {
- left: 0;
- }
- #nav-item {
- margin: 2.5rem 0;
- }
- #hamburger {
- display: block;
- cursor: pointer;
- }
- #hamburger.active {
- .bar {
- &:nth-child(2) {
- opacity: 0;
- }
- &:nth-child(1) {
- transform: translateY(8px) rotate(45deg);
- }
- &:nth-child(3) {
- transform: translateY(-8px) rotate(-45deg);
- }
- }
- }
-}
diff --git a/docs/_sass/uikit/components/_page.scss b/docs/_sass/uikit/components/_page.scss
deleted file mode 100644
index 7559ad4178..0000000000
--- a/docs/_sass/uikit/components/_page.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-.page {
- background-color: #fff;
- color: #333;
- font-family: Open-sans, sans-serif;
- font-size: 14px;
- line-height: 20px;
- margin: 0;
- min-height: 100%;
-}
diff --git a/docs/_sass/uikit/components/_theme.scss b/docs/_sass/uikit/components/_theme.scss
deleted file mode 100644
index f5a07ccc18..0000000000
--- a/docs/_sass/uikit/components/_theme.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&display=swap');
-
-/* colors */
-$primary: #e78a5fff;
-$secondary: #b75065ff;
-$info: #898ea3ff;
-$dark: #433a51ff;
-$light: #f5f5f5ff; /* applied fonts */
-
-
-html body {
- font-family: 'Open Sans', sans-serif;
- line-height: 1.5;
- background-color: $primary;
-
-}
-
-/* sections spacing and colors */
-.section {
- padding: 3rem 2rem;
-}
-
-.dark-section {
- background-color: $dark;
-}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/_title.scss b/docs/_sass/uikit/components/_title.scss
deleted file mode 100644
index 556a2526d2..0000000000
--- a/docs/_sass/uikit/components/_title.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.title-strip {
- background-image: url("#{$baseurl}/assets/images/bg.png");
- background-size: cover;
- color: #fff;
- font-size: 25px;
- font-weight: 500;
- line-height: 30px;
-}
-
-.title {
- align-items: center;
- justify-content: space-between;
- max-width: 940px;
- margin-left: auto;
- margin-right: auto;
-
- h1 {
- font-size: 60px;
- font-weight: bold;
- text-transform: uppercase;
- max-height: 300px;
- }
- h3 {
- line-height: 50px;
- }
-}
diff --git a/docs/_sass/uikit/components/accordion.scss b/docs/_sass/uikit/components/accordion.scss
deleted file mode 100644
index 477675469e..0000000000
--- a/docs/_sass/uikit/components/accordion.scss
+++ /dev/null
@@ -1,107 +0,0 @@
-// Name: Accordion
-// Description: Component to create accordions
-//
-// Component: `uk-accordion`
-//
-// Sub-objects: `uk-accordion-title`
-// `uk-accordion-content`
-//
-// States: `uk-open`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$accordion-item-margin-top: $global-margin !default;
-
-$accordion-title-font-size: $global-medium-font-size !default;
-$accordion-title-line-height: 1.4 !default;
-$accordion-title-color: $global-emphasis-color !default;
-$accordion-title-hover-color: $global-color !default;
-
-$accordion-content-margin-top: $global-margin !default;
-
-
-/* ========================================================================
- Component: Accordion
- ========================================================================== */
-
-.uk-accordion {
- padding: 0;
- list-style: none;
- @if(mixin-exists(hook-accordion)) {@include hook-accordion();}
-}
-
-
-/* Item
- ========================================================================== */
-
-.uk-accordion > :nth-child(n+2) {
- margin-top: $accordion-item-margin-top;
- @if(mixin-exists(hook-accordion-item)) {@include hook-accordion-item();}
-}
-
-
-/* Title
- ========================================================================== */
-
-.uk-accordion-title {
- display: block;
- font-size: $accordion-title-font-size;
- line-height: $accordion-title-line-height;
- color: $accordion-title-color;
- @if(mixin-exists(hook-accordion-title)) {@include hook-accordion-title();}
-}
-
-/* Hover + Focus */
-.uk-accordion-title:hover,
-.uk-accordion-title:focus {
- color: $accordion-title-hover-color;
- text-decoration: none;
- outline: none;
- @if(mixin-exists(hook-accordion-title-hover)) {@include hook-accordion-title-hover();}
-}
-
-
-/* Content
- ========================================================================== */
-
-.uk-accordion-content {
- display: flow-root;
- margin-top: $accordion-content-margin-top;
- @if(mixin-exists(hook-accordion-content)) {@include hook-accordion-content();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
- .uk-accordion-content > :last-child { margin-bottom: 0; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-accordion-misc)) {@include hook-accordion-misc();}
-
-// @mixin hook-accordion(){}
-// @mixin hook-accordion-item(){}
-// @mixin hook-accordion-title(){}
-// @mixin hook-accordion-title-hover(){}
-// @mixin hook-accordion-content(){}
-// @mixin hook-accordion-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-accordion-title-color: $inverse-global-emphasis-color !default;
-$inverse-accordion-title-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-accordion-item(){}
-// @mixin hook-inverse-accordion-title(){}
-// @mixin hook-inverse-accordion-title-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/alert.scss b/docs/_sass/uikit/components/alert.scss
deleted file mode 100644
index 236cc6787e..0000000000
--- a/docs/_sass/uikit/components/alert.scss
+++ /dev/null
@@ -1,147 +0,0 @@
-// Name: Alert
-// Description: Component to create alert messages
-//
-// Component: `uk-alert`
-//
-// Adopted: `uk-alert-close`
-//
-// Modifiers: `uk-alert-primary`
-// `uk-alert-success`
-// `uk-alert-warning`
-// `uk-alert-danger`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$alert-margin-vertical: $global-margin !default;
-$alert-padding: 15px !default;
-$alert-padding-right: $alert-padding + 14px !default;
-$alert-background: $global-muted-background !default;
-$alert-color: $global-color !default;
-
-$alert-close-top: $alert-padding + 5px !default;
-$alert-close-right: $alert-padding !default;
-
-$alert-primary-background: lighten(mix(white, $global-primary-background, 40%), 20%) !default;
-$alert-primary-color: $global-primary-background !default;
-
-$alert-success-background: lighten(mix(white, $global-success-background, 40%), 25%) !default;
-$alert-success-color: $global-success-background !default;
-
-$alert-warning-background: lighten(mix(white, $global-warning-background, 45%), 15%) !default;
-$alert-warning-color: $global-warning-background !default;
-
-$alert-danger-background: lighten(mix(white, $global-danger-background, 40%), 20%) !default;
-$alert-danger-color: $global-danger-background !default;
-
-
-/* ========================================================================
- Component: Alert
- ========================================================================== */
-
-.uk-alert {
- position: relative;
- margin-bottom: $alert-margin-vertical;
- padding: $alert-padding $alert-padding-right $alert-padding $alert-padding;
- background: $alert-background;
- color: $alert-color;
- @if(mixin-exists(hook-alert)) {@include hook-alert();}
-}
-
-/* Add margin if adjacent element */
-* + .uk-alert { margin-top: $alert-margin-vertical; }
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-alert > :last-child { margin-bottom: 0; }
-
-
-/* Close
- * Adopts `uk-close`
- ========================================================================== */
-
-.uk-alert-close {
- position: absolute;
- top: $alert-close-top;
- right: $alert-close-right;
- @if(mixin-exists(hook-alert-close)) {@include hook-alert-close();}
-}
-
-/*
- * Remove margin from adjacent element
- */
-
-.uk-alert-close:first-child + * { margin-top: 0; }
-
-/*
- * Hover + Focus
- */
-
-.uk-alert-close:hover,
-.uk-alert-close:focus {
- @if(mixin-exists(hook-alert-close-hover)) {@include hook-alert-close-hover();}
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Primary
- */
-
-.uk-alert-primary {
- background: $alert-primary-background;
- color: $alert-primary-color;
- @if(mixin-exists(hook-alert-primary)) {@include hook-alert-primary();}
-}
-
-/*
- * Success
- */
-
-.uk-alert-success {
- background: $alert-success-background;
- color: $alert-success-color;
- @if(mixin-exists(hook-alert-success)) {@include hook-alert-success();}
-}
-
-/*
- * Warning
- */
-
-.uk-alert-warning {
- background: $alert-warning-background;
- color: $alert-warning-color;
- @if(mixin-exists(hook-alert-warning)) {@include hook-alert-warning();}
-}
-
-/*
- * Danger
- */
-
-.uk-alert-danger {
- background: $alert-danger-background;
- color: $alert-danger-color;
- @if(mixin-exists(hook-alert-danger)) {@include hook-alert-danger();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-alert-misc)) {@include hook-alert-misc();}
-
-// @mixin hook-alert(){}
-// @mixin hook-alert-close(){}
-// @mixin hook-alert-close-hover(){}
-// @mixin hook-alert-primary(){}
-// @mixin hook-alert-success(){}
-// @mixin hook-alert-warning(){}
-// @mixin hook-alert-danger(){}
-// @mixin hook-alert-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/align.scss b/docs/_sass/uikit/components/align.scss
deleted file mode 100644
index bee6702bca..0000000000
--- a/docs/_sass/uikit/components/align.scss
+++ /dev/null
@@ -1,142 +0,0 @@
-// Name: Align
-// Description: Utilities to align embedded content
-//
-// Component: `uk-align-left-*`
-// `uk-align-right-*`
-// `uk-align-center`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$align-margin-horizontal: $global-gutter !default;
-$align-margin-vertical: $global-gutter !default;
-
-$align-margin-horizontal-l: $global-medium-gutter !default;
-
-
-/* ========================================================================
- Component: Align
- ========================================================================== */
-
-/*
- * Default
- */
-
-[class*='uk-align'] {
- display: block;
- margin-bottom: $align-margin-vertical;
-}
-
-* + [class*='uk-align'] { margin-top: $align-margin-vertical; }
-
-/*
- * Center
- */
-
-.uk-align-center {
- margin-left: auto;
- margin-right: auto;
-}
-
-/*
- * Left/Right
- */
-
-.uk-align-left {
- margin-top: 0;
- margin-right: $align-margin-horizontal;
- float: left;
-}
-
-.uk-align-right {
- margin-top: 0;
- margin-left: $align-margin-horizontal;
- float: right;
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-align-left\@s {
- margin-top: 0;
- margin-right: $align-margin-horizontal;
- float: left;
- }
-
- .uk-align-right\@s {
- margin-top: 0;
- margin-left: $align-margin-horizontal;
- float: right;
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-align-left\@m {
- margin-top: 0;
- margin-right: $align-margin-horizontal;
- float: left;
- }
-
- .uk-align-right\@m {
- margin-top: 0;
- margin-left: $align-margin-horizontal;
- float: right;
- }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-align-left\@l {
- margin-top: 0;
- float: left;
- }
-
- .uk-align-right\@l {
- margin-top: 0;
- float: right;
- }
-
- .uk-align-left,
- .uk-align-left\@s,
- .uk-align-left\@m,
- .uk-align-left\@l { margin-right: $align-margin-horizontal-l; }
-
- .uk-align-right,
- .uk-align-right\@s,
- .uk-align-right\@m,
- .uk-align-right\@l { margin-left: $align-margin-horizontal-l; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-align-left\@xl {
- margin-top: 0;
- margin-right: $align-margin-horizontal-l;
- float: left;
- }
-
- .uk-align-right\@xl {
- margin-top: 0;
- margin-left: $align-margin-horizontal-l;
- float: right;
- }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-align-misc)) {@include hook-align-misc();}
-
-// @mixin hook-align-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/animation.scss b/docs/_sass/uikit/components/animation.scss
deleted file mode 100644
index c955238499..0000000000
--- a/docs/_sass/uikit/components/animation.scss
+++ /dev/null
@@ -1,430 +0,0 @@
-// Name: Animation
-// Description: Utilities for keyframe animations
-//
-// Component: `uk-animation-*`
-//
-// Modifiers: `uk-animation-fade`
-// `uk-animation-scale-up`
-// `uk-animation-scale-down`
-// `uk-animation-slide-top-*`
-// `uk-animation-slide-bottom-*`
-// `uk-animation-slide-left-*`
-// `uk-animation-slide-right-*`
-// `uk-animation-kenburns`
-// `uk-animation-shake`
-// `uk-animation-stroke`
-// `uk-animation-reverse`
-// `uk-animation-fast`
-//
-// Sub-objects: `uk-animation-toggle`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$animation-duration: 0.5s !default;
-$animation-fade-duration: 0.8s !default;
-$animation-stroke-duration: 2s !default;
-$animation-kenburns-duration: 15s !default;
-$animation-fast-duration: 0.1s !default;
-
-$animation-slide-small-translate: 10px !default;
-$animation-slide-medium-translate: 50px !default;
-
-
-/* ========================================================================
- Component: Animation
- ========================================================================== */
-
-[class*='uk-animation-'] {
- animation-duration: $animation-duration;
- animation-timing-function: ease-out;
- animation-fill-mode: both;
-}
-
-
-/* Animations
- ========================================================================== */
-
-/*
- * Fade
- */
-
-.uk-animation-fade {
- animation-name: uk-fade;
- animation-duration: $animation-fade-duration;
- animation-timing-function: linear;
-}
-
-/*
- * Scale
- */
-
-.uk-animation-scale-up { animation-name: uk-fade-scale-02; }
-.uk-animation-scale-down { animation-name: uk-fade-scale-18; }
-
-/*
- * Slide
- */
-
-.uk-animation-slide-top { animation-name: uk-fade-top; }
-.uk-animation-slide-bottom { animation-name: uk-fade-bottom; }
-.uk-animation-slide-left { animation-name: uk-fade-left; }
-.uk-animation-slide-right { animation-name: uk-fade-right; }
-
-/*
- * Slide Small
- */
-
-.uk-animation-slide-top-small { animation-name: uk-fade-top-small; }
-.uk-animation-slide-bottom-small { animation-name: uk-fade-bottom-small; }
-.uk-animation-slide-left-small { animation-name: uk-fade-left-small; }
-.uk-animation-slide-right-small { animation-name: uk-fade-right-small; }
-
-/*
- * Slide Medium
- */
-
-.uk-animation-slide-top-medium { animation-name: uk-fade-top-medium; }
-.uk-animation-slide-bottom-medium { animation-name: uk-fade-bottom-medium; }
-.uk-animation-slide-left-medium { animation-name: uk-fade-left-medium; }
-.uk-animation-slide-right-medium { animation-name: uk-fade-right-medium; }
-
-/*
- * Kenburns
- */
-
-.uk-animation-kenburns {
- animation-name: uk-scale-kenburns;
- animation-duration: $animation-kenburns-duration;
-}
-
-/*
- * Shake
- */
-
-.uk-animation-shake { animation-name: uk-shake; }
-
-/*
- * SVG Stroke
- * The `--uk-animation-stroke` custom property contains the longest path length.
- * Set it manually or use `uk-svg="stroke-animation: true"` to set it automatically.
- * All strokes are animated by the same pace and doesn't end simultaneously.
- * To end simultaneously, `pathLength="1"` could be used, but it's not working in Safari yet.
- */
-
-.uk-animation-stroke {
- animation-name: uk-stroke;
- stroke-dasharray: var(--uk-animation-stroke);
- animation-duration: $animation-stroke-duration;
-}
-
-
-/* Direction modifier
- ========================================================================== */
-
- .uk-animation-reverse {
- animation-direction: reverse;
- animation-timing-function: ease-in;
-}
-
-
-/* Duration modifier
- ========================================================================== */
-
- .uk-animation-fast { animation-duration: $animation-fast-duration; }
-
-
-/* Toggle (Hover + Focus)
-========================================================================== */
-
-/*
- * The toggle is triggered on touch devices using `:focus` and tabindex
- */
-
-.uk-animation-toggle:not(:hover):not(:focus) [class*='uk-animation-'] { animation-name: none; }
-
-/*
- * 1. Prevent tab highlighting on iOS.
- */
-
-.uk-animation-toggle {
- /* 1 */
- -webkit-tap-highlight-color: transparent;
-}
-
-/*
- * Remove outline for `tabindex`
- */
-
-.uk-animation-toggle:focus { outline: none; }
-
-
-/* Keyframes used by animation classes
- ========================================================================== */
-
-/*
- * Fade
- */
-
-@keyframes uk-fade {
- 0% { opacity: 0; }
- 100% { opacity: 1; }
-}
-
-/*
- * Slide Top
- */
-
-@keyframes uk-fade-top {
- 0% {
- opacity: 0;
- transform: translateY(-100%);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Bottom
- */
-
-@keyframes uk-fade-bottom {
- 0% {
- opacity: 0;
- transform: translateY(100%);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Left
- */
-
-@keyframes uk-fade-left {
- 0% {
- opacity: 0;
- transform: translateX(-100%);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Slide Right
- */
-
-@keyframes uk-fade-right {
- 0% {
- opacity: 0;
- transform: translateX(100%);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Slide Top Small
- */
-
-@keyframes uk-fade-top-small {
- 0% {
- opacity: 0;
- transform: translateY(-$animation-slide-small-translate);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Bottom Small
- */
-
-@keyframes uk-fade-bottom-small {
- 0% {
- opacity: 0;
- transform: translateY($animation-slide-small-translate);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Left Small
- */
-
-@keyframes uk-fade-left-small {
- 0% {
- opacity: 0;
- transform: translateX(-$animation-slide-small-translate);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Slide Right Small
- */
-
-@keyframes uk-fade-right-small {
- 0% {
- opacity: 0;
- transform: translateX($animation-slide-small-translate);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Slide Top Medium
- */
-
-@keyframes uk-fade-top-medium {
- 0% {
- opacity: 0;
- transform: translateY(-$animation-slide-medium-translate);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Bottom Medium
- */
-
-@keyframes uk-fade-bottom-medium {
- 0% {
- opacity: 0;
- transform: translateY($animation-slide-medium-translate);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/*
- * Slide Left Medium
- */
-
-@keyframes uk-fade-left-medium {
- 0% {
- opacity: 0;
- transform: translateX(-$animation-slide-medium-translate);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Slide Right Medium
- */
-
-@keyframes uk-fade-right-medium {
- 0% {
- opacity: 0;
- transform: translateX($animation-slide-medium-translate);
- }
- 100% {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-/*
- * Scale Up
- */
-
-@keyframes uk-fade-scale-02 {
- 0% {
- opacity: 0;
- transform: scale(0.2);
- }
- 100% {
- opacity: 1;
- transform: scale(1);
- }
-}
-
-/*
- * Scale Down
- */
-
-@keyframes uk-fade-scale-18 {
- 0% {
- opacity: 0;
- transform: scale(1.8);
- }
- 100% {
- opacity: 1;
- transform: scale(1);
- }
-}
-
-/*
- * Kenburns
- */
-
-@keyframes uk-scale-kenburns {
- 0% { transform: scale(1); }
- 100% { transform: scale(1.2); }
-}
-
-/*
- * Shake
- */
-
-@keyframes uk-shake {
- 0%, 100% { transform: translateX(0); }
- 10% { transform: translateX(-9px); }
- 20% { transform: translateX(8px); }
- 30% { transform: translateX(-7px); }
- 40% { transform: translateX(6px); }
- 50% { transform: translateX(-5px); }
- 60% { transform: translateX(4px); }
- 70% { transform: translateX(-3px); }
- 80% { transform: translateX(2px); }
- 90% { transform: translateX(-1px); }
-}
-
-/*
- * Stroke
- */
-
- @keyframes uk-stroke {
- 0% { stroke-dashoffset: var(--uk-animation-stroke); }
- 100% { stroke-dashoffset: 0; }
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-animation-misc)) {@include hook-animation-misc();}
-
-// @mixin hook-animation-misc(){}
diff --git a/docs/_sass/uikit/components/article.scss b/docs/_sass/uikit/components/article.scss
deleted file mode 100644
index 4fa4e2b2d0..0000000000
--- a/docs/_sass/uikit/components/article.scss
+++ /dev/null
@@ -1,99 +0,0 @@
-// Name: Article
-// Description: Component to create articles
-//
-// Component: `uk-article`
-//
-// Sub-objects: `uk-article-title`
-// `uk-article-meta`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$article-margin-top: $global-large-margin !default;
-
-$article-title-font-size-m: $global-2xlarge-font-size !default;
-$article-title-font-size: $article-title-font-size-m * 0.85 !default;
-$article-title-line-height: 1.2 !default;
-
-$article-meta-font-size: $global-small-font-size !default;
-$article-meta-line-height: 1.4 !default;
-$article-meta-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Article
- ========================================================================== */
-
-.uk-article {
- display: flow-root;
- @if(mixin-exists(hook-article)) {@include hook-article();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-article > :last-child { margin-bottom: 0; }
-
-
-/* Adjacent sibling
- ========================================================================== */
-
-.uk-article + .uk-article {
- margin-top: $article-margin-top;
- @if(mixin-exists(hook-article-adjacent)) {@include hook-article-adjacent();}
-}
-
-
-/* Title
- ========================================================================== */
-
-.uk-article-title {
- font-size: $article-title-font-size;
- line-height: $article-title-line-height;
- @if(mixin-exists(hook-article-title)) {@include hook-article-title();}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-article-title { font-size: $article-title-font-size-m; }
-
-}
-
-
-/* Meta
- ========================================================================== */
-
-.uk-article-meta {
- font-size: $article-meta-font-size;
- line-height: $article-meta-line-height;
- color: $article-meta-color;
- @if(mixin-exists(hook-article-meta)) {@include hook-article-meta();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-article-misc)) {@include hook-article-misc();}
-
-// @mixin hook-article(){}
-// @mixin hook-article-adjacent(){}
-// @mixin hook-article-title(){}
-// @mixin hook-article-meta(){}
-// @mixin hook-article-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-article-meta-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-article-title(){}
-// @mixin hook-inverse-article-meta(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/background.scss b/docs/_sass/uikit/components/background.scss
deleted file mode 100644
index d486672b59..0000000000
--- a/docs/_sass/uikit/components/background.scss
+++ /dev/null
@@ -1,148 +0,0 @@
-// Name: Background
-// Description: Utilities for backgrounds
-//
-// Component: `uk-background-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$background-default-background: $global-background !default;
-$background-muted-background: $global-muted-background !default;
-$background-primary-background: $global-primary-background !default;
-$background-secondary-background: $global-secondary-background !default;
-
-
-/* ========================================================================
- Component: Background
- ========================================================================== */
-
-
-/* Color
- ========================================================================== */
-
-.uk-background-default { background-color: $background-default-background; }
-.uk-background-muted { background-color: $background-muted-background; }
-.uk-background-primary { background-color: $background-primary-background; }
-.uk-background-secondary { background-color: $background-secondary-background; }
-
-
-/* Size
- ========================================================================== */
-
-.uk-background-cover,
-.uk-background-contain,
-.uk-background-width-1-1,
-.uk-background-height-1-1 {
- background-position: 50% 50%;
- background-repeat: no-repeat;
-}
-
-.uk-background-cover { background-size: cover; }
-.uk-background-contain { background-size: contain; }
-.uk-background-width-1-1 { background-size: 100%; }
-.uk-background-height-1-1 { background-size: auto 100%; }
-
-
-/* Position
- ========================================================================== */
-
-.uk-background-top-left { background-position: 0 0; }
-.uk-background-top-center { background-position: 50% 0; }
-.uk-background-top-right { background-position: 100% 0; }
-.uk-background-center-left { background-position: 0 50%; }
-.uk-background-center-center { background-position: 50% 50%; }
-.uk-background-center-right { background-position: 100% 50%; }
-.uk-background-bottom-left { background-position: 0 100%; }
-.uk-background-bottom-center { background-position: 50% 100%; }
-.uk-background-bottom-right { background-position: 100% 100%; }
-
-
-/* Repeat
- ========================================================================== */
-
-.uk-background-norepeat { background-repeat: no-repeat; }
-
-
-/* Attachment
- ========================================================================== */
-
-/*
- * 1. Fix bug introduced in Chrome 67: the background image is not visible if any element on the page uses `translate3d`
- */
-
-.uk-background-fixed {
- background-attachment: fixed;
- /* 1 */
- backface-visibility: hidden;
-}
-
-/*
- * Exclude touch devices because `fixed` doesn't work on iOS and Android
- */
-
-@media (pointer: coarse) {
- .uk-background-fixed { background-attachment: scroll; }
-}
-
-
-/* Image
- ========================================================================== */
-
-/* Phone portrait and smaller */
-@media (max-width: $breakpoint-xsmall-max) {
-
- .uk-background-image\@s { background-image: none !important; }
-
-}
-
-/* Phone landscape and smaller */
-@media (max-width: $breakpoint-small-max) {
-
- .uk-background-image\@m { background-image: none !important; }
-
-}
-
-/* Tablet landscape and smaller */
-@media (max-width: $breakpoint-medium-max) {
-
- .uk-background-image\@l { background-image: none !important; }
-
-}
-
-/* Desktop and smaller */
-@media (max-width: $breakpoint-large-max) {
-
- .uk-background-image\@xl {background-image: none !important; }
-
-}
-
-
-/* Blend modes
- ========================================================================== */
-
-.uk-background-blend-multiply { background-blend-mode: multiply; }
-.uk-background-blend-screen { background-blend-mode: screen; }
-.uk-background-blend-overlay { background-blend-mode: overlay; }
-.uk-background-blend-darken { background-blend-mode: darken; }
-.uk-background-blend-lighten { background-blend-mode: lighten; }
-.uk-background-blend-color-dodge { background-blend-mode: color-dodge; }
-.uk-background-blend-color-burn { background-blend-mode: color-burn; }
-.uk-background-blend-hard-light { background-blend-mode: hard-light; }
-.uk-background-blend-soft-light { background-blend-mode: soft-light; }
-.uk-background-blend-difference { background-blend-mode: difference; }
-.uk-background-blend-exclusion { background-blend-mode: exclusion; }
-.uk-background-blend-hue { background-blend-mode: hue; }
-.uk-background-blend-saturation { background-blend-mode: saturation; }
-.uk-background-blend-color { background-blend-mode: color; }
-.uk-background-blend-luminosity { background-blend-mode: luminosity; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-background-misc)) {@include hook-background-misc();}
-
-// @mixin hook-background-misc(){}
diff --git a/docs/_sass/uikit/components/badge.scss b/docs/_sass/uikit/components/badge.scss
deleted file mode 100644
index 1df2236bf9..0000000000
--- a/docs/_sass/uikit/components/badge.scss
+++ /dev/null
@@ -1,80 +0,0 @@
-// Name: Badge
-// Description: Component to create notification badges
-//
-// Component: `uk-badge`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$badge-size: 18px !default;
-$badge-padding-vertical: 0 !default;
-$badge-padding-horizontal: 5px !default;
-$badge-border-radius: 500px !default;
-$badge-background: $global-primary-background !default;
-$badge-color: $global-inverse-color !default;
-$badge-font-size: 11px !default;
-
-
-/* ========================================================================
- Component: Badge
- ========================================================================== */
-
-/*
- * 1. Style
- * 2. Center child vertically and horizontally
- */
-
-.uk-badge {
- box-sizing: border-box;
- min-width: $badge-size;
- height: $badge-size;
- padding: $badge-padding-vertical $badge-padding-horizontal;
- border-radius: $badge-border-radius;
- vertical-align: middle;
- /* 1 */
- background: $badge-background;
- color: $badge-color !important;
- font-size: $badge-font-size;
- /* 2 */
- display: inline-flex;
- justify-content: center;
- align-items: center;
- line-height: 0;
- @if(mixin-exists(hook-badge)) {@include hook-badge();}
-}
-
-/*
- * Required for `a`
- */
-
-.uk-badge:hover,
-.uk-badge:focus {
- text-decoration: none;
- outline: none;
- @if(mixin-exists(hook-badge-hover)) {@include hook-badge-hover();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-badge-misc)) {@include hook-badge-misc();}
-
-// @mixin hook-badge(){}
-// @mixin hook-badge-hover(){}
-// @mixin hook-badge-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-badge-background: $inverse-global-primary-background !default;
-$inverse-badge-color: $inverse-global-inverse-color !default;
-
-
-
-// @mixin hook-inverse-badge(){}
-// @mixin hook-inverse-badge-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/base.scss b/docs/_sass/uikit/components/base.scss
deleted file mode 100644
index 188af873fd..0000000000
--- a/docs/_sass/uikit/components/base.scss
+++ /dev/null
@@ -1,628 +0,0 @@
-// Name: Base
-// Description: Default values for HTML elements
-//
-// Component: `uk-link`
-// `uk-h1`, `uk-h2`, `uk-h3`, `uk-h4`, `uk-h5`, `uk-h6`
-// `uk-hr`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$base-body-background: $global-background !default;
-$base-body-font-family: $global-font-family !default;
-$base-body-font-weight: normal !default;
-$base-body-font-size: $global-font-size !default;
-$base-body-line-height: $global-line-height !default;
-$base-body-color: $global-color !default;
-
-$base-link-color: $global-link-color !default;
-$base-link-text-decoration: none !default;
-$base-link-hover-color: $global-link-hover-color !default;
-$base-link-hover-text-decoration: underline !default;
-
-$base-strong-font-weight: bolder !default;
-$base-code-font-size: $global-small-font-size !default;
-$base-code-font-family: Consolas, monaco, monospace !default;
-$base-code-color: $global-danger-background !default;
-$base-em-color: $global-danger-background !default;
-$base-ins-background: #ffd !default;
-$base-ins-color: $global-color !default;
-$base-mark-background: #ffd !default;
-$base-mark-color: $global-color !default;
-$base-quote-font-style: italic !default;
-$base-small-font-size: 80% !default;
-
-$base-margin-vertical: $global-margin !default;
-
-$base-heading-font-family: $global-font-family !default;
-$base-heading-font-weight: normal !default;
-$base-heading-color: $global-emphasis-color !default;
-$base-heading-text-transform: none !default;
-$base-heading-margin-top: $global-medium-margin !default;
-$base-h1-font-size-m: $global-2xlarge-font-size !default;
-$base-h1-font-size: $base-h1-font-size-m * 0.85 !default;
-$base-h1-line-height: 1.2 !default;
-$base-h2-font-size-m: $global-xlarge-font-size !default;
-$base-h2-font-size: $base-h2-font-size-m * 0.85 !default;
-$base-h2-line-height: 1.3 !default;
-$base-h3-font-size: $global-large-font-size !default;
-$base-h3-line-height: 1.4 !default;
-$base-h4-font-size: $global-medium-font-size !default;
-$base-h4-line-height: 1.4 !default;
-$base-h5-font-size: $global-font-size !default;
-$base-h5-line-height: 1.4 !default;
-$base-h6-font-size: $global-small-font-size !default;
-$base-h6-line-height: 1.4 !default;
-
-$base-list-padding-left: 30px !default;
-
-$base-hr-margin-vertical: $global-margin !default;
-$base-hr-border-width: $global-border-width !default;
-$base-hr-border: $global-border !default;
-
-$base-blockquote-font-size: $global-medium-font-size !default;
-$base-blockquote-line-height: 1.5 !default;
-$base-blockquote-font-style: italic !default;
-$base-blockquote-margin-vertical: $global-margin !default;
-$base-blockquote-footer-margin-top: $global-small-margin !default;
-$base-blockquote-footer-font-size: $global-small-font-size !default;
-$base-blockquote-footer-line-height: 1.5 !default;
-
-$base-pre-font-size: $global-small-font-size !default;
-$base-pre-line-height: 1.5 !default;
-$base-pre-font-family: $base-code-font-family !default;
-$base-pre-color: $global-color !default;
-
-$base-selection-background: #39f !default;
-$base-selection-color: $global-inverse-color !default;
-
-
-/* ========================================================================
- Component: Base
- ========================================================================== */
-
-/*
- * 1. Set `font-size` to support `rem` units
- * Not using `font` property because a leading hyphen (e.g. -apple-system) causes the font to break in IE11 and Edge
- * 2. Prevent adjustments of font size after orientation changes in iOS.
- * 3. Style
- */
-
-html {
- /* 1 */
- font-family: $base-body-font-family;
- font-size: $base-body-font-size;
- font-weight: $base-body-font-weight;
- line-height: $base-body-line-height;
- /* 2 */
- -webkit-text-size-adjust: 100%;
- /* 3 */
- background: $base-body-background;
- color: $base-body-color;
- @if(mixin-exists(hook-base-body)) {@include hook-base-body();}
-}
-
-/*
- * Remove the margin in all browsers.
- */
-
-body { margin: 0; }
-
-
-/* Links
- ========================================================================== */
-
-/*
- * Remove the outline on focused links when they are also active or hovered
- */
-
-a:active,
-a:hover { outline: none; }
-
-/*
- * Style
- */
-
-a,
-.uk-link {
- color: $base-link-color;
- text-decoration: $base-link-text-decoration;
- cursor: pointer;
- @if(mixin-exists(hook-base-link)) {@include hook-base-link();}
-}
-
-a:hover,
-.uk-link:hover,
-.uk-link-toggle:hover .uk-link,
-.uk-link-toggle:focus .uk-link {
- color: $base-link-hover-color;
- text-decoration: $base-link-hover-text-decoration;
- @if(mixin-exists(hook-base-link-hover)) {@include hook-base-link-hover();}
-}
-
-
-/* Text-level semantics
- ========================================================================== */
-
-/*
- * 1. Add the correct text decoration in Edge.
- * 2. The shorthand declaration `underline dotted` is not supported in Safari.
- */
-
-abbr[title] {
- /* 1 */
- text-decoration: underline dotted;
- /* 2 */
- -webkit-text-decoration-style: dotted;
-}
-
-/*
- * Add the correct font weight in Chrome, Edge, and Safari.
- */
-
-b,
-strong { font-weight: $base-strong-font-weight; }
-
-/*
- * 1. Consolas has a better baseline in running text compared to `Courier`
- * 2. Correct the odd `em` font sizing in all browsers.
- * 3. Style
- */
-
-:not(pre) > code,
-:not(pre) > kbd,
-:not(pre) > samp {
- /* 1 */
- font-family: $base-code-font-family;
- /* 2 */
- font-size: $base-code-font-size;
- /* 3 */
- color: $base-code-color;
- white-space: nowrap;
- @if(mixin-exists(hook-base-code)) {@include hook-base-code();}
-}
-
-/*
- * Emphasize
- */
-
-em { color: $base-em-color; }
-
-/*
- * Insert
- */
-
-ins {
- background: $base-ins-background;
- color: $base-ins-color;
- text-decoration: none;
-}
-
-/*
- * Mark
- */
-
-mark {
- background: $base-mark-background;
- color: $base-mark-color;
-}
-
-/*
- * Quote
- */
-
-q { font-style: $base-quote-font-style; }
-
-/*
- * Add the correct font size in all browsers.
- */
-
-small { font-size: $base-small-font-size; }
-
-/*
- * Prevents `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup { top: -0.5em; }
-sub { bottom: -0.25em; }
-
-
-/* Embedded content
- ========================================================================== */
-
-/*
- * Remove the gap between embedded content and the bottom of their containers.
- */
-
-audio,
-canvas,
-iframe,
-img,
-svg,
-video { vertical-align: middle; }
-
-/*
- * 1. Add responsiveness.
- * 2. Auto-scale the height. Only needed if `height` attribute is present.
- * 3. Corrects responsive `max-width` behavior if padding and border are used.
- * 4. Exclude SVGs for IE11 because they don't preserve their aspect ratio.
- */
-
-canvas,
-img,
-video {
- /* 1 */
- max-width: 100%;
- /* 2 */
- height: auto;
- /* 3 */
- box-sizing: border-box;
-}
-
-/* 4 */
-@supports (display: block) {
-
- svg {
- max-width: 100%;
- height: auto;
- box-sizing: border-box;
- }
-
-}
-
-/*
- * Hide the overflow in IE.
- */
-
-svg:not(:root) { overflow: hidden; }
-
-/*
- * 1. Fix lazy loading images if parent element is set to `display: inline` and has `overflow: hidden`.
- * 2. Hide `alt` text for lazy loading images.
- * Note: Selector for background while loading img[data-src*='.jpg'][src*='data:image'] { background: grey; }
- */
-
-img:not([src]) {
- /* 1 */
- min-width: 1px;
- /* 2 */
- visibility: hidden;
-}
-
-/*
- * Iframe
- * Remove border in all browsers
- */
-
-iframe { border: 0; }
-
-
-/* Block elements
- ========================================================================== */
-
-/*
- * Margins
- */
-
-p,
-ul,
-ol,
-dl,
-pre,
-address,
-fieldset,
-figure { margin: 0 0 $base-margin-vertical 0; }
-
-/* Add margin if adjacent element */
-* + p,
-* + ul,
-* + ol,
-* + dl,
-* + pre,
-* + address,
-* + fieldset,
-* + figure { margin-top: $base-margin-vertical; }
-
-
-/* Headings
- ========================================================================== */
-
-h1, .uk-h1,
-h2, .uk-h2,
-h3, .uk-h3,
-h4, .uk-h4,
-h5, .uk-h5,
-h6, .uk-h6,
-.uk-heading-small,
-.uk-heading-medium,
-.uk-heading-large,
-.uk-heading-xlarge,
-.uk-heading-2xlarge {
- margin: 0 0 $base-margin-vertical 0;
- font-family: $base-heading-font-family;
- font-weight: $base-heading-font-weight;
- color: $base-heading-color;
- text-transform: $base-heading-text-transform;
- @if(mixin-exists(hook-base-heading)) {@include hook-base-heading();}
-}
-
-/* Add margin if adjacent element */
-* + h1, * + .uk-h1,
-* + h2, * + .uk-h2,
-* + h3, * + .uk-h3,
-* + h4, * + .uk-h4,
-* + h5, * + .uk-h5,
-* + h6, * + .uk-h6,
-* + .uk-heading-small,
-* + .uk-heading-medium,
-* + .uk-heading-large,
-* + .uk-heading-xlarge,
-* + .uk-heading-2xlarge { margin-top: $base-heading-margin-top; }
-
-/*
- * Sizes
- */
-
-h1, .uk-h1 {
- font-size: $base-h1-font-size;
- line-height: $base-h1-line-height;
- @if(mixin-exists(hook-base-h1)) {@include hook-base-h1();}
-}
-
-h2, .uk-h2 {
- font-size: $base-h2-font-size;
- line-height: $base-h2-line-height;
- @if(mixin-exists(hook-base-h2)) {@include hook-base-h2();}
-}
-
-h3, .uk-h3 {
- font-size: $base-h3-font-size;
- line-height: $base-h3-line-height;
- @if(mixin-exists(hook-base-h3)) {@include hook-base-h3();}
-}
-
-h4, .uk-h4 {
- font-size: $base-h4-font-size;
- line-height: $base-h4-line-height;
- @if(mixin-exists(hook-base-h4)) {@include hook-base-h4();}
-}
-
-h5, .uk-h5 {
- font-size: $base-h5-font-size;
- line-height: $base-h5-line-height;
- @if(mixin-exists(hook-base-h5)) {@include hook-base-h5();}
-}
-
-h6, .uk-h6 {
- font-size: $base-h6-font-size;
- line-height: $base-h6-line-height;
- @if(mixin-exists(hook-base-h6)) {@include hook-base-h6();}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- h1, .uk-h1 { font-size: $base-h1-font-size-m; }
- h2, .uk-h2 { font-size: $base-h2-font-size-m; }
-
-}
-
-
-/* Lists
- ========================================================================== */
-
-ul,
-ol { padding-left: $base-list-padding-left; }
-
-/*
- * Reset margin for nested lists
- */
-
-ul > li > ul,
-ul > li > ol,
-ol > li > ol,
-ol > li > ul { margin: 0; }
-
-
-/* Description lists
- ========================================================================== */
-
-dt { font-weight: bold; }
-dd { margin-left: 0; }
-
-
-/* Horizontal rules
- ========================================================================== */
-
-/*
- * 1. Show the overflow in Chrome, Edge and IE.
- * 2. Add the correct text-align in Edge and IE.
- * 3. Style
- */
-
-hr, .uk-hr {
- /* 1 */
- overflow: visible;
- /* 2 */
- text-align: inherit;
- /* 3 */
- margin: 0 0 $base-hr-margin-vertical 0;
- border: 0;
- border-top: $base-hr-border-width solid $base-hr-border;
- @if(mixin-exists(hook-base-hr)) {@include hook-base-hr();}
-}
-
-/* Add margin if adjacent element */
-* + hr,
-* + .uk-hr { margin-top: $base-hr-margin-vertical }
-
-
-/* Address
- ========================================================================== */
-
-address { font-style: normal; }
-
-
-/* Blockquotes
- ========================================================================== */
-
-blockquote {
- margin: 0 0 $base-blockquote-margin-vertical 0;
- font-size: $base-blockquote-font-size;
- line-height: $base-blockquote-line-height;
- font-style: $base-blockquote-font-style;
- @if(mixin-exists(hook-base-blockquote)) {@include hook-base-blockquote();}
-}
-
-/* Add margin if adjacent element */
-* + blockquote { margin-top: $base-blockquote-margin-vertical; }
-
-/*
- * Content
- */
-
-blockquote p:last-of-type { margin-bottom: 0; }
-
-blockquote footer {
- margin-top: $base-blockquote-footer-margin-top;
- font-size: $base-blockquote-footer-font-size;
- line-height: $base-blockquote-footer-line-height;
- @if(mixin-exists(hook-base-blockquote-footer)) {@include hook-base-blockquote-footer();}
-}
-
-
-/* Preformatted text
- ========================================================================== */
-
-/*
- * 1. Contain overflow in all browsers.
- */
-
-pre {
- font: $base-pre-font-size unquote("/") $base-pre-line-height $base-pre-font-family;
- color: $base-pre-color;
- -moz-tab-size: 4;
- tab-size: 4;
- /* 1 */
- overflow: auto;
- @if(mixin-exists(hook-base-pre)) {@include hook-base-pre();}
-}
-
-pre code { font-family: $base-pre-font-family; }
-
-
-/* Selection pseudo-element
- ========================================================================== */
-
-::selection {
- background: $base-selection-background;
- color: $base-selection-color;
- text-shadow: none;
-}
-
-
-/* HTML5 elements
- ========================================================================== */
-
-/*
- * 1. Add the correct display in Edge, IE 10+, and Firefox.
- * 2. Add the correct display in IE.
- */
-
-details, /* 1 */
-main { /* 2 */
- display: block;
-}
-
-/*
- * Add the correct display in all browsers.
- */
-
-summary { display: list-item; }
-
-/*
- * Add the correct display in IE.
- */
-
-template { display: none; }
-
-
-/* Pass media breakpoints to JS
- ========================================================================== */
-
-/*
- * Breakpoints
- */
-
-.uk-breakpoint-s::before { content: '#{$breakpoint-small}'; }
-.uk-breakpoint-m::before { content: '#{$breakpoint-medium}'; }
-.uk-breakpoint-l::before { content: '#{$breakpoint-large}'; }
-.uk-breakpoint-xl::before { content: '#{$breakpoint-xlarge}'; }
-
-:root {
- --uk-breakpoint-s: #{$breakpoint-small};
- --uk-breakpoint-m: #{$breakpoint-medium};
- --uk-breakpoint-l: #{$breakpoint-large};
- --uk-breakpoint-xl: #{$breakpoint-xlarge};
-}
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-base-misc)) {@include hook-base-misc();}
-
-// @mixin hook-base-body(){}
-// @mixin hook-base-link(){}
-// @mixin hook-base-link-hover(){}
-// @mixin hook-base-code(){}
-// @mixin hook-base-heading(){}
-// @mixin hook-base-h1(){}
-// @mixin hook-base-h2(){}
-// @mixin hook-base-h3(){}
-// @mixin hook-base-h4(){}
-// @mixin hook-base-h5(){}
-// @mixin hook-base-h6(){}
-// @mixin hook-base-hr(){}
-// @mixin hook-base-blockquote(){}
-// @mixin hook-base-blockquote-footer(){}
-// @mixin hook-base-pre(){}
-// @mixin hook-base-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-base-color: $inverse-global-color !default;
-$inverse-base-link-color: $inverse-global-emphasis-color !default;
-$inverse-base-link-hover-color: $inverse-global-emphasis-color !default;
-$inverse-base-code-color: $inverse-global-color !default;
-$inverse-base-em-color: $inverse-global-emphasis-color !default;
-$inverse-base-heading-color: $inverse-global-emphasis-color !default;
-$inverse-base-hr-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-base-link(){}
-// @mixin hook-inverse-base-link-hover(){}
-// @mixin hook-inverse-base-code(){}
-// @mixin hook-inverse-base-heading(){}
-// @mixin hook-inverse-base-h1(){}
-// @mixin hook-inverse-base-h2(){}
-// @mixin hook-inverse-base-h3(){}
-// @mixin hook-inverse-base-h4(){}
-// @mixin hook-inverse-base-h5(){}
-// @mixin hook-inverse-base-h6(){}
-// @mixin hook-inverse-base-blockquote(){}
-// @mixin hook-inverse-base-blockquote-footer(){}
-// @mixin hook-inverse-base-hr(){}
diff --git a/docs/_sass/uikit/components/breadcrumb.scss b/docs/_sass/uikit/components/breadcrumb.scss
deleted file mode 100644
index 3035391765..0000000000
--- a/docs/_sass/uikit/components/breadcrumb.scss
+++ /dev/null
@@ -1,123 +0,0 @@
-// Name: Breadcrumb
-// Description: Component to create a breadcrumb navigation
-//
-// Component: `uk-breadcrumb`
-//
-// States: `uk-disabled`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$breadcrumb-item-font-size: $global-small-font-size !default;
-$breadcrumb-item-color: $global-muted-color !default;
-$breadcrumb-item-hover-color: $global-color !default;
-$breadcrumb-item-hover-text-decoration: none !default;
-$breadcrumb-item-active-color: $global-color !default;
-
-$breadcrumb-divider: "/" !default;
-$breadcrumb-divider-margin-horizontal: 20px !default;
-$breadcrumb-divider-font-size: $breadcrumb-item-font-size !default;
-$breadcrumb-divider-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Breadcrumb
- ========================================================================== */
-
-/*
- * Reset list
- */
-
-.uk-breadcrumb {
- padding: 0;
- list-style: none;
- @if(mixin-exists(hook-breadcrumb)) {@include hook-breadcrumb();}
-}
-
-/*
- * 1. Doesn't generate any box and replaced by child boxes
- */
-
-.uk-breadcrumb > * { display: contents; }
-
-
-/* Items
- ========================================================================== */
-
-.uk-breadcrumb > * > * {
- font-size: $breadcrumb-item-font-size;
- color: $breadcrumb-item-color;
- @if(mixin-exists(hook-breadcrumb-item)) {@include hook-breadcrumb-item();}
-}
-
-/* Hover + Focus */
-.uk-breadcrumb > * > :hover,
-.uk-breadcrumb > * > :focus {
- color: $breadcrumb-item-hover-color;
- text-decoration: $breadcrumb-item-hover-text-decoration;
- @if(mixin-exists(hook-breadcrumb-item-hover)) {@include hook-breadcrumb-item-hover();}
-}
-
-/* Disabled */
-.uk-breadcrumb > .uk-disabled > * {
- @if(mixin-exists(hook-breadcrumb-item-disabled)) {@include hook-breadcrumb-item-disabled();}
-}
-
-/* Active */
-.uk-breadcrumb > :last-child > span,
-.uk-breadcrumb > :last-child > a:not([href]) {
- color: $breadcrumb-item-active-color;
- @if(mixin-exists(hook-breadcrumb-item-active)) {@include hook-breadcrumb-item-active();}
-}
-
-/*
- * Divider
- * `nth-child` makes it also work without JS if it's only one row
- * 1. Remove space between inline block elements.
- * 2. Style
- */
-
-.uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before {
- content: $breadcrumb-divider;
- display: inline-block;
- /* 1 */
- margin: 0 $breadcrumb-divider-margin-horizontal 0 unquote('calc(#{$breadcrumb-divider-margin-horizontal} - 4px)');
- /* 2 */
- font-size: $breadcrumb-divider-font-size;
- color: $breadcrumb-divider-color;
- @if(mixin-exists(hook-breadcrumb-divider)) {@include hook-breadcrumb-divider();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-breadcrumb-misc)) {@include hook-breadcrumb-misc();}
-
-// @mixin hook-breadcrumb(){}
-// @mixin hook-breadcrumb-item(){}
-// @mixin hook-breadcrumb-item-hover(){}
-// @mixin hook-breadcrumb-item-disabled(){}
-// @mixin hook-breadcrumb-item-active(){}
-// @mixin hook-breadcrumb-divider(){}
-// @mixin hook-breadcrumb-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-breadcrumb-item-color: $inverse-global-muted-color !default;
-$inverse-breadcrumb-item-hover-color: $inverse-global-color !default;
-$inverse-breadcrumb-item-active-color: $inverse-global-color !default;
-$inverse-breadcrumb-divider-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-breadcrumb-item(){}
-// @mixin hook-inverse-breadcrumb-item-hover(){}
-// @mixin hook-inverse-breadcrumb-item-disabled(){}
-// @mixin hook-inverse-breadcrumb-item-active(){}
-// @mixin hook-inverse-breadcrumb-divider(){}
diff --git a/docs/_sass/uikit/components/button.scss b/docs/_sass/uikit/components/button.scss
deleted file mode 100644
index 752791793f..0000000000
--- a/docs/_sass/uikit/components/button.scss
+++ /dev/null
@@ -1,452 +0,0 @@
-// Name: Button
-// Description: Styles for buttons
-//
-// Component: `uk-button`
-//
-// Sub-objects: `uk-button-group`
-//
-// Modifiers: `uk-button-default`
-// `uk-button-primary`
-// `uk-button-secondary`
-// `uk-button-danger`
-// `uk-button-text`
-// `uk-button-link`
-// `uk-button-small`
-// `uk-button-large`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$button-line-height: $global-control-height !default;
-$button-small-line-height: $global-control-small-height !default;
-$button-large-line-height: $global-control-large-height !default;
-
-$button-font-size: $global-font-size !default;
-$button-small-font-size: $global-small-font-size !default;
-$button-large-font-size: $global-medium-font-size !default;
-
-$button-padding-horizontal: $global-gutter !default;
-$button-small-padding-horizontal: $global-small-gutter !default;
-$button-large-padding-horizontal: $global-medium-gutter !default;
-
-$button-default-background: $global-muted-background !default;
-$button-default-color: $global-emphasis-color !default;
-$button-default-hover-background: darken($button-default-background, 5%) !default;
-$button-default-hover-color: $global-emphasis-color !default;
-$button-default-active-background: darken($button-default-background, 10%) !default;
-$button-default-active-color: $global-emphasis-color !default;
-
-$button-primary-background: $global-primary-background !default;
-$button-primary-color: $global-inverse-color !default;
-$button-primary-hover-background: darken($button-primary-background, 5%) !default;
-$button-primary-hover-color: $global-inverse-color !default;
-$button-primary-active-background: darken($button-primary-background, 10%) !default;
-$button-primary-active-color: $global-inverse-color !default;
-
-$button-secondary-background: $global-secondary-background !default;
-$button-secondary-color: $global-inverse-color !default;
-$button-secondary-hover-background: darken($button-secondary-background, 5%) !default;
-$button-secondary-hover-color: $global-inverse-color !default;
-$button-secondary-active-background: darken($button-secondary-background, 10%) !default;
-$button-secondary-active-color: $global-inverse-color !default;
-
-$button-danger-background: $global-danger-background !default;
-$button-danger-color: $global-inverse-color !default;
-$button-danger-hover-background: darken($button-danger-background, 5%) !default;
-$button-danger-hover-color: $global-inverse-color !default;
-$button-danger-active-background: darken($button-danger-background, 10%) !default;
-$button-danger-active-color: $global-inverse-color !default;
-
-$button-disabled-background: $global-muted-background !default;
-$button-disabled-color: $global-muted-color !default;
-
-$button-text-line-height: $global-line-height !default;
-$button-text-color: $global-emphasis-color !default;
-$button-text-hover-color: $global-muted-color !default;
-$button-text-disabled-color: $global-muted-color !default;
-
-$button-link-line-height: $global-line-height !default;
-$button-link-color: $global-emphasis-color !default;
-$button-link-hover-color: $global-muted-color !default;
-$button-link-hover-text-decoration: none !default;
-$button-link-disabled-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Button
- ========================================================================== */
-
-/*
- * 1. Remove margins in Chrome, Safari and Opera.
- * 2. Remove borders for `button`.
- * 3. Address `overflow` set to `hidden` in IE.
- * 4. Correct `font` properties and `color` not being inherited for `button`.
- * 5. Remove the inheritance of text transform in Edge, Firefox, and IE.
- * 6. Remove default style for `input type="submit"`in iOS.
- * 7. Style
- * 8. `line-height` is used to create a height because it also centers the text vertically for `a` elements.
- * Better would be to use height and flexbox to center the text vertically but flexbox doesn't work in Firefox on `button` elements.
- * 9. Align text if button has a width
- * 10. Required for `a`.
- */
-
-.uk-button {
- /* 1 */
- margin: 0;
- /* 2 */
- border: none;
- /* 3 */
- overflow: visible;
- /* 4 */
- font: inherit;
- color: inherit;
- /* 5 */
- text-transform: none;
- /* 6 */
- -webkit-appearance: none;
- border-radius: 0;
- /* 7 */
- display: inline-block;
- box-sizing: border-box;
- padding: 0 $button-padding-horizontal;
- vertical-align: middle;
- font-size: $button-font-size;
- /* 8 */
- line-height: $button-line-height;
- /* 9 */
- text-align: center;
- /* 10 */
- text-decoration: none;
- @if(mixin-exists(hook-button)) {@include hook-button();}
-}
-
-.uk-button:not(:disabled) { cursor: pointer; }
-
-/*
- * Remove the inner border and padding in Firefox.
- */
-
-.uk-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/* Hover */
-.uk-button:hover {
- /* 9 */
- text-decoration: none;
- @if(mixin-exists(hook-button-hover)) {@include hook-button-hover();}
-}
-
-/* Focus */
-.uk-button:focus {
- outline: none;
- @if(mixin-exists(hook-button-focus)) {@include hook-button-focus();}
-}
-
-/* OnClick + Active */
-.uk-button:active,
-.uk-button.uk-active {
- @if(mixin-exists(hook-button-active)) {@include hook-button-active();}
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Default
- */
-
-.uk-button-default {
- background-color: $button-default-background;
- color: $button-default-color;
- @if(mixin-exists(hook-button-default)) {@include hook-button-default();}
-}
-
-/* Hover + Focus */
-.uk-button-default:hover,
-.uk-button-default:focus {
- background-color: $button-default-hover-background;
- color: $button-default-hover-color;
- @if(mixin-exists(hook-button-default-hover)) {@include hook-button-default-hover();}
-}
-
-/* OnClick + Active */
-.uk-button-default:active,
-.uk-button-default.uk-active {
- background-color: $button-default-active-background;
- color: $button-default-active-color;
- @if(mixin-exists(hook-button-default-active)) {@include hook-button-default-active();}
-}
-
-/*
- * Primary
- */
-
-.uk-button-primary {
- background-color: $button-primary-background;
- color: $button-primary-color;
- @if(mixin-exists(hook-button-primary)) {@include hook-button-primary();}
-}
-
-/* Hover + Focus */
-.uk-button-primary:hover,
-.uk-button-primary:focus {
- background-color: $button-primary-hover-background;
- color: $button-primary-hover-color;
- @if(mixin-exists(hook-button-primary-hover)) {@include hook-button-primary-hover();}
-}
-
-/* OnClick + Active */
-.uk-button-primary:active,
-.uk-button-primary.uk-active {
- background-color: $button-primary-active-background;
- color: $button-primary-active-color;
- @if(mixin-exists(hook-button-primary-active)) {@include hook-button-primary-active();}
-}
-
-/*
- * Secondary
- */
-
-.uk-button-secondary {
- background-color: $button-secondary-background;
- color: $button-secondary-color;
- @if(mixin-exists(hook-button-secondary)) {@include hook-button-secondary();}
-}
-
-/* Hover + Focus */
-.uk-button-secondary:hover,
-.uk-button-secondary:focus {
- background-color: $button-secondary-hover-background;
- color: $button-secondary-hover-color;
- @if(mixin-exists(hook-button-secondary-hover)) {@include hook-button-secondary-hover();}
-}
-
-/* OnClick + Active */
-.uk-button-secondary:active,
-.uk-button-secondary.uk-active {
- background-color: $button-secondary-active-background;
- color: $button-secondary-active-color;
- @if(mixin-exists(hook-button-secondary-active)) {@include hook-button-secondary-active();}
-}
-
-/*
- * Danger
- */
-
-.uk-button-danger {
- background-color: $button-danger-background;
- color: $button-danger-color;
- @if(mixin-exists(hook-button-danger)) {@include hook-button-danger();}
-}
-
-/* Hover + Focus */
-.uk-button-danger:hover,
-.uk-button-danger:focus {
- background-color: $button-danger-hover-background;
- color: $button-danger-hover-color;
- @if(mixin-exists(hook-button-danger-hover)) {@include hook-button-danger-hover();}
-}
-
-/* OnClick + Active */
-.uk-button-danger:active,
-.uk-button-danger.uk-active {
- background-color: $button-danger-active-background;
- color: $button-danger-active-color;
- @if(mixin-exists(hook-button-danger-active)) {@include hook-button-danger-active();}
-}
-
-/*
- * Disabled
- * The same for all style modifiers
- */
-
-.uk-button-default:disabled,
-.uk-button-primary:disabled,
-.uk-button-secondary:disabled,
-.uk-button-danger:disabled {
- background-color: $button-disabled-background;
- color: $button-disabled-color;
- @if(mixin-exists(hook-button-disabled)) {@include hook-button-disabled();}
-}
-
-
-/* Size modifiers
- ========================================================================== */
-
-.uk-button-small {
- padding: 0 $button-small-padding-horizontal;
- line-height: $button-small-line-height;
- font-size: $button-small-font-size;
- @if(mixin-exists(hook-button-small)) {@include hook-button-small();}
-}
-
-.uk-button-large {
- padding: 0 $button-large-padding-horizontal;
- line-height: $button-large-line-height;
- font-size: $button-large-font-size;
- @if(mixin-exists(hook-button-large)) {@include hook-button-large();}
-}
-
-
-/* Text modifiers
- ========================================================================== */
-
-/*
- * Text
- * 1. Reset
- * 2. Style
- */
-
-.uk-button-text {
- /* 1 */
- padding: 0;
- line-height: $button-text-line-height;
- background: none;
- /* 2 */
- color: $button-text-color;
- @if(mixin-exists(hook-button-text)) {@include hook-button-text();}
-}
-
-/* Hover + Focus */
-.uk-button-text:hover,
-.uk-button-text:focus {
- color: $button-text-hover-color;
- @if(mixin-exists(hook-button-text-hover)) {@include hook-button-text-hover();}
-}
-
-/* Disabled */
-.uk-button-text:disabled {
- color: $button-text-disabled-color;
- @if(mixin-exists(hook-button-text-disabled)) {@include hook-button-text-disabled();}
-}
-
-/*
- * Link
- * 1. Reset
- * 2. Style
- */
-
-.uk-button-link {
- /* 1 */
- padding: 0;
- line-height: $button-link-line-height;
- background: none;
- /* 2 */
- color: $button-link-color;
- @if(mixin-exists(hook-button-link)) {@include hook-button-link();}
-}
-
-/* Hover + Focus */
-.uk-button-link:hover,
-.uk-button-link:focus {
- color: $button-link-hover-color;
- text-decoration: $button-link-hover-text-decoration;
-}
-
-/* Disabled */
-.uk-button-link:disabled {
- color: $button-link-disabled-color;
- text-decoration: none;
-}
-
-
-/* Group
- ========================================================================== */
-
-/*
- * 1. Using `flex` instead of `inline-block` to prevent whitespace betweent child elements
- * 2. Behave like button
- * 3. Create position context
- */
-
-.uk-button-group {
- /* 1 */
- display: inline-flex;
- /* 2 */
- vertical-align: middle;
- /* 3 */
- position: relative;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-button-misc)) {@include hook-button-misc();}
-
-// @mixin hook-button(){}
-// @mixin hook-button-hover(){}
-// @mixin hook-button-focus(){}
-// @mixin hook-button-active(){}
-// @mixin hook-button-default(){}
-// @mixin hook-button-default-hover(){}
-// @mixin hook-button-default-active(){}
-// @mixin hook-button-primary(){}
-// @mixin hook-button-primary-hover(){}
-// @mixin hook-button-primary-active(){}
-// @mixin hook-button-secondary(){}
-// @mixin hook-button-secondary-hover(){}
-// @mixin hook-button-secondary-active(){}
-// @mixin hook-button-danger(){}
-// @mixin hook-button-danger-hover(){}
-// @mixin hook-button-danger-active(){}
-// @mixin hook-button-disabled(){}
-// @mixin hook-button-small(){}
-// @mixin hook-button-large(){}
-// @mixin hook-button-text(){}
-// @mixin hook-button-text-hover(){}
-// @mixin hook-button-text-disabled(){}
-// @mixin hook-button-link(){}
-// @mixin hook-button-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-button-default-background: $inverse-global-primary-background !default;
-$inverse-button-default-color: $inverse-global-inverse-color !default;
-$inverse-button-default-hover-background: darken($inverse-button-default-background, 5%) !default;
-$inverse-button-default-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-default-active-background: darken($inverse-button-default-background, 10%) !default;
-$inverse-button-default-active-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-background: $inverse-global-primary-background !default;
-$inverse-button-primary-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-hover-background: darken($inverse-button-primary-background, 5%) !default;
-$inverse-button-primary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-active-background: darken($inverse-button-primary-background, 10%) !default;
-$inverse-button-primary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-background: $inverse-global-primary-background !default;
-$inverse-button-secondary-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-hover-background: darken($inverse-button-secondary-background, 5%) !default;
-$inverse-button-secondary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-active-background: darken($inverse-button-secondary-background, 10%) !default;
-$inverse-button-secondary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-text-color: $inverse-global-emphasis-color !default;
-$inverse-button-text-hover-color: $inverse-global-muted-color !default;
-$inverse-button-text-disabled-color: $inverse-global-muted-color !default;
-$inverse-button-link-color: $inverse-global-emphasis-color !default;
-$inverse-button-link-hover-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-button-default(){}
-// @mixin hook-inverse-button-default-hover(){}
-// @mixin hook-inverse-button-default-active(){}
-// @mixin hook-inverse-button-primary(){}
-// @mixin hook-inverse-button-primary-hover(){}
-// @mixin hook-inverse-button-primary-active(){}
-// @mixin hook-inverse-button-secondary(){}
-// @mixin hook-inverse-button-secondary-hover(){}
-// @mixin hook-inverse-button-secondary-active(){}
-// @mixin hook-inverse-button-text(){}
-// @mixin hook-inverse-button-text-hover(){}
-// @mixin hook-inverse-button-text-disabled(){}
-// @mixin hook-inverse-button-link(){}
diff --git a/docs/_sass/uikit/components/card.scss b/docs/_sass/uikit/components/card.scss
deleted file mode 100644
index e529cc0eec..0000000000
--- a/docs/_sass/uikit/components/card.scss
+++ /dev/null
@@ -1,384 +0,0 @@
-// Name: Card
-// Description: Component to create boxed content containers
-//
-// Component: `uk-card`
-//
-// Sub-objects: `uk-card-body`
-// `uk-card-header`
-// `uk-card-footer`
-// `uk-card-media-*`
-// `uk-card-title`
-// `uk-card-badge`
-//
-// Modifiers: `uk-card-hover`
-// `uk-card-default`
-// `uk-card-primary`
-// `uk-card-secondary`
-// `uk-card-small`
-// `uk-card-large`
-//
-// Uses: `uk-grid-stack`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$card-body-padding-horizontal: $global-gutter !default;
-$card-body-padding-vertical: $global-gutter !default;
-
-$card-body-padding-horizontal-l: $global-medium-gutter !default;
-$card-body-padding-vertical-l: $global-medium-gutter !default;
-
-$card-header-padding-horizontal: $global-gutter !default;
-$card-header-padding-vertical: round($global-gutter / 2) !default;
-
-$card-header-padding-horizontal-l: $global-medium-gutter !default;
-$card-header-padding-vertical-l: round($global-medium-gutter / 2) !default;
-
-$card-footer-padding-horizontal: $global-gutter !default;
-$card-footer-padding-vertical: ($global-gutter / 2) !default;
-
-$card-footer-padding-horizontal-l: $global-medium-gutter !default;
-$card-footer-padding-vertical-l: round($global-medium-gutter / 2) !default;
-
-$card-title-font-size: $global-large-font-size !default;
-$card-title-line-height: 1.4 !default;
-
-$card-badge-top: 15px !default;
-$card-badge-right: 15px !default;
-$card-badge-height: 22px !default;
-$card-badge-padding-horizontal: 10px !default;
-$card-badge-background: $global-primary-background !default;
-$card-badge-color: $global-inverse-color !default;
-$card-badge-font-size: $global-small-font-size !default;
-
-$card-hover-background: $global-muted-background !default;
-
-$card-default-background: $global-muted-background !default;
-$card-default-color: $global-color !default;
-$card-default-title-color: $global-emphasis-color !default;
-$card-default-hover-background: darken($card-default-background, 5%) !default;
-
-$card-primary-background: $global-primary-background !default;
-$card-primary-color: $global-inverse-color !default;
-$card-primary-title-color: $card-primary-color !default;
-$card-primary-hover-background: darken($card-primary-background, 5%) !default;
-$card-primary-color-mode: light !default;
-
-$card-secondary-background: $global-secondary-background !default;
-$card-secondary-color: $global-inverse-color !default;
-$card-secondary-title-color: $card-secondary-color !default;
-$card-secondary-hover-background: darken($card-secondary-background, 5%) !default;
-$card-secondary-color-mode: light !default;
-
-$card-small-body-padding-horizontal: $global-margin !default;
-$card-small-body-padding-vertical: $global-margin !default;
-$card-small-header-padding-horizontal: $global-margin !default;
-$card-small-header-padding-vertical: round($global-margin / 1.5) !default;
-$card-small-footer-padding-horizontal: $global-margin !default;
-$card-small-footer-padding-vertical: round($global-margin / 1.5) !default;
-
-$card-large-body-padding-horizontal-l: $global-large-gutter !default;
-$card-large-body-padding-vertical-l: $global-large-gutter !default;
-$card-large-header-padding-horizontal-l: $global-large-gutter !default;
-$card-large-header-padding-vertical-l: round($global-large-gutter / 2) !default;
-$card-large-footer-padding-horizontal-l: $global-large-gutter !default;
-$card-large-footer-padding-vertical-l: round($global-large-gutter / 2) !default;
-
-
-/* ========================================================================
- Component: Card
- ========================================================================== */
-
-.uk-card {
- position: relative;
- box-sizing: border-box;
- @if(mixin-exists(hook-card)) {@include hook-card();}
-}
-
-
-/* Sections
- ========================================================================== */
-
-.uk-card-body {
- display: flow-root;
- padding: $card-body-padding-vertical $card-body-padding-horizontal;
- @if(mixin-exists(hook-card-body)) {@include hook-card-body();}
-}
-
-.uk-card-header {
- display: flow-root;
- padding: $card-header-padding-vertical $card-header-padding-horizontal;
- @if(mixin-exists(hook-card-header)) {@include hook-card-header();}
-}
-
-.uk-card-footer {
- display: flow-root;
- padding: $card-footer-padding-vertical $card-footer-padding-horizontal;
- @if(mixin-exists(hook-card-footer)) {@include hook-card-footer();}
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-card-body { padding: $card-body-padding-vertical-l $card-body-padding-horizontal-l; }
-
- .uk-card-header { padding: $card-header-padding-vertical-l $card-header-padding-horizontal-l; }
-
- .uk-card-footer { padding: $card-footer-padding-vertical-l $card-footer-padding-horizontal-l; }
-
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-card-body > :last-child,
-.uk-card-header > :last-child,
-.uk-card-footer > :last-child { margin-bottom: 0; }
-
-
-/* Media
- ========================================================================== */
-
-/*
- * Reserved alignment modifier to style the media element, e.g. with `border-radius`
- * Implemented by the theme
- */
-
-[class*='uk-card-media'] {
- @if(mixin-exists(hook-card-media)) {@include hook-card-media();}
-}
-
-.uk-card-media-top,
-.uk-grid-stack > .uk-card-media-left,
-.uk-grid-stack > .uk-card-media-right {
- @if(mixin-exists(hook-card-media-top)) {@include hook-card-media-top();}
-}
-
-.uk-card-media-bottom {
- @if(mixin-exists(hook-card-media-bottom)) {@include hook-card-media-bottom();}
-}
-
-:not(.uk-grid-stack) > .uk-card-media-left {
- @if(mixin-exists(hook-card-media-left)) {@include hook-card-media-left();}
-}
-
-:not(.uk-grid-stack) > .uk-card-media-right {
- @if(mixin-exists(hook-card-media-right)) {@include hook-card-media-right();}
-}
-
-
-/* Title
- ========================================================================== */
-
-.uk-card-title {
- font-size: $card-title-font-size;
- line-height: $card-title-line-height;
- @if(mixin-exists(hook-card-title)) {@include hook-card-title();}
-}
-
-
-/* Badge
- ========================================================================== */
-
-/*
- * 1. Position
- * 2. Size
- * 3. Style
- * 4. Center child vertically
- */
-
-.uk-card-badge {
- /* 1 */
- position: absolute;
- top: $card-badge-top;
- right: $card-badge-right;
- z-index: 1;
- /* 2 */
- height: $card-badge-height;
- padding: 0 $card-badge-padding-horizontal;
- /* 3 */
- background: $card-badge-background;
- color: $card-badge-color;
- font-size: $card-badge-font-size;
- /* 4 */
- display: flex;
- justify-content: center;
- align-items: center;
- line-height: 0;
- @if(mixin-exists(hook-card-badge)) {@include hook-card-badge();}
-}
-
-/*
- * Remove margin from adjacent element
- */
-
-.uk-card-badge:first-child + * { margin-top: 0; }
-
-
-/* Hover modifier
- ========================================================================== */
-
-.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover {
- background: $card-hover-background;
- @if(mixin-exists(hook-card-hover)) {@include hook-card-hover();}
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Default
- * Note: Header and Footer are only implemented for the default style
- */
-
-.uk-card-default {
- background: $card-default-background;
- color: $card-default-color;
- @if(mixin-exists(hook-card-default)) {@include hook-card-default();}
-}
-
-.uk-card-default .uk-card-title {
- color: $card-default-title-color;
- @if(mixin-exists(hook-card-default-title)) {@include hook-card-default-title();}
-}
-
-.uk-card-default.uk-card-hover:hover {
- background-color: $card-default-hover-background;
- @if(mixin-exists(hook-card-default-hover)) {@include hook-card-default-hover();}
-}
-
-.uk-card-default .uk-card-header {
- @if(mixin-exists(hook-card-default-header)) {@include hook-card-default-header();}
-}
-
-.uk-card-default .uk-card-footer {
- @if(mixin-exists(hook-card-default-footer)) {@include hook-card-default-footer();}
-}
-
-/*
- * Primary
- */
-
-.uk-card-primary {
- background: $card-primary-background;
- color: $card-primary-color;
- @if(mixin-exists(hook-card-primary)) {@include hook-card-primary();}
-}
-
-.uk-card-primary .uk-card-title {
- color: $card-primary-title-color;
- @if(mixin-exists(hook-card-primary-title)) {@include hook-card-primary-title();}
-}
-
-.uk-card-primary.uk-card-hover:hover {
- background-color: $card-primary-hover-background;
- @if(mixin-exists(hook-card-primary-hover)) {@include hook-card-primary-hover();}
-}
-
-// Color Mode
-@if ( $card-primary-color-mode == light ) { .uk-card-primary.uk-card-body { @extend .uk-light !optional;} }
-@if ( $card-primary-color-mode == light ) { .uk-card-primary > :not([class*='uk-card-media']) { @extend .uk-light !optional;} }
-@if ( $card-primary-color-mode == dark ) { .uk-card-primary.uk-card-body { @extend .uk-dark !optional;} }
-@if ( $card-primary-color-mode == dark ) { .uk-card-primary > :not([class*='uk-card-media']) { @extend .uk-dark !optional;} }
-
-/*
- * Secondary
- */
-
-.uk-card-secondary {
- background: $card-secondary-background;
- color: $card-secondary-color;
- @if(mixin-exists(hook-card-secondary)) {@include hook-card-secondary();}
-}
-
-.uk-card-secondary .uk-card-title {
- color: $card-secondary-title-color;
- @if(mixin-exists(hook-card-secondary-title)) {@include hook-card-secondary-title();}
-}
-
-.uk-card-secondary.uk-card-hover:hover {
- background-color: $card-secondary-hover-background;
- @if(mixin-exists(hook-card-secondary-hover)) {@include hook-card-secondary-hover();}
-}
-
-// Color Mode
-@if ( $card-secondary-color-mode == light ) { .uk-card-secondary.uk-card-body { @extend .uk-light !optional;} }
-@if ( $card-secondary-color-mode == light ) { .uk-card-secondary > :not([class*='uk-card-media']) { @extend .uk-light !optional;} }
-@if ( $card-secondary-color-mode == dark ) { .uk-card-secondary.uk-card-body { @extend .uk-dark !optional;} }
-@if ( $card-secondary-color-mode == dark ) { .uk-card-secondary > :not([class*='uk-card-media']) { @extend .uk-dark !optional;} }
-
-
-/* Size modifier
- ========================================================================== */
-
-/*
- * Small
- */
-
-.uk-card-small.uk-card-body,
-.uk-card-small .uk-card-body { padding: $card-small-body-padding-vertical $card-small-body-padding-horizontal; }
-
-.uk-card-small .uk-card-header { padding: $card-small-header-padding-vertical $card-small-header-padding-horizontal; }
-.uk-card-small .uk-card-footer { padding: $card-small-footer-padding-vertical $card-small-footer-padding-horizontal; }
-
-/*
- * Large
- */
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-card-large.uk-card-body,
- .uk-card-large .uk-card-body { padding: $card-large-body-padding-vertical-l $card-large-body-padding-horizontal-l; }
-
- .uk-card-large .uk-card-header { padding: $card-large-header-padding-vertical-l $card-large-header-padding-horizontal-l; }
- .uk-card-large .uk-card-footer { padding: $card-large-footer-padding-vertical-l $card-large-footer-padding-horizontal-l; }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-card-misc)) {@include hook-card-misc();}
-
-// @mixin hook-card(){}
-// @mixin hook-card-body(){}
-// @mixin hook-card-header(){}
-// @mixin hook-card-footer(){}
-// @mixin hook-card-media(){}
-// @mixin hook-card-media-top(){}
-// @mixin hook-card-media-bottom(){}
-// @mixin hook-card-media-left(){}
-// @mixin hook-card-media-right(){}
-// @mixin hook-card-title(){}
-// @mixin hook-card-badge(){}
-// @mixin hook-card-hover(){}
-// @mixin hook-card-default(){}
-// @mixin hook-card-default-title(){}
-// @mixin hook-card-default-hover(){}
-// @mixin hook-card-default-header(){}
-// @mixin hook-card-default-footer(){}
-// @mixin hook-card-primary(){}
-// @mixin hook-card-primary-title(){}
-// @mixin hook-card-primary-hover(){}
-// @mixin hook-card-secondary(){}
-// @mixin hook-card-secondary-title(){}
-// @mixin hook-card-secondary-hover(){}
-// @mixin hook-card-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-card-badge-background: $inverse-global-primary-background !default;
-$inverse-card-badge-color: $inverse-global-inverse-color !default;
-
-
-
-// @mixin hook-inverse-card-badge(){}
diff --git a/docs/_sass/uikit/components/close.scss b/docs/_sass/uikit/components/close.scss
deleted file mode 100644
index 32e2775642..0000000000
--- a/docs/_sass/uikit/components/close.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-// Name: Close
-// Description: Component to create a close button
-//
-// Component: `uk-close`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$close-color: $global-muted-color !default;
-$close-hover-color: $global-color !default;
-
-
-/* ========================================================================
- Component: Close
- ========================================================================== */
-
-/*
- * Adopts `uk-icon`
- */
-
-.uk-close {
- color: $close-color;
- @if(mixin-exists(hook-close)) {@include hook-close();}
-}
-
-/* Hover + Focus */
-.uk-close:hover,
-.uk-close:focus {
- color: $close-hover-color;
- outline: none;
- @if(mixin-exists(hook-close-hover)) {@include hook-close-hover();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-close-misc)) {@include hook-close-misc();}
-
-// @mixin hook-close(){}
-// @mixin hook-close-hover(){}
-// @mixin hook-close-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-close-color: $inverse-global-muted-color !default;
-$inverse-close-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-close(){}
-// @mixin hook-inverse-close-hover(){}
diff --git a/docs/_sass/uikit/components/column.scss b/docs/_sass/uikit/components/column.scss
deleted file mode 100644
index 54bae26e37..0000000000
--- a/docs/_sass/uikit/components/column.scss
+++ /dev/null
@@ -1,138 +0,0 @@
-// Name: Column
-// Description: Utilities for text columns
-//
-// Component: `uk-column-*`
-//
-// Sub-objects: `uk-column-span`
-//
-// Modifiers: `uk-column-divider`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$column-gutter: $global-gutter !default;
-$column-gutter-l: $global-medium-gutter !default;
-
-$column-divider-rule-color: $global-border !default;
-$column-divider-rule-width: 1px !default;
-
-
-/* ========================================================================
- Component: Column
- ========================================================================== */
-
-[class*='uk-column-'] { column-gap: $column-gutter; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- [class*='uk-column-'] { column-gap: $column-gutter-l; }
-
-}
-
-/*
- * Fix image 1px line wrapping into the next column in Chrome
- */
-
-[class*='uk-column-'] img { transform: translate3d(0,0,0); }
-
-
-/* Divider
- ========================================================================== */
-
-/*
- * 1. Double the column gap
- */
-
-.uk-column-divider {
- column-rule: $column-divider-rule-width solid $column-divider-rule-color;
- /* 1 */
- column-gap: ($column-gutter * 2);
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-column-divider {
- column-gap: ($column-gutter-l * 2);
- }
-
-}
-
-
-/* Width modifiers
- ========================================================================== */
-
-.uk-column-1-2 { column-count: 2;}
-.uk-column-1-3 { column-count: 3; }
-.uk-column-1-4 { column-count: 4; }
-.uk-column-1-5 { column-count: 5; }
-.uk-column-1-6 { column-count: 6; }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-column-1-2\@s { column-count: 2; }
- .uk-column-1-3\@s { column-count: 3; }
- .uk-column-1-4\@s { column-count: 4; }
- .uk-column-1-5\@s { column-count: 5; }
- .uk-column-1-6\@s { column-count: 6; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-column-1-2\@m { column-count: 2; }
- .uk-column-1-3\@m { column-count: 3; }
- .uk-column-1-4\@m { column-count: 4; }
- .uk-column-1-5\@m { column-count: 5; }
- .uk-column-1-6\@m { column-count: 6; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-column-1-2\@l { column-count: 2; }
- .uk-column-1-3\@l { column-count: 3; }
- .uk-column-1-4\@l { column-count: 4; }
- .uk-column-1-5\@l { column-count: 5; }
- .uk-column-1-6\@l { column-count: 6; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-column-1-2\@xl { column-count: 2; }
- .uk-column-1-3\@xl { column-count: 3; }
- .uk-column-1-4\@xl { column-count: 4; }
- .uk-column-1-5\@xl { column-count: 5; }
- .uk-column-1-6\@xl { column-count: 6; }
-
-}
-
-/* Make element span across all columns
- * Does not work in Firefox yet
- ========================================================================== */
-
-.uk-column-span { column-span: all; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-column-misc)) {@include hook-column-misc();}
-
-// @mixin hook-column-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-column-divider-rule-color: $inverse-global-border !default;
-
diff --git a/docs/_sass/uikit/components/comment.scss b/docs/_sass/uikit/components/comment.scss
deleted file mode 100644
index 212b096016..0000000000
--- a/docs/_sass/uikit/components/comment.scss
+++ /dev/null
@@ -1,160 +0,0 @@
-// Name: Comment
-// Description: Component to create nested comments
-//
-// Component: `uk-comment`
-//
-// Sub-objects: `uk-comment-body`
-// `uk-comment-header`
-// `uk-comment-title`
-// `uk-comment-meta`
-// `uk-comment-avatar`
-// `uk-comment-list`
-//
-// Modifier: `uk-comment-primary`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$comment-header-margin-bottom: $global-margin !default;
-
-$comment-title-font-size: $global-medium-font-size !default;
-$comment-title-line-height: 1.4 !default;
-
-$comment-meta-font-size: $global-small-font-size !default;
-$comment-meta-line-height: 1.4 !default;
-$comment-meta-color: $global-muted-color !default;
-
-$comment-list-margin-top: $global-large-margin !default;
-$comment-list-padding-left: 30px !default;
-$comment-list-padding-left-m: 100px !default;
-
-
-/* ========================================================================
- Component: Comment
- ========================================================================== */
-
-.uk-comment {
- @if(mixin-exists(hook-comment)) {@include hook-comment();}
-}
-
-
-/* Sections
- ========================================================================== */
-
-.uk-comment-body {
- display: flow-root;
- overflow-wrap: break-word;
- word-wrap: break-word;
- @if(mixin-exists(hook-comment-body)) {@include hook-comment-body();}
-}
-
-.uk-comment-header {
- display: flow-root;
- margin-bottom: $comment-header-margin-bottom;
- @if(mixin-exists(hook-comment-header)) {@include hook-comment-header();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-comment-body > :last-child,
-.uk-comment-header > :last-child { margin-bottom: 0; }
-
-
-/* Title
- ========================================================================== */
-
-.uk-comment-title {
- font-size: $comment-title-font-size;
- line-height: $comment-title-line-height;
- @if(mixin-exists(hook-comment-title)) {@include hook-comment-title();}
-}
-
-
-/* Meta
- ========================================================================== */
-
-.uk-comment-meta {
- font-size: $comment-meta-font-size;
- line-height: $comment-meta-line-height;
- color: $comment-meta-color;
- @if(mixin-exists(hook-comment-meta)) {@include hook-comment-meta();}
-}
-
-
-/* Avatar
- ========================================================================== */
-
-.uk-comment-avatar {
- @if(mixin-exists(hook-comment-avatar)) {@include hook-comment-avatar();}
-}
-
-
-/* List
- ========================================================================== */
-
-.uk-comment-list {
- padding: 0;
- list-style: none;
-}
-
-/* Adjacent siblings */
-.uk-comment-list > :nth-child(n+2) {
- margin-top: $comment-list-margin-top;
- @if(mixin-exists(hook-comment-list-adjacent)) {@include hook-comment-list-adjacent();}
-}
-
-/*
- * Sublists
- * Note: General sibling selector allows reply block between comment and sublist
- */
-
-.uk-comment-list .uk-comment ~ ul {
- margin: $comment-list-margin-top 0 0 0;
- padding-left: $comment-list-padding-left;
- list-style: none;
- @if(mixin-exists(hook-comment-list-sub)) {@include hook-comment-list-sub();}
-}
-
-/* Tablet and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-comment-list .uk-comment ~ ul { padding-left: $comment-list-padding-left-m; }
-
-}
-
-/* Adjacent siblings */
-.uk-comment-list .uk-comment ~ ul > :nth-child(n+2) {
- margin-top: $comment-list-margin-top;
- @if(mixin-exists(hook-comment-list-sub-adjacent)) {@include hook-comment-list-sub-adjacent();}
-}
-
-
-/* Style modifier
- ========================================================================== */
-
-.uk-comment-primary {
- @if(mixin-exists(hook-comment-primary)) {@include hook-comment-primary();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-comment-misc)) {@include hook-comment-misc();}
-
-// @mixin hook-comment(){}
-// @mixin hook-comment-body(){}
-// @mixin hook-comment-header(){}
-// @mixin hook-comment-title(){}
-// @mixin hook-comment-meta(){}
-// @mixin hook-comment-avatar(){}
-// @mixin hook-comment-list-adjacent(){}
-// @mixin hook-comment-list-sub(){}
-// @mixin hook-comment-list-sub-adjacent(){}
-// @mixin hook-comment-primary(){}
-// @mixin hook-comment-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/container.scss b/docs/_sass/uikit/components/container.scss
deleted file mode 100644
index dcf798a220..0000000000
--- a/docs/_sass/uikit/components/container.scss
+++ /dev/null
@@ -1,185 +0,0 @@
-// Name: Container
-// Description: Component to align and center your site and grid content
-//
-// Component: `uk-container`
-//
-// Modifier: `uk-container-small`
-// `uk-container-large`
-// `uk-container-expand`
-// `uk-container-expand-left`
-// `uk-container-expand-right`
-// `uk-container-item-padding-remove-left`
-// `uk-container-item-padding-remove-right`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$container-max-width: 1200px !default;
-$container-xsmall-max-width: 750px !default;
-$container-small-max-width: 900px !default;
-$container-large-max-width: 1400px !default;
-$container-xlarge-max-width: 1600px !default;
-
-$container-padding-horizontal: 15px !default;
-$container-padding-horizontal-s: $global-gutter !default;
-$container-padding-horizontal-m: $global-medium-gutter !default;
-
-
-/* ========================================================================
- Component: Container
- ========================================================================== */
-
-/*
- * 1. Box sizing has to be `content-box` so the max-width is always the same and
- * unaffected by the padding on different breakpoints. It's important for the size modifiers.
- */
-
-.uk-container {
- display: flow-root;
- /* 1 */
- box-sizing: content-box;
- max-width: $container-max-width;
- margin-left: auto;
- margin-right: auto;
- padding-left: $container-padding-horizontal;
- padding-right: $container-padding-horizontal;
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-container {
- padding-left: $container-padding-horizontal-s;
- padding-right: $container-padding-horizontal-s;
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-container {
- padding-left: $container-padding-horizontal-m;
- padding-right: $container-padding-horizontal-m;
- }
-
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-container > :last-child { margin-bottom: 0; }
-
-/*
- * Remove padding from nested containers
- */
-
-.uk-container .uk-container {
- padding-left: 0;
- padding-right: 0;
-}
-
-
-/* Size modifier
- ========================================================================== */
-
-.uk-container-xsmall { max-width: $container-xsmall-max-width; }
-
-.uk-container-small { max-width: $container-small-max-width; }
-
-.uk-container-large { max-width: $container-large-max-width; }
-
-.uk-container-xlarge { max-width: $container-xlarge-max-width; }
-
-.uk-container-expand { max-width: none; }
-
-
-/* Expand modifier
- ========================================================================== */
-
-/*
- * Expand one side only
- */
-
-.uk-container-expand-left { margin-left: 0; }
-.uk-container-expand-right { margin-right: 0; }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-container-expand-left.uk-container-xsmall,
- .uk-container-expand-right.uk-container-xsmall { max-width: unquote('calc(50% + (#{$container-xsmall-max-width} / 2) - #{$container-padding-horizontal-s})'); }
-
- .uk-container-expand-left.uk-container-small,
- .uk-container-expand-right.uk-container-small { max-width: unquote('calc(50% + (#{$container-small-max-width} / 2) - #{$container-padding-horizontal-s})'); }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-container-expand-left,
- .uk-container-expand-right { max-width: unquote('calc(50% + (#{$container-max-width} / 2) - #{$container-padding-horizontal-m})'); }
-
- .uk-container-expand-left.uk-container-xsmall,
- .uk-container-expand-right.uk-container-xsmall { max-width: unquote('calc(50% + (#{$container-xsmall-max-width} / 2) - #{$container-padding-horizontal-m})'); }
-
- .uk-container-expand-left.uk-container-small,
- .uk-container-expand-right.uk-container-small { max-width: unquote('calc(50% + (#{$container-small-max-width} / 2) - #{$container-padding-horizontal-m})'); }
-
- .uk-container-expand-left.uk-container-large,
- .uk-container-expand-right.uk-container-large { max-width: unquote('calc(50% + (#{$container-large-max-width} / 2) - #{$container-padding-horizontal-m})'); }
-
- .uk-container-expand-left.uk-container-xlarge,
- .uk-container-expand-right.uk-container-xlarge { max-width: unquote('calc(50% + (#{$container-xlarge-max-width} / 2) - #{$container-padding-horizontal-m})'); }
-
-}
-
-
-/* Item
- ========================================================================== */
-
-/*
- * Utility classes to reset container padding on the left or right side
- * Note: It has to be negative margin on the item, because it's specific to the item.
- */
-
-.uk-container-item-padding-remove-left,
-.uk-container-item-padding-remove-right { width: unquote('calc(100% + #{$container-padding-horizontal})') }
-
-.uk-container-item-padding-remove-left { margin-left: (-$container-padding-horizontal); }
-.uk-container-item-padding-remove-right { margin-right: (-$container-padding-horizontal); }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-container-item-padding-remove-left,
- .uk-container-item-padding-remove-right { width: unquote('calc(100% + #{$container-padding-horizontal-s})') }
-
- .uk-container-item-padding-remove-left { margin-left: (-$container-padding-horizontal-s); }
- .uk-container-item-padding-remove-right { margin-right: (-$container-padding-horizontal-s); }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-container-item-padding-remove-left,
- .uk-container-item-padding-remove-right { width: unquote('calc(100% + #{$container-padding-horizontal-m})') }
-
- .uk-container-item-padding-remove-left { margin-left: (-$container-padding-horizontal-m); }
- .uk-container-item-padding-remove-right { margin-right: (-$container-padding-horizontal-m); }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-container-misc)) {@include hook-container-misc();}
-
-// @mixin hook-container-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/countdown.scss b/docs/_sass/uikit/components/countdown.scss
deleted file mode 100644
index b01209d711..0000000000
--- a/docs/_sass/uikit/components/countdown.scss
+++ /dev/null
@@ -1,131 +0,0 @@
-// Name: Countdown
-// Description: Component to create countdown timers
-//
-// Component: `uk-countdown`
-//
-// Sub-objects: `uk-countdown-number`
-// `uk-countdown-separator`
-// `uk-countdown-label`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$countdown-number-line-height: 0.8 !default;
-$countdown-number-font-size: 2rem !default; // 32px
-$countdown-number-font-size-s: 4rem !default; // 64px
-$countdown-number-font-size-m: 6rem !default; // 96px
-
-$countdown-separator-line-height: 1.6 !default;
-$countdown-separator-font-size: 1rem !default; // 16px
-$countdown-separator-font-size-s: 2rem !default; // 32px
-$countdown-separator-font-size-m: 3rem !default; // 48px
-
-
-/* ========================================================================
- Component: Countdown
- ========================================================================== */
-
-.uk-countdown {
- @if(mixin-exists(hook-countdown)) {@include hook-countdown();}
-}
-
-
-/* Item
- ========================================================================== */
-
-.uk-countdown-number,
-.uk-countdown-separator {
- @if(mixin-exists(hook-countdown-item)) {@include hook-countdown-item();}
-}
-
-
-/* Number
- ========================================================================== */
-
-
-/*
- * 1. Make numbers all of the same size to prevent jumping. Must be supported by the font.
- * 2. Style
- */
-
-.uk-countdown-number {
- /* 1 */
- font-variant-numeric: tabular-nums;
- /* 2 */
- font-size: $countdown-number-font-size;
- line-height: $countdown-number-line-height;
- @if(mixin-exists(hook-countdown-number)) {@include hook-countdown-number();}
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-countdown-number { font-size: $countdown-number-font-size-s; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-countdown-number { font-size: $countdown-number-font-size-m; }
-
-}
-
-
-/* Separator
- ========================================================================== */
-
-.uk-countdown-separator {
- font-size: $countdown-separator-font-size;
- line-height: $countdown-separator-line-height;
- @if(mixin-exists(hook-countdown-separator)) {@include hook-countdown-separator();}
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-countdown-separator { font-size: $countdown-separator-font-size-s; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-countdown-separator { font-size: $countdown-separator-font-size-m; }
-
-}
-
-
-/* Label
- ========================================================================== */
-
-.uk-countdown-label {
- @if(mixin-exists(hook-countdown-label)) {@include hook-countdown-label();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-countdown-misc)) {@include hook-countdown-misc();}
-
-// @mixin hook-countdown(){}
-// @mixin hook-countdown-item(){}
-// @mixin hook-countdown-number(){}
-// @mixin hook-countdown-separator(){}
-// @mixin hook-countdown-label(){}
-// @mixin hook-countdown-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-
-
-// @mixin hook-inverse-countdown-item(){}
-// @mixin hook-inverse-countdown-number(){}
-// @mixin hook-inverse-countdown-separator(){}
-// @mixin hook-inverse-countdown-label(){}
diff --git a/docs/_sass/uikit/components/cover.scss b/docs/_sass/uikit/components/cover.scss
deleted file mode 100644
index b44a6847d5..0000000000
--- a/docs/_sass/uikit/components/cover.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-// Name: Cover
-// Description: Utilities to let embedded content cover their container in a centered position
-//
-// Component: `uk-cover`
-//
-// Sub-object: `uk-cover-container`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Cover
- ========================================================================== */
-
-/*
- * Works with iframes and embedded content
- * 1. Reset responsiveness for embedded content
- * 2. Center object
- * Note: Percent values on the `top` property only works if this element
- * is absolute positioned or if the container has a height
- */
-
-.uk-cover {
- /* 1 */
- max-width: none;
- /* 2 */
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%,-50%);
-}
-
-iframe.uk-cover { pointer-events: none; }
-
-
-/* Container
- ========================================================================== */
-
-/*
- * 1. Parent container which clips resized object
- * 2. Needed if the child is positioned absolute. See note above
- */
-
-.uk-cover-container {
- /* 1 */
- overflow: hidden;
- /* 2 */
- position: relative;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-cover-misc)) {@include hook-cover-misc();}
-
-// @mixin hook-cover-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/description-list.scss b/docs/_sass/uikit/components/description-list.scss
deleted file mode 100644
index 6683286dfd..0000000000
--- a/docs/_sass/uikit/components/description-list.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-// Name: Description list
-// Description: Styles for description lists
-//
-// Component: `uk-description-list`
-//
-// Modifiers: `uk-description-list-divider`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$description-list-term-color: $global-emphasis-color !default;
-$description-list-term-margin-top: $global-margin !default;
-
-$description-list-divider-term-margin-top: $global-margin !default;
-$description-list-divider-term-border-width: $global-border-width !default;
-$description-list-divider-term-border: $global-border !default;
-
-
-/* ========================================================================
- Component: Description list
- ========================================================================== */
-
-/*
- * Term
- */
-
-.uk-description-list > dt {
- color: $description-list-term-color;
- @if(mixin-exists(hook-description-list-term)) {@include hook-description-list-term();}
-}
-
-.uk-description-list > dt:nth-child(n+2) {
- margin-top: $description-list-term-margin-top;
-}
-
-/*
- * Description
- */
-
-.uk-description-list > dd {
- @if(mixin-exists(hook-description-list-description)) {@include hook-description-list-description();}
-}
-
-
-/* Style modifier
- ========================================================================== */
-
-/*
- * Line
- */
-
-.uk-description-list-divider > dt:nth-child(n+2) {
- margin-top: $description-list-divider-term-margin-top;
- padding-top: $description-list-divider-term-margin-top;
- border-top: $description-list-divider-term-border-width solid $description-list-divider-term-border;
- @if(mixin-exists(hook-description-list-divider-term)) {@include hook-description-list-divider-term();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-description-list-misc)) {@include hook-description-list-misc();}
-
-// @mixin hook-description-list-term(){}
-// @mixin hook-description-list-description(){}
-// @mixin hook-description-list-divider-term(){}
-// @mixin hook-description-list-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/divider.scss b/docs/_sass/uikit/components/divider.scss
deleted file mode 100644
index 104fcdb48d..0000000000
--- a/docs/_sass/uikit/components/divider.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-// Name: Divider
-// Description: Styles for dividers
-//
-// Component: `uk-divider-icon`
-// `uk-divider-small`
-// `uk-divider-vertical`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$divider-margin-vertical: $global-margin !default;
-
-$divider-icon-width: 50px !default;
-$divider-icon-height: 20px !default;
-$divider-icon-color: $global-border !default;
-$divider-icon-line-top: 50% !default;
-$divider-icon-line-width: 100% !default;
-$divider-icon-line-border-width: $global-border-width !default;
-$divider-icon-line-border: $global-border !default;
-
-$internal-divider-icon-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-
-$divider-small-width: 100px !default;
-$divider-small-border-width: $global-border-width !default;
-$divider-small-border: $global-border !default;
-
-$divider-vertical-height: 100px !default;
-$divider-vertical-border-width: $global-border-width !default;
-$divider-vertical-border: $global-border !default;
-
-
-/* ========================================================================
- Component: Divider
- ========================================================================== */
-
-/*
- * 1. Reset default `hr`
- * 2. Set margin if a `div` is used for semantical reason
- */
-
-[class*='uk-divider'] {
- /* 1 */
- border: none;
- /* 2 */
- margin-bottom: $divider-margin-vertical;
-}
-
-/* Add margin if adjacent element */
-* + [class*='uk-divider'] { margin-top: $divider-margin-vertical; }
-
-
-/* Icon
- ========================================================================== */
-
-.uk-divider-icon {
- position: relative;
- height: $divider-icon-height;
- @include svg-fill($internal-divider-icon-image, "#000", $divider-icon-color);
- background-repeat: no-repeat;
- background-position: 50% 50%;
- @if(mixin-exists(hook-divider-icon)) {@include hook-divider-icon();}
-}
-
-.uk-divider-icon::before,
-.uk-divider-icon::after {
- content: "";
- position: absolute;
- top: $divider-icon-line-top;
- max-width: unquote('calc(50% - (#{$divider-icon-width} / 2))');
- border-bottom: $divider-icon-line-border-width solid $divider-icon-line-border;
- @if(mixin-exists(hook-divider-icon-line)) {@include hook-divider-icon-line();}
-}
-
-.uk-divider-icon::before {
- right: unquote('calc(50% + (#{$divider-icon-width} / 2))');
- width: $divider-icon-line-width;
- @if(mixin-exists(hook-divider-icon-line-left)) {@include hook-divider-icon-line-left();}
-}
-
-.uk-divider-icon::after {
- left: unquote('calc(50% + (#{$divider-icon-width} / 2))');
- width: $divider-icon-line-width;
- @if(mixin-exists(hook-divider-icon-line-right)) {@include hook-divider-icon-line-right();}
-}
-
-
-/* Small
- ========================================================================== */
-
-/*
- * 1. Fix height because of `inline-block`
- * 2. Using ::after and inline-block to make `text-align` work
- */
-
-/* 1 */
-.uk-divider-small { line-height: 0; }
-
-/* 2 */
-.uk-divider-small::after {
- content: "";
- display: inline-block;
- width: $divider-small-width;
- max-width: 100%;
- border-top: $divider-small-border-width solid $divider-small-border;
- vertical-align: top;
- @if(mixin-exists(hook-divider-small)) {@include hook-divider-small();}
-}
-
-
-/* Vertical
- ========================================================================== */
-
-.uk-divider-vertical {
- width: 1px;
- height: $divider-vertical-height;
- margin-left: auto;
- margin-right: auto;
- border-left: $divider-vertical-border-width solid $divider-vertical-border;
- @if(mixin-exists(hook-divider-vertical)) {@include hook-divider-vertical();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-divider-misc)) {@include hook-divider-misc();}
-
-// @mixin hook-divider-icon(){}
-// @mixin hook-divider-icon-line(){}
-// @mixin hook-divider-icon-line-left(){}
-// @mixin hook-divider-icon-line-right(){}
-// @mixin hook-divider-small(){}
-// @mixin hook-divider-vertical(){}
-// @mixin hook-divider-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-divider-icon-color: $inverse-global-border !default;
-$inverse-divider-icon-line-border: $inverse-global-border !default;
-$inverse-divider-small-border: $inverse-global-border !default;
-$inverse-divider-vertical-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-divider-icon(){}
-// @mixin hook-inverse-divider-icon-line(){}
-// @mixin hook-inverse-divider-small(){}
-// @mixin hook-inverse-divider-vertical(){}
diff --git a/docs/_sass/uikit/components/dotnav.scss b/docs/_sass/uikit/components/dotnav.scss
deleted file mode 100644
index f1f2a4029c..0000000000
--- a/docs/_sass/uikit/components/dotnav.scss
+++ /dev/null
@@ -1,157 +0,0 @@
-// Name: Dotnav
-// Description: Component to create dot navigations
-//
-// Component: `uk-dotnav`
-//
-// Modifier: `uk-dotnav-vertical`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$dotnav-margin-horizontal: 12px !default;
-$dotnav-margin-vertical: $dotnav-margin-horizontal !default;
-
-$dotnav-item-width: 10px !default;
-$dotnav-item-height: $dotnav-item-width !default;
-$dotnav-item-border-radius: 50% !default;
-
-$dotnav-item-background: rgba($global-color, 0.2) !default;
-$dotnav-item-hover-background: rgba($global-color, 0.6) !default;
-$dotnav-item-onclick-background: rgba($global-color, 0.2) !default;
-$dotnav-item-active-background: rgba($global-color, 0.6) !default;
-
-
-/* ========================================================================
- Component: Dotnav
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Reset list
- * 3. Gutter
- */
-
-.uk-dotnav {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin: 0;
- padding: 0;
- list-style: none;
- /* 3 */
- margin-left: (-$dotnav-margin-horizontal);
- @if(mixin-exists(hook-dotnav)) {@include hook-dotnav();}
-}
-
-/*
- * 1. Space is allocated solely based on content dimensions: 0 0 auto
- * 2. Gutter
- */
-
-.uk-dotnav > * {
- /* 1 */
- flex: none;
- /* 2 */
- padding-left: $dotnav-margin-horizontal;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Items
- * 1. Hide text if present
- */
-
-.uk-dotnav > * > * {
- display: block;
- box-sizing: border-box;
- width: $dotnav-item-width;
- height: $dotnav-item-height;
- border-radius: $dotnav-item-border-radius;
- background: $dotnav-item-background;
- /* 1 */
- text-indent: 100%;
- overflow: hidden;
- white-space: nowrap;
- @if(mixin-exists(hook-dotnav-item)) {@include hook-dotnav-item();}
-}
-
-/* Hover + Focus */
-.uk-dotnav > * > :hover,
-.uk-dotnav > * > :focus {
- background-color: $dotnav-item-hover-background;
- outline: none;
- @if(mixin-exists(hook-dotnav-item-hover)) {@include hook-dotnav-item-hover();}
-}
-
-/* OnClick */
-.uk-dotnav > * > :active {
- background-color: $dotnav-item-onclick-background;
- @if(mixin-exists(hook-dotnav-item-onclick)) {@include hook-dotnav-item-onclick();}
-}
-
-/* Active */
-.uk-dotnav > .uk-active > * {
- background-color: $dotnav-item-active-background;
- @if(mixin-exists(hook-dotnav-item-active)) {@include hook-dotnav-item-active();}
-}
-
-
-/* Modifier: 'uk-dotnav-vertical'
- ========================================================================== */
-
-/*
- * 1. Change direction
- * 2. Gutter
- */
-
-.uk-dotnav-vertical {
- /* 1 */
- flex-direction: column;
- /* 2 */
- margin-left: 0;
- margin-top: (-$dotnav-margin-vertical);
-}
-
-/* 2 */
-.uk-dotnav-vertical > * {
- padding-left: 0;
- padding-top: $dotnav-margin-vertical;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-dotnav-misc)) {@include hook-dotnav-misc();}
-
-// @mixin hook-dotnav(){}
-// @mixin hook-dotnav-item(){}
-// @mixin hook-dotnav-item-hover(){}
-// @mixin hook-dotnav-item-onclick(){}
-// @mixin hook-dotnav-item-active(){}
-// @mixin hook-dotnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-dotnav-item-background: rgba($inverse-global-color, 0.5) !default;
-$inverse-dotnav-item-hover-background: rgba($inverse-global-color, 0.9) !default;
-$inverse-dotnav-item-onclick-background: rgba($inverse-global-color, 0.5) !default;
-$inverse-dotnav-item-active-background: rgba($inverse-global-color, 0.9) !default;
-
-
-
-// @mixin hook-inverse-dotnav-item(){}
-// @mixin hook-inverse-dotnav-item-hover(){}
-// @mixin hook-inverse-dotnav-item-onclick(){}
-// @mixin hook-inverse-dotnav-item-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/drop.scss b/docs/_sass/uikit/components/drop.scss
deleted file mode 100644
index fb5e9e8c5a..0000000000
--- a/docs/_sass/uikit/components/drop.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-// Name: Drop
-// Description: Component to position any element next to any other element.
-//
-// Component: `uk-drop`
-//
-// Modifiers: `uk-drop-top-*`
-// `uk-drop-bottom-*`
-// `uk-drop-left-*`
-// `uk-drop-right-*`
-// `uk-drop-stack`
-// `uk-drop-grid`
-//
-// States: `uk-open`
-//
-// Uses: Animation
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$drop-z-index: $global-z-index + 20 !default;
-$drop-width: 300px !default;
-$drop-margin: $global-margin !default;
-
-
-/* ========================================================================
- Component: Drop
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Set position
- * 3. Set a default width
- */
-
-.uk-drop {
- /* 1 */
- display: none;
- /* 2 */
- position: absolute;
- z-index: $drop-z-index;
- /* 3 */
- box-sizing: border-box;
- width: $drop-width;
-}
-
-/* Show */
-.uk-drop.uk-open { display: block; }
-
-
-/* Direction / Alignment modifiers
- ========================================================================== */
-
-/* Direction */
-[class*='uk-drop-top'] { margin-top: (-$drop-margin); }
-[class*='uk-drop-bottom'] { margin-top: $drop-margin; }
-[class*='uk-drop-left'] { margin-left: (-$drop-margin); }
-[class*='uk-drop-right'] { margin-left: $drop-margin; }
-
-
-/* Grid modifiers
- ========================================================================== */
-
-.uk-drop-stack .uk-drop-grid > * { width: 100% !important; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-drop-misc)) {@include hook-drop-misc();}
-
-// @mixin hook-drop-misc(){}
diff --git a/docs/_sass/uikit/components/dropdown.scss b/docs/_sass/uikit/components/dropdown.scss
deleted file mode 100644
index 25af1079d2..0000000000
--- a/docs/_sass/uikit/components/dropdown.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-// Name: Dropdown
-// Description: Component to create dropdown menus
-//
-// Component: `uk-dropdown`
-//
-// Adopted: `uk-dropdown-nav`
-//
-// Modifiers: `uk-dropdown-top-*`
-// `uk-dropdown-bottom-*`
-// `uk-dropdown-left-*`
-// `uk-dropdown-right-*`
-// `uk-dropdown-stack`
-// `uk-dropdown-grid`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$dropdown-z-index: $global-z-index + 20 !default;
-$dropdown-min-width: 200px !default;
-$dropdown-padding: 15px !default;
-$dropdown-background: $global-muted-background !default;
-$dropdown-color: $global-color !default;
-$dropdown-margin: $global-small-margin !default;
-
-$dropdown-nav-item-color: $global-muted-color !default;
-$dropdown-nav-item-hover-color: $global-color !default;
-$dropdown-nav-header-color: $global-emphasis-color !default;
-$dropdown-nav-divider-border-width: $global-border-width !default;
-$dropdown-nav-divider-border: $global-border !default;
-$dropdown-nav-sublist-item-color: $global-muted-color !default;
-$dropdown-nav-sublist-item-hover-color: $global-color !default;
-
-
-/* ========================================================================
- Component: Dropdown
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Set position
- * 3. Set a default width
- * 4. Style
- */
-
-.uk-dropdown {
- /* 1 */
- display: none;
- /* 2 */
- position: absolute;
- z-index: $dropdown-z-index;
- /* 3 */
- box-sizing: border-box;
- min-width: $dropdown-min-width;
- /* 4 */
- padding: $dropdown-padding;
- background: $dropdown-background;
- color: $dropdown-color;
- @if(mixin-exists(hook-dropdown)) {@include hook-dropdown();}
-}
-
-/* Show */
-.uk-dropdown.uk-open { display: block; }
-
-
-/* Nav
- * Adopts `uk-nav`
- ========================================================================== */
-
-.uk-dropdown-nav {
- white-space: nowrap;
- @if(mixin-exists(hook-dropdown-nav)) {@include hook-dropdown-nav();}
-}
-
-/*
- * Items
- */
-
-.uk-dropdown-nav > li > a {
- color: $dropdown-nav-item-color;
- @if(mixin-exists(hook-dropdown-nav-item)) {@include hook-dropdown-nav-item();}
-}
-
-/* Hover + Focus + Active */
-.uk-dropdown-nav > li > a:hover,
-.uk-dropdown-nav > li > a:focus,
-.uk-dropdown-nav > li.uk-active > a {
- color: $dropdown-nav-item-hover-color;
- @if(mixin-exists(hook-dropdown-nav-item-hover)) {@include hook-dropdown-nav-item-hover();}
-}
-
-/*
- * Header
- */
-
-.uk-dropdown-nav .uk-nav-header {
- color: $dropdown-nav-header-color;
- @if(mixin-exists(hook-dropdown-nav-header)) {@include hook-dropdown-nav-header();}
-}
-
-/*
- * Divider
- */
-
-.uk-dropdown-nav .uk-nav-divider {
- border-top: $dropdown-nav-divider-border-width solid $dropdown-nav-divider-border;
- @if(mixin-exists(hook-dropdown-nav-divider)) {@include hook-dropdown-nav-divider();}
-}
-
-/*
- * Sublists
- */
-
-.uk-dropdown-nav .uk-nav-sub a { color: $dropdown-nav-sublist-item-color; }
-
-.uk-dropdown-nav .uk-nav-sub a:hover,
-.uk-dropdown-nav .uk-nav-sub a:focus,
-.uk-dropdown-nav .uk-nav-sub li.uk-active > a { color: $dropdown-nav-sublist-item-hover-color; }
-
-
-/* Direction / Alignment modifiers
- ========================================================================== */
-
-/* Direction */
-[class*='uk-dropdown-top'] { margin-top: (-$dropdown-margin); }
-[class*='uk-dropdown-bottom'] { margin-top: $dropdown-margin; }
-[class*='uk-dropdown-left'] { margin-left: (-$dropdown-margin); }
-[class*='uk-dropdown-right'] { margin-left: $dropdown-margin; }
-
-
-/* Grid modifiers
- ========================================================================== */
-
-.uk-dropdown-stack .uk-dropdown-grid > * { width: 100% !important; }
-
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-dropdown-misc)) {@include hook-dropdown-misc();}
-
-// @mixin hook-dropdown(){}
-// @mixin hook-dropdown-nav(){}
-// @mixin hook-dropdown-nav-item(){}
-// @mixin hook-dropdown-nav-item-hover(){}
-// @mixin hook-dropdown-nav-header(){}
-// @mixin hook-dropdown-nav-divider(){}
-// @mixin hook-dropdown-misc(){}
diff --git a/docs/_sass/uikit/components/flex.scss b/docs/_sass/uikit/components/flex.scss
deleted file mode 100644
index 1301fc4335..0000000000
--- a/docs/_sass/uikit/components/flex.scss
+++ /dev/null
@@ -1,209 +0,0 @@
-// Name: Flex
-// Description: Utilities for layouts based on flexbox
-//
-// Component: `uk-flex-*`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Flex
- ========================================================================== */
-
-.uk-flex { display: flex; }
-.uk-flex-inline { display: inline-flex; }
-
-/*
- * Remove pseudo elements created by micro clearfix as precaution
- */
-
-.uk-flex::before,
-.uk-flex::after,
-.uk-flex-inline::before,
-.uk-flex-inline::after { display: none; }
-
-
-/* Alignment
- ========================================================================== */
-
-/*
- * Align items along the main axis of the current line of the flex container
- * Row: Horizontal
- */
-
-// Default
-.uk-flex-left { justify-content: flex-start; }
-.uk-flex-center { justify-content: center; }
-.uk-flex-right { justify-content: flex-end; }
-.uk-flex-between { justify-content: space-between; }
-.uk-flex-around { justify-content: space-around; }
-
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-flex-left\@s { justify-content: flex-start; }
- .uk-flex-center\@s { justify-content: center; }
- .uk-flex-right\@s { justify-content: flex-end; }
- .uk-flex-between\@s { justify-content: space-between; }
- .uk-flex-around\@s { justify-content: space-around; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-flex-left\@m { justify-content: flex-start; }
- .uk-flex-center\@m { justify-content: center; }
- .uk-flex-right\@m { justify-content: flex-end; }
- .uk-flex-between\@m { justify-content: space-between; }
- .uk-flex-around\@m { justify-content: space-around; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-flex-left\@l { justify-content: flex-start; }
- .uk-flex-center\@l { justify-content: center; }
- .uk-flex-right\@l { justify-content: flex-end; }
- .uk-flex-between\@l { justify-content: space-between; }
- .uk-flex-around\@l { justify-content: space-around; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-flex-left\@xl { justify-content: flex-start; }
- .uk-flex-center\@xl { justify-content: center; }
- .uk-flex-right\@xl { justify-content: flex-end; }
- .uk-flex-between\@xl { justify-content: space-between; }
- .uk-flex-around\@xl { justify-content: space-around; }
-
-}
-
-/*
- * Align items in the cross axis of the current line of the flex container
- * Row: Vertical
- */
-
-// Default
-.uk-flex-stretch { align-items: stretch; }
-.uk-flex-top { align-items: flex-start; }
-.uk-flex-middle { align-items: center; }
-.uk-flex-bottom { align-items: flex-end; }
-
-
-/* Direction
- ========================================================================== */
-
-// Default
-.uk-flex-row { flex-direction: row; }
-.uk-flex-row-reverse { flex-direction: row-reverse; }
-.uk-flex-column { flex-direction: column; }
-.uk-flex-column-reverse { flex-direction: column-reverse; }
-
-
-/* Wrap
- ========================================================================== */
-
-// Default
-.uk-flex-nowrap { flex-wrap: nowrap; }
-.uk-flex-wrap { flex-wrap: wrap; }
-.uk-flex-wrap-reverse { flex-wrap: wrap-reverse; }
-
-/*
- * Aligns items within the flex container when there is extra space in the cross-axis
- * Only works if there is more than one line of flex items
- */
-
-// Default
-.uk-flex-wrap-stretch { align-content: stretch; }
-.uk-flex-wrap-top { align-content: flex-start; }
-.uk-flex-wrap-middle { align-content: center; }
-.uk-flex-wrap-bottom { align-content: flex-end; }
-.uk-flex-wrap-between { align-content: space-between; }
-.uk-flex-wrap-around { align-content: space-around; }
-
-
-/* Item ordering
- ========================================================================== */
-
-/*
- * Default is 0
- */
-
-.uk-flex-first { order: -1;}
-.uk-flex-last { order: 99;}
-
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-flex-first\@s { order: -1; }
- .uk-flex-last\@s { order: 99; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-flex-first\@m { order: -1; }
- .uk-flex-last\@m { order: 99; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-flex-first\@l { order: -1; }
- .uk-flex-last\@l { order: 99; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-flex-first\@xl { order: -1; }
- .uk-flex-last\@xl { order: 99; }
-
-}
-
-
-/* Item dimensions
- ========================================================================== */
-
-/*
- * Initial: 0 1 auto
- * Content dimensions, but shrinks
- */
-
-/*
- * No Flex: 0 0 auto
- * Content dimensions
- */
-
-.uk-flex-none { flex: none; }
-
-/*
- * Relative Flex: 1 1 auto
- * Space is allocated considering content
- */
-
-.uk-flex-auto { flex: auto; }
-
-/*
- * Absolute Flex: 1 1 0%
- * Space is allocated solely based on flex
- */
-
-.uk-flex-1 { flex: 1; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-flex-misc)) {@include hook-flex-misc();}
-
-// @mixin hook-flex-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/form-range.scss b/docs/_sass/uikit/components/form-range.scss
deleted file mode 100644
index 328f08fc3e..0000000000
--- a/docs/_sass/uikit/components/form-range.scss
+++ /dev/null
@@ -1,186 +0,0 @@
-// Name: Form Range
-// Description: Styles for the range input type
-//
-// Component: `uk-range`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$form-range-thumb-height: 15px !default;
-$form-range-thumb-width: $form-range-thumb-height !default;
-$form-range-thumb-border-radius: 500px !default;
-$form-range-thumb-background: $global-color !default;
-
-$form-range-track-height: 3px !default;
-$form-range-track-background: darken($global-muted-background, 5%) !default;
-$form-range-track-focus-background: darken($form-range-track-background, 5%) !default;
-
-
-/* ========================================================================
- Component: Form Range
- ========================================================================== */
-
-/*
- * 1. Normalize and defaults
- * 2. Prevent content overflow if a fixed width is used
- * 3. Take the full width
- * 4. Remove default style
- * 5. Remove white background in Chrome
- * 6. Remove padding in IE11
- */
-
-.uk-range {
- /* 1 */
- box-sizing: border-box;
- margin: 0;
- vertical-align: middle;
- /* 2 */
- max-width: 100%;
- /* 3 */
- width: 100%;
- /* 4 */
- -webkit-appearance: none;
- /* 5 */
- background: transparent;
- /* 6 */
- padding: 0;
- @if(mixin-exists(hook-form-range)) {@include hook-form-range();}
-}
-
-/* Focus */
-.uk-range:focus { outline: none; }
-.uk-range::-moz-focus-outer { border: none; }
-
-/* IE11 Reset */
-.uk-range::-ms-track {
- height: $form-range-thumb-height;
- background: transparent;
- border-color: transparent;
- color: transparent;
-}
-
-/*
- * Improves consistency of cursor style for clickable elements
- */
-
-.uk-range:not(:disabled)::-webkit-slider-thumb { cursor: pointer; }
-.uk-range:not(:disabled)::-moz-range-thumb { cursor: pointer; }
-.uk-range:not(:disabled)::-ms-thumb { cursor: pointer; }
-
-
-/* Thumb
- ========================================================================== */
-
-/*
- * 1. Reset
- * 2. Style
- */
-
-/* Webkit */
-.uk-range::-webkit-slider-thumb {
- /* 1 */
- -webkit-appearance: none;
- margin-top: (floor($form-range-thumb-height / 2) * -1);
- /* 2 */
- height: $form-range-thumb-height;
- width: $form-range-thumb-width;
- border-radius: $form-range-thumb-border-radius;
- background: $form-range-thumb-background;
- @if(mixin-exists(hook-form-range-thumb)) {@include hook-form-range-thumb();}
-}
-
-/* Firefox */
-.uk-range::-moz-range-thumb {
- /* 1 */
- border: none;
- /* 2 */
- height: $form-range-thumb-height;
- width: $form-range-thumb-width;
- border-radius: $form-range-thumb-border-radius;
- background: $form-range-thumb-background;
- @if(mixin-exists(hook-form-range-thumb)) {@include hook-form-range-thumb();}
-}
-
-/* Edge */
-.uk-range::-ms-thumb {
- /* 1 */
- margin-top: 0;
-}
-
-/* IE11 */
-.uk-range::-ms-thumb {
- /* 1 */
- border: none;
- /* 2 */
- height: $form-range-thumb-height;
- width: $form-range-thumb-width;
- border-radius: $form-range-thumb-border-radius;
- background: $form-range-thumb-background;
- @if(mixin-exists(hook-form-range-thumb)) {@include hook-form-range-thumb();}
-}
-
-/* Edge + IE11 */
-.uk-range::-ms-tooltip { display: none; }
-
-
-/* Track
- ========================================================================== */
-
-/*
- * 1. Safari doesn't have a focus state. Using active instead.
- */
-
-/* Webkit */
-.uk-range::-webkit-slider-runnable-track {
- height: $form-range-track-height;
- background: $form-range-track-background;
- @if(mixin-exists(hook-form-range-track)) {@include hook-form-range-track();}
-}
-
-.uk-range:focus::-webkit-slider-runnable-track,
-/* 1 */
-.uk-range:active::-webkit-slider-runnable-track {
- background: $form-range-track-focus-background;
- @if(mixin-exists(hook-form-range-track-focus)) {@include hook-form-range-track-focus();}
-}
-
-/* Firefox */
-.uk-range::-moz-range-track {
- height: $form-range-track-height;
- background: $form-range-track-background;
- @if(mixin-exists(hook-form-range-track)) {@include hook-form-range-track();}
-}
-
-.uk-range:focus::-moz-range-track {
- background: $form-range-track-focus-background;
- @if(mixin-exists(hook-form-range-track-focus)) {@include hook-form-range-track-focus();}
-}
-
-/* Edge */
-.uk-range::-ms-fill-lower,
-.uk-range::-ms-fill-upper {
- height: $form-range-track-height;
- background: $form-range-track-background;
- @if(mixin-exists(hook-form-range-track)) {@include hook-form-range-track();}
-}
-
-.uk-range:focus::-ms-fill-lower,
-.uk-range:focus::-ms-fill-upper {
- background: $form-range-track-focus-background;
- @if(mixin-exists(hook-form-range-track-focus)) {@include hook-form-range-track-focus();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-form-range-misc)) {@include hook-form-range-misc();}
-
-// @mixin hook-form-range(){}
-// @mixin hook-form-range-thumb(){}
-// @mixin hook-form-range-track(){}
-// @mixin hook-form-range-track-focus(){}
-// @mixin hook-form-range-misc(){}
diff --git a/docs/_sass/uikit/components/form.scss b/docs/_sass/uikit/components/form.scss
deleted file mode 100644
index 08fe9920ae..0000000000
--- a/docs/_sass/uikit/components/form.scss
+++ /dev/null
@@ -1,811 +0,0 @@
-// Name: Form
-// Description: Styles for forms
-//
-// Component: `uk-form-*`
-// `uk-input`
-// `uk-select`
-// `uk-textarea`
-// `uk-radio`
-// `uk-checkbox`
-// `uk-legend`
-// `uk-fieldset`
-//
-// Sub-objects: `uk-form-custom`
-// `uk-form-stacked`
-// `uk-form-horizontal`
-// `uk-form-label`
-// `uk-form-controls`
-// `uk-form-icon`
-// `uk-form-icon-flip`
-//
-// Modifiers: `uk-form-small`
-// `uk-form-large`
-// `uk-form-danger`
-// `uk-form-success`
-// `uk-form-blank`
-// `uk-form-width-xsmall`
-// `uk-form-width-small`
-// `uk-form-width-medium`
-// `uk-form-width-large`
-// `uk-form-controls-text`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$form-height: $global-control-height !default;
-$form-line-height: $form-height !default;
-$form-padding-horizontal: 10px !default;
-$form-padding-vertical: round($form-padding-horizontal * 0.6) !default;
-
-$form-background: $global-muted-background !default;
-$form-color: $global-color !default;
-
-$form-focus-background: darken($form-background, 5%) !default;
-$form-focus-color: $global-color !default;
-
-$form-disabled-background: $global-muted-background !default;
-$form-disabled-color: $global-muted-color !default;
-
-$form-placeholder-color: $global-muted-color !default;
-
-$form-small-height: $global-control-small-height !default;
-$form-small-padding-horizontal: 8px !default;
-$form-small-padding-vertical: round($form-small-padding-horizontal * 0.6) !default;
-$form-small-line-height: $form-small-height !default;
-$form-small-font-size: $global-small-font-size !default;
-
-$form-large-height: $global-control-large-height !default;
-$form-large-padding-horizontal: 12px !default;
-$form-large-padding-vertical: round($form-large-padding-horizontal * 0.6) !default;
-$form-large-line-height: $form-large-height !default;
-$form-large-font-size: $global-medium-font-size !default;
-
-$form-danger-color: $global-danger-background !default;
-$form-success-color: $global-success-background !default;
-
-$form-width-xsmall: 50px !default;
-$form-width-small: 130px !default;
-$form-width-medium: 200px !default;
-$form-width-large: 500px !default;
-
-$form-select-padding-right: 20px !default;
-$form-select-icon-color: $global-color !default;
-$form-select-option-color: #444 !default;
-$form-select-disabled-icon-color: $global-muted-color !default;
-
-$form-datalist-padding-right: 20px !default;
-$form-datalist-icon-color: $global-color !default;
-
-$form-radio-size: 16px !default;
-$form-radio-margin-top: -4px !default;
-$form-radio-background: darken($global-muted-background, 5%) !default;
-
-$form-radio-focus-background: darken($form-radio-background, 5%) !default;
-
-$form-radio-checked-background: $global-primary-background !default;
-$form-radio-checked-icon-color: $global-inverse-color !default;
-
-$form-radio-checked-focus-background: darken($global-primary-background, 10%) !default;
-
-$form-radio-disabled-background: $global-muted-background !default;
-$form-radio-disabled-icon-color: $global-muted-color !default;
-
-$form-legend-font-size: $global-large-font-size !default;
-$form-legend-line-height: 1.4 !default;
-
-$form-stacked-margin-bottom: $global-small-margin !default;
-
-$form-horizontal-label-width: 200px !default;
-$form-horizontal-label-margin-top: 7px !default;
-$form-horizontal-controls-margin-left: 215px !default;
-$form-horizontal-controls-text-padding-top: 7px !default;
-
-$form-icon-width: $form-height !default;
-$form-icon-color: $global-muted-color !default;
-$form-icon-hover-color: $global-color !default;
-
-$internal-form-select-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-datalist-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-radio-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-form-checkbox-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-checkbox-indeterminate-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-
-
-/* ========================================================================
- Component: Form
- ========================================================================== */
-
-/*
- * 1. Define consistent box sizing.
- * Default is `content-box` with following exceptions set to `border-box`
- * `select`, `input[type="checkbox"]` and `input[type="radio"]`
- * `input[type="search"]` in Chrome, Safari and Opera
- * `input[type="color"]` in Firefox
- * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera.
- * 3. Remove `border-radius` in iOS.
- * 4. Change font properties to `inherit` in all browsers.
- */
-
-.uk-input,
-.uk-select,
-.uk-textarea,
-.uk-radio,
-.uk-checkbox {
- /* 1 */
- box-sizing: border-box;
- /* 2 */
- margin: 0;
- /* 3 */
- border-radius: 0;
- /* 4 */
- font: inherit;
-}
-
-/*
- * Show the overflow in Edge.
- */
-
-.uk-input { overflow: visible; }
-
-/*
- * Remove the inheritance of text transform in Firefox.
- */
-
-.uk-select { text-transform: none; }
-
-/*
- * 1. Change font properties to `inherit` in all browsers
- * 2. Don't inherit the `font-weight` and use `bold` instead.
- * NOTE: Both declarations don't work in Chrome, Safari and Opera.
- */
-
-.uk-select optgroup {
- /* 1 */
- font: inherit;
- /* 2 */
- font-weight: bold;
-}
-
-/*
- * Remove the default vertical scrollbar in IE 10+.
- */
-
-.uk-textarea { overflow: auto; }
-
-/*
- * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X.
- */
-
-.uk-input[type="search"]::-webkit-search-cancel-button,
-.uk-input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
-
-
-/*
- * Correct the cursor style of increment and decrement buttons in Chrome.
- */
-
-.uk-input[type="number"]::-webkit-inner-spin-button,
-.uk-input[type="number"]::-webkit-outer-spin-button { height: auto; }
-
-/*
- * Removes placeholder transparency in Firefox.
- */
-
-.uk-input::-moz-placeholder,
-.uk-textarea::-moz-placeholder { opacity: 1; }
-
-/*
- * Improves consistency of cursor style for clickable elements
- */
-
-.uk-radio:not(:disabled),
-.uk-checkbox:not(:disabled) { cursor: pointer; }
-
-/*
- * Define consistent border, margin, and padding.
- */
-
-.uk-fieldset {
- border: none;
- margin: 0;
- padding: 0;
-}
-
-
-/* Input, select and textarea
- * Allowed: `text`, `password`, `datetime`, `datetime-local`, `date`, `month`,
- `time`, `week`, `number`, `email`, `url`, `search`, `tel`, `color`
- * Disallowed: `range`, `radio`, `checkbox`, `file`, `submit`, `reset` and `image`
- ========================================================================== */
-
-/*
- * Remove default style in iOS.
- */
-
-.uk-input,
-.uk-textarea { -webkit-appearance: none; }
-
-/*
- * 1. Prevent content overflow if a fixed width is used
- * 2. Take the full width
- * 3. Reset default
- * 4. Style
- */
-
-.uk-input,
-.uk-select,
-.uk-textarea {
- /* 1 */
- max-width: 100%;
- /* 2 */
- width: 100%;
- /* 3 */
- border: 0 none;
- /* 4 */
- padding: 0 $form-padding-horizontal;
- background: $form-background;
- color: $form-color;
- @if(mixin-exists(hook-form)) {@include hook-form();}
-}
-
-/*
- * Single-line
- * 1. Allow any element to look like an `input` or `select` element
- * 2. Make sure line-height is not larger than height
- * Also needed to center the text vertically
- */
-
-.uk-input,
-.uk-select:not([multiple]):not([size]) {
- height: $form-height;
- vertical-align: middle;
- /* 1 */
- display: inline-block;
- @if(mixin-exists(hook-form-single-line)) {@include hook-form-single-line();}
-}
-
-/* 2 */
-.uk-input:not(input),
-.uk-select:not(select) { line-height: $form-line-height; }
-
-/*
- * Multi-line
- */
-
-.uk-select[multiple],
-.uk-select[size],
-.uk-textarea {
- padding-top: $form-padding-vertical;
- padding-bottom: $form-padding-vertical;
- vertical-align: top;
- @if(mixin-exists(hook-form-multi-line)) {@include hook-form-multi-line();}
-}
-
-.uk-select[multiple],
-.uk-select[size] { resize: vertical; }
-
-/* Focus */
-.uk-input:focus,
-.uk-select:focus,
-.uk-textarea:focus {
- outline: none;
- background-color: $form-focus-background;
- color: $form-focus-color;
- @if(mixin-exists(hook-form-focus)) {@include hook-form-focus();}
-}
-
-/* Disabled */
-.uk-input:disabled,
-.uk-select:disabled,
-.uk-textarea:disabled {
- background-color: $form-disabled-background;
- color: $form-disabled-color;
- @if(mixin-exists(hook-form-disabled)) {@include hook-form-disabled();}
-}
-
-/*
- * Placeholder
- */
-
-.uk-input::-ms-input-placeholder { color: $form-placeholder-color !important; }
-.uk-input::placeholder { color: $form-placeholder-color; }
-
-.uk-textarea::-ms-input-placeholder { color: $form-placeholder-color !important; }
-.uk-textarea::placeholder { color: $form-placeholder-color; }
-
-
-/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`)
- ========================================================================== */
-
-/*
- * Small
- */
-
-.uk-form-small { font-size: $form-small-font-size; }
-
-/* Single-line */
-.uk-form-small:not(textarea):not([multiple]):not([size]) {
- height: $form-small-height;
- padding-left: $form-small-padding-horizontal;
- padding-right: $form-small-padding-horizontal;
-}
-
-/* Multi-line */
-textarea.uk-form-small,
-[multiple].uk-form-small,
-[size].uk-form-small { padding: $form-small-padding-vertical $form-small-padding-horizontal; }
-
-.uk-form-small:not(select):not(input):not(textarea) { line-height: $form-small-line-height; }
-
-/*
- * Large
- */
-
-.uk-form-large { font-size: $form-large-font-size; }
-
-/* Single-line */
-.uk-form-large:not(textarea):not([multiple]):not([size]) {
- height: $form-large-height;
- padding-left: $form-large-padding-horizontal;
- padding-right: $form-large-padding-horizontal;
-}
-
-/* Multi-line */
-textarea.uk-form-large,
-[multiple].uk-form-large,
-[size].uk-form-large { padding: $form-large-padding-vertical $form-large-padding-horizontal; }
-
-.uk-form-large:not(select):not(input):not(textarea) { line-height: $form-large-line-height; }
-
-
-/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`)
- ========================================================================== */
-
-/*
- * Error
- */
-
-.uk-form-danger,
-.uk-form-danger:focus {
- color: $form-danger-color;
- @if(mixin-exists(hook-form-danger)) {@include hook-form-danger();}
-}
-
-/*
- * Success
- */
-
-.uk-form-success,
-.uk-form-success:focus {
- color: $form-success-color;
- @if(mixin-exists(hook-form-success)) {@include hook-form-success();}
-}
-
-/*
- * Blank
- */
-
-.uk-form-blank {
- background: none;
- @if(mixin-exists(hook-form-blank)) {@include hook-form-blank();}
-}
-
-.uk-form-blank:focus {
- @if(mixin-exists(hook-form-blank-focus)) {@include hook-form-blank-focus();}
-}
-
-
-/* Width modifiers (`uk-input`, `uk-select` and `uk-textarea`)
- ========================================================================== */
-
-/*
- * Fixed widths
- * Different widths for mini sized `input` and `select` elements
- */
-
-input.uk-form-width-xsmall { width: $form-width-xsmall; }
-
-select.uk-form-width-xsmall { width: ($form-width-xsmall + 25px); }
-
-.uk-form-width-small { width: $form-width-small; }
-
-.uk-form-width-medium { width: $form-width-medium; }
-
-.uk-form-width-large { width: $form-width-large; }
-
-
-/* Select
- ========================================================================== */
-
-/*
- * 1. Remove default style. Also works in Firefox
- * 2. Style
- * 3. Remove default style in IE 10/11
- * 4. Set `color` for options in the select dropdown, because the inherited `color` might be too light.
- */
-
-.uk-select:not([multiple]):not([size]) {
- /* 1 */
- -webkit-appearance: none;
- -moz-appearance: none;
- /* 2 */
- padding-right: $form-select-padding-right;
- @include svg-fill($internal-form-select-image, "#000", $form-select-icon-color);
- background-repeat: no-repeat;
- background-position: 100% 50%;
-}
-
-/* 3 */
-.uk-select:not([multiple]):not([size])::-ms-expand { display: none; }
-
-/* 4 */
-.uk-select:not([multiple]):not([size]) option { color: $form-select-option-color; }
-
-/*
- * Disabled
- */
-
-.uk-select:not([multiple]):not([size]):disabled { @include svg-fill($internal-form-select-image, "#000", $form-select-disabled-icon-color); }
-
-
-/* Datalist
- ========================================================================== */
-
-/*
- * 1. Remove default style in Chrome
- */
-
- .uk-input[list] {
- padding-right: $form-datalist-padding-right;
- background-repeat: no-repeat;
- background-position: 100% 50%;
-}
-
-.uk-input[list]:hover,
-.uk-input[list]:focus { @include svg-fill($internal-form-datalist-image, "#000", $form-datalist-icon-color); }
-
-/* 1 */
-.uk-input[list]::-webkit-calendar-picker-indicator { display: none !important; }
-
-
-/* Radio and checkbox
- * Note: Does not work in IE11
- ========================================================================== */
-
-/*
- * 1. Style
- * 2. Make box more robust so it clips the child element
- * 3. Vertical alignment
- * 4. Remove default style
- * 5. Fix black background on iOS
- * 6. Center icons
- */
-
-.uk-radio,
-.uk-checkbox {
- /* 1 */
- display: inline-block;
- height: $form-radio-size;
- width: $form-radio-size;
- /* 2 */
- overflow: hidden;
- /* 3 */
- margin-top: $form-radio-margin-top;
- vertical-align: middle;
- /* 4 */
- -webkit-appearance: none;
- -moz-appearance: none;
- /* 5 */
- background-color: $form-radio-background;
- /* 6 */
- background-repeat: no-repeat;
- background-position: 50% 50%;
- @if(mixin-exists(hook-form-radio)) {@include hook-form-radio();}
-}
-
-.uk-radio { border-radius: 50%; }
-
-/* Focus */
-.uk-radio:focus,
-.uk-checkbox:focus {
- background-color: $form-radio-focus-background;
- outline: none;
- @if(mixin-exists(hook-form-radio-focus)) {@include hook-form-radio-focus();}
-}
-
-/*
- * Checked
- */
-
-.uk-radio:checked,
-.uk-checkbox:checked,
-.uk-checkbox:indeterminate {
- background-color: $form-radio-checked-background;
- @if(mixin-exists(hook-form-radio-checked)) {@include hook-form-radio-checked();}
-}
-
-/* Focus */
-.uk-radio:checked:focus,
-.uk-checkbox:checked:focus,
-.uk-checkbox:indeterminate:focus {
- background-color: $form-radio-checked-focus-background;
- @if(mixin-exists(hook-form-radio-checked-focus)) {@include hook-form-radio-checked-focus();}
-}
-
-/*
- * Icons
- */
-
-.uk-radio:checked { @include svg-fill($internal-form-radio-image, "#000", $form-radio-checked-icon-color); }
-.uk-checkbox:checked { @include svg-fill($internal-form-checkbox-image, "#000", $form-radio-checked-icon-color); }
-.uk-checkbox:indeterminate { @include svg-fill($internal-form-checkbox-indeterminate-image, "#000", $form-radio-checked-icon-color); }
-
-/*
- * Disabled
- */
-
-.uk-radio:disabled,
-.uk-checkbox:disabled {
- background-color: $form-radio-disabled-background;
- @if(mixin-exists(hook-form-radio-disabled)) {@include hook-form-radio-disabled();}
-}
-
-.uk-radio:disabled:checked { @include svg-fill($internal-form-radio-image, "#000", $form-radio-disabled-icon-color); }
-.uk-checkbox:disabled:checked { @include svg-fill($internal-form-checkbox-image, "#000", $form-radio-disabled-icon-color); }
-.uk-checkbox:disabled:indeterminate { @include svg-fill($internal-form-checkbox-indeterminate-image, "#000", $form-radio-disabled-icon-color); }
-
-
-/* Legend
- ========================================================================== */
-
-/*
- * Legend
- * 1. Behave like block element
- * 2. Correct the color inheritance from `fieldset` elements in IE.
- * 3. Remove padding so people aren't caught out if they zero out fieldsets.
- * 4. Style
- */
-
-.uk-legend {
- /* 1 */
- width: 100%;
- /* 2 */
- color: inherit;
- /* 3 */
- padding: 0;
- /* 4 */
- font-size: $form-legend-font-size;
- line-height: $form-legend-line-height;
- @if(mixin-exists(hook-form-legend)) {@include hook-form-legend();}
-}
-
-
-/* Custom controls
- ========================================================================== */
-
-/*
- * 1. Container fits its content
- * 2. Create position context
- * 3. Prevent content overflow
- * 4. Behave like most inline-block elements
- */
-
-.uk-form-custom {
- /* 1 */
- display: inline-block;
- /* 2 */
- position: relative;
- /* 3 */
- max-width: 100%;
- /* 4 */
- vertical-align: middle;
-}
-
-/*
- * 1. Position and resize the form control to always cover its container
- * 2. Required for Firefox for positioning to the left
- * 3. Required for Webkit to make `height` work
- * 4. Hide controle and show cursor
- * 5. Needed for the cursor
- * 6. Clip height caused by 5. Needed for Webkit only
- */
-
-.uk-form-custom select,
-.uk-form-custom input[type="file"] {
- /* 1 */
- position: absolute;
- top: 0;
- z-index: 1;
- width: 100%;
- height: 100%;
- /* 2 */
- left: 0;
- /* 3 */
- -webkit-appearance: none;
- /* 4 */
- opacity: 0;
- cursor: pointer;
-}
-
-.uk-form-custom input[type="file"] {
- /* 5 */
- font-size: 500px;
- /* 6 */
- overflow: hidden;
-}
-
-
-/* Label
- ========================================================================== */
-
-.uk-form-label {
- @if(mixin-exists(hook-form-label)) {@include hook-form-label();}
-}
-
-
-/* Layout
- ========================================================================== */
-
-/*
- * Stacked
- */
-
-.uk-form-stacked .uk-form-label {
- display: block;
- margin-bottom: $form-stacked-margin-bottom;
- @if(mixin-exists(hook-form-stacked-label)) {@include hook-form-stacked-label();}
-}
-
-/*
- * Horizontal
- */
-
-/* Tablet portrait and smaller */
-@media (max-width: $breakpoint-small-max) {
-
- /* Behave like `uk-form-stacked` */
- .uk-form-horizontal .uk-form-label {
- display: block;
- margin-bottom: $form-stacked-margin-bottom;
- @if(mixin-exists(hook-form-stacked-label)) {@include hook-form-stacked-label();}
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-form-horizontal .uk-form-label {
- width: $form-horizontal-label-width;
- margin-top: $form-horizontal-label-margin-top;
- float: left;
- @if(mixin-exists(hook-form-horizontal-label)) {@include hook-form-horizontal-label();}
- }
-
- .uk-form-horizontal .uk-form-controls { margin-left: $form-horizontal-controls-margin-left; }
-
- /* Better vertical alignment if controls are checkboxes and radio buttons with text */
- .uk-form-horizontal .uk-form-controls-text { padding-top: $form-horizontal-controls-text-padding-top; }
-
-}
-
-
-/* Icons
- ========================================================================== */
-
-/*
- * 1. Set position
- * 2. Set width
- * 3. Center icon vertically and horizontally
- * 4. Style
- */
-
-.uk-form-icon {
- /* 1 */
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- /* 2 */
- width: $form-icon-width;
- /* 3 */
- display: inline-flex;
- justify-content: center;
- align-items: center;
- /* 4 */
- color: $form-icon-color;
-}
-
-/*
- * Required for `a`.
- */
-
-.uk-form-icon:hover { color: $form-icon-hover-color; }
-
-/*
- * Make `input` element clickable through icon, e.g. if it's a `span`
- */
-
-.uk-form-icon:not(a):not(button):not(input) { pointer-events: none; }
-
-/*
- * Input padding
- */
-
-.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input { padding-left: $form-icon-width !important; }
-
-/*
- * Position modifier
- */
-
-.uk-form-icon-flip {
- right: 0;
- left: auto;
-}
-
-.uk-form-icon-flip ~ .uk-input { padding-right: $form-icon-width !important; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-form-misc)) {@include hook-form-misc();}
-
-// @mixin hook-form(){}
-// @mixin hook-form-single-line(){}
-// @mixin hook-form-multi-line(){}
-// @mixin hook-form-focus(){}
-// @mixin hook-form-disabled(){}
-// @mixin hook-form-danger(){}
-// @mixin hook-form-success(){}
-// @mixin hook-form-blank(){}
-// @mixin hook-form-blank-focus(){}
-// @mixin hook-form-radio(){}
-// @mixin hook-form-radio-focus(){}
-// @mixin hook-form-radio-checked(){}
-// @mixin hook-form-radio-checked-focus(){}
-// @mixin hook-form-radio-disabled(){}
-// @mixin hook-form-legend(){}
-// @mixin hook-form-label(){}
-// @mixin hook-form-stacked-label(){}
-// @mixin hook-form-horizontal-label(){}
-// @mixin hook-form-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-form-background: $inverse-global-muted-background !default;
-$inverse-form-color: $inverse-global-color !default;
-$inverse-form-focus-background: fadein($inverse-form-background, 5%) !default;
-$inverse-form-focus-color: $inverse-global-color !default;
-$inverse-form-placeholder-color: $inverse-global-muted-color !default;
-
-$inverse-form-select-icon-color: $inverse-global-color !default;
-
-$inverse-form-datalist-icon-color: $inverse-global-color !default;
-
-$inverse-form-radio-background: $inverse-global-muted-background !default;
-
-$inverse-form-radio-focus-background: fadein($inverse-form-radio-background, 5%) !default;
-
-$inverse-form-radio-checked-background: $inverse-global-primary-background !default;
-$inverse-form-radio-checked-icon-color: $inverse-global-inverse-color !default;
-
-$inverse-form-radio-checked-focus-background: fadein($inverse-global-primary-background, 10%) !default;
-
-$inverse-form-icon-color: $inverse-global-muted-color !default;
-$inverse-form-icon-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-form(){}
-// @mixin hook-inverse-form-focus(){}
-// @mixin hook-inverse-form-radio(){}
-// @mixin hook-inverse-form-radio-focus(){}
-// @mixin hook-inverse-form-radio-checked(){}
-// @mixin hook-inverse-form-radio-checked-focus(){}
-// @mixin hook-inverse-form-label(){}
diff --git a/docs/_sass/uikit/components/grid-masonry.scss b/docs/_sass/uikit/components/grid-masonry.scss
deleted file mode 100644
index 935ea251e1..0000000000
--- a/docs/_sass/uikit/components/grid-masonry.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-// Name: Grid
-// Description: Component to create two dimensional grids
-//
-// Component: `uk-grid2`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$grid-column-xsmall: 100px !default;
-$grid-column-small: 200px !default;
-$grid-column-medium: 300px !default;
-$grid-column-large: 400px !default;
-$grid-column-xlarge: 500px !default;
-$grid-column-xxlarge: 600px !default;
-
-$grid-gap-small: $global-small-gutter !default;
-$grid-gap-medium: $global-gutter !default;
-$grid-gap-large: $global-large-gutter !default;
-
-
-/* ========================================================================
- Component: Grid
- ========================================================================== */
-
-.uk-grid-masonry { display: grid; }
-.uk-grid-inline { display: inline-grid; }
-
-
-/* Columns Width
- ========================================================================== */
-
-.uk-grid-column-xsmall { grid-template-columns: repeat(auto-fill, minmax($grid-column-xsmall,1fr)); }
-.uk-grid-column-small { grid-template-columns: repeat(auto-fill, minmax($grid-column-small,1fr)); }
-.uk-grid-column-medium { grid-template-columns: repeat(auto-fill, minmax($grid-column-medium,1fr)); }
-.uk-grid-column-large { grid-template-columns: repeat(auto-fill, minmax($grid-column-large,1fr)); }
-.uk-grid-column-xlarge { grid-template-columns: repeat(auto-fill, minmax($grid-column-xlarge,1fr)); }
-.uk-grid-column-xxlarge { grid-template-columns: repeat(auto-fill, minmax($grid-column-xxlarge,1fr)); }
-
-
-/* Gap
- ========================================================================== */
-
-.uk-grid-gap-none { grid-gap: 0; }
-.uk-grid-gap-small { grid-gap: $grid-gap-small; }
-.uk-grid-gap-medium { grid-gap: $grid-gap-medium; }
-.uk-grid-gap-large { grid-gap: $grid-gap-large; }
-
-
-/* Auto Placement
- ========================================================================== */
-
-// Default
-.uk-grid-auto-flow-row { grid-auto-flow: row; }
-.uk-grid-auto-flow-column { grid-auto-flow: column; }
-.uk-grid-auto-flow-dense { grid-auto-flow: dense; }
-
-
-/* Item Span
- ========================================================================== */
-
-// TODO Fix implicit tracks if span is too large
-.uk-grid-item-span-2 { grid-column-start: span 2; }
-.uk-grid-item-span-3 { grid-column-start: span 3; }
-.uk-grid-item-span-4 { grid-column-start: span 4; }
-.uk-grid-item-span-5 { grid-column-start: span 5; }
-
diff --git a/docs/_sass/uikit/components/grid.scss b/docs/_sass/uikit/components/grid.scss
deleted file mode 100644
index 3f92c877e5..0000000000
--- a/docs/_sass/uikit/components/grid.scss
+++ /dev/null
@@ -1,407 +0,0 @@
-// Name: Grid
-// Description: Component to create responsive, fluid and nestable grids
-//
-// Component: `uk-grid`
-//
-// Modifiers: `uk-grid-small`
-// `uk-grid-medium`
-// `uk-grid-large`
-// `uk-grid-collapse`
-// `uk-grid-divider`
-// `uk-grid-match`
-// `uk-grid-stack`
-// `uk-grid-margin`
-// `uk-grid-margin-small`
-// `uk-grid-margin-medium`
-// `uk-grid-margin-large`
-// `uk-grid-margin-collapse`
-//
-// Sub-modifier: `uk-grid-item-match`
-//
-// States: `uk-first-column`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$grid-gutter-horizontal: $global-gutter !default;
-$grid-gutter-vertical: $grid-gutter-horizontal !default;
-$grid-gutter-horizontal-l: $global-medium-gutter !default;
-$grid-gutter-vertical-l: $grid-gutter-horizontal-l !default;
-
-$grid-small-gutter-horizontal: $global-small-gutter !default;
-$grid-small-gutter-vertical: $grid-small-gutter-horizontal !default;
-
-$grid-medium-gutter-horizontal: $global-gutter !default;
-$grid-medium-gutter-vertical: $grid-medium-gutter-horizontal !default;
-
-$grid-large-gutter-horizontal: $global-medium-gutter !default;
-$grid-large-gutter-vertical: $grid-large-gutter-horizontal !default;
-$grid-large-gutter-horizontal-l: $global-large-gutter !default;
-$grid-large-gutter-vertical-l: $grid-large-gutter-horizontal-l !default;
-
-$grid-divider-border-width: $global-border-width !default;
-$grid-divider-border: $global-border !default;
-
-
-/* ========================================================================
- Component: Grid
- ========================================================================== */
-
-/*
- * 1. Allow cells to wrap into the next line
- * 2. Reset list
- */
-
-.uk-grid {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-/*
- * Grid cell
- * Note: Space is allocated solely based on content dimensions, but shrinks: 0 1 auto
- * Reset margin for e.g. paragraphs
- */
-
-.uk-grid > * { margin: 0; }
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-grid > * > :last-child { margin-bottom: 0; }
-
-
-/* Gutter
- ========================================================================== */
-
-/*
- * Default
- */
-
-/* Horizontal */
-.uk-grid { margin-left: (-$grid-gutter-horizontal); }
-.uk-grid > * { padding-left: $grid-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid + .uk-grid,
-.uk-grid > .uk-grid-margin,
-* + .uk-grid-margin { margin-top: $grid-gutter-vertical; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- /* Horizontal */
- .uk-grid { margin-left: (-$grid-gutter-horizontal-l); }
- .uk-grid > * { padding-left: $grid-gutter-horizontal-l; }
-
- /* Vertical */
- .uk-grid + .uk-grid,
- .uk-grid > .uk-grid-margin,
- * + .uk-grid-margin { margin-top: $grid-gutter-vertical-l; }
-
-}
-
-/*
- * Small
- */
-
-/* Horizontal */
-.uk-grid-small,
-.uk-grid-column-small { margin-left: (-$grid-small-gutter-horizontal); }
-.uk-grid-small > *,
-.uk-grid-column-small > * { padding-left: $grid-small-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid + .uk-grid-small,
-.uk-grid + .uk-grid-row-small,
-.uk-grid-small > .uk-grid-margin,
-.uk-grid-row-small > .uk-grid-margin,
-* + .uk-grid-margin-small { margin-top: $grid-small-gutter-vertical; }
-
-/*
- * Medium
- */
-
-/* Horizontal */
-.uk-grid-medium,
-.uk-grid-column-medium { margin-left: (-$grid-medium-gutter-horizontal); }
-.uk-grid-medium > *,
-.uk-grid-column-medium > * { padding-left: $grid-medium-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid + .uk-grid-medium,
-.uk-grid + .uk-grid-row-medium,
-.uk-grid-medium > .uk-grid-margin,
-.uk-grid-row-medium > .uk-grid-margin,
-* + .uk-grid-margin-medium { margin-top: $grid-medium-gutter-vertical; }
-
-/*
- * Large
- */
-
-/* Horizontal */
-.uk-grid-large,
-.uk-grid-column-large { margin-left: (-$grid-large-gutter-horizontal); }
-.uk-grid-large > *,
-.uk-grid-column-large > * { padding-left: $grid-large-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid + .uk-grid-large,
-.uk-grid + .uk-grid-row-large,
-.uk-grid-large > .uk-grid-margin,
-.uk-grid-row-large > .uk-grid-margin,
-* + .uk-grid-margin-large { margin-top: $grid-large-gutter-vertical; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- /* Horizontal */
- .uk-grid-large,
- .uk-grid-column-large { margin-left: (-$grid-large-gutter-horizontal-l); }
- .uk-grid-large > *,
- .uk-grid-column-large > * { padding-left: $grid-large-gutter-horizontal-l; }
-
- /* Vertical */
- .uk-grid + .uk-grid-large,
- .uk-grid + .uk-grid-row-large,
- .uk-grid-large > .uk-grid-margin,
- .uk-grid-row-large > .uk-grid-margin,
- * + .uk-grid-margin-large { margin-top: $grid-large-gutter-vertical-l; }
-
-}
-
-/*
- * Collapse
- */
-
-/* Horizontal */
-.uk-grid-collapse,
-.uk-grid-column-collapse { margin-left: 0; }
-.uk-grid-collapse > *,
-.uk-grid-column-collapse > * { padding-left: 0; }
-
-/* Vertical */
-.uk-grid + .uk-grid-collapse,
-.uk-grid + .uk-grid-row-collapse,
-.uk-grid-collapse > .uk-grid-margin,
-.uk-grid-row-collapse > .uk-grid-margin { margin-top: 0; }
-
-
-/* Divider
- ========================================================================== */
-
-.uk-grid-divider > * { position: relative; }
-
-.uk-grid-divider > :not(.uk-first-column)::before {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- border-left: $grid-divider-border-width solid $grid-divider-border;
- @if(mixin-exists(hook-grid-divider-horizontal)) {@include hook-grid-divider-horizontal();}
-}
-
-/* Vertical */
-.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
- content: "";
- position: absolute;
- left: 0;
- right: 0;
- border-top: $grid-divider-border-width solid $grid-divider-border;
- @if(mixin-exists(hook-grid-divider-vertical)) {@include hook-grid-divider-vertical();}
-}
-
-/*
- * Default
- */
-
-/* Horizontal */
-.uk-grid-divider { margin-left: -($grid-gutter-horizontal * 2); }
-.uk-grid-divider > * { padding-left: ($grid-gutter-horizontal * 2); }
-
-.uk-grid-divider > :not(.uk-first-column)::before { left: $grid-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-gutter-vertical * 2); }
-
-.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-gutter-vertical);
- left: ($grid-gutter-horizontal * 2);
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- /* Horizontal */
- .uk-grid-divider { margin-left: -($grid-gutter-horizontal-l * 2); }
- .uk-grid-divider > * { padding-left: ($grid-gutter-horizontal-l * 2); }
-
- .uk-grid-divider > :not(.uk-first-column)::before { left: $grid-gutter-horizontal-l; }
-
- /* Vertical */
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-gutter-vertical-l * 2); }
-
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-gutter-vertical-l);
- left: ($grid-gutter-horizontal-l * 2);
- }
-
-}
-
-/*
- * Small
- */
-
-/* Horizontal */
-.uk-grid-divider.uk-grid-small,
-.uk-grid-divider.uk-grid-column-small { margin-left: -($grid-small-gutter-horizontal * 2); }
-.uk-grid-divider.uk-grid-small > *,
-.uk-grid-divider.uk-grid-column-small > * { padding-left: ($grid-small-gutter-horizontal * 2); }
-
-.uk-grid-divider.uk-grid-small > :not(.uk-first-column)::before,
-.uk-grid-divider.uk-grid-column-small > :not(.uk-first-column)::before { left: $grid-small-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin,
-.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-small-gutter-vertical * 2); }
-
-.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-small-gutter-vertical);
- left: ($grid-small-gutter-horizontal * 2);
-}
-
-.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-small-gutter-vertical); }
-.uk-grid-divider.uk-grid-column-small.uk-grid-stack > .uk-grid-margin::before { left: ($grid-small-gutter-horizontal * 2); }
-
-/*
- * Medium
- */
-
-/* Horizontal */
-.uk-grid-divider.uk-grid-medium,
-.uk-grid-divider.uk-grid-column-medium { margin-left: -($grid-medium-gutter-horizontal * 2); }
-.uk-grid-divider.uk-grid-medium > *,
-.uk-grid-divider.uk-grid-column-medium > * { padding-left: ($grid-medium-gutter-horizontal * 2); }
-
-.uk-grid-divider.uk-grid-medium > :not(.uk-first-column)::before,
-.uk-grid-divider.uk-grid-column-medium > :not(.uk-first-column)::before { left: $grid-medium-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin,
-.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-medium-gutter-vertical * 2); }
-
-.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-medium-gutter-vertical);
- left: ($grid-medium-gutter-horizontal * 2);
-}
-
-.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-medium-gutter-vertical); }
-.uk-grid-divider.uk-grid-column-medium.uk-grid-stack > .uk-grid-margin::before { left: ($grid-medium-gutter-horizontal * 2); }
-
-/*
- * Large
- */
-
-/* Horizontal */
-.uk-grid-divider.uk-grid-large,
-.uk-grid-divider.uk-grid-column-large { margin-left: -($grid-large-gutter-horizontal * 2); }
-.uk-grid-divider.uk-grid-large > *,
-.uk-grid-divider.uk-grid-column-large > * { padding-left: ($grid-large-gutter-horizontal * 2); }
-
-.uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before,
-.uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: $grid-large-gutter-horizontal; }
-
-/* Vertical */
-.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
-.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-large-gutter-vertical * 2); }
-
-.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-large-gutter-vertical);
- left: ($grid-large-gutter-horizontal * 2);
-}
-
-.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-large-gutter-vertical); }
-.uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: ($grid-large-gutter-horizontal * 2); }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- /* Horizontal */
- .uk-grid-divider.uk-grid-large,
- .uk-grid-divider.uk-grid-column-large { margin-left: -($grid-large-gutter-horizontal-l * 2); }
- .uk-grid-divider.uk-grid-large > *,
- .uk-grid-divider.uk-grid-column-large > * { padding-left: ($grid-large-gutter-horizontal-l * 2); }
-
- .uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before,
- .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: $grid-large-gutter-horizontal-l; }
-
- /* Vertical */
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-large-gutter-vertical-l * 2); }
-
- .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
- top: (-$grid-large-gutter-vertical-l);
- left: ($grid-large-gutter-horizontal-l * 2);
- }
-
- .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-large-gutter-vertical-l); }
- .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: ($grid-large-gutter-horizontal-l * 2); }
-
-}
-
-
-/* Match child of a grid cell
- ========================================================================== */
-
-/*
- * Behave like a block element
- * 1. Wrap into the next line
- * 2. Take the full width, at least 100%. Only if no class from the Width component is set.
- * 3. Expand width even if larger than 100%, e.g. because of negative margin (Needed for nested grids)
- */
-
-.uk-grid-match > *,
-.uk-grid-item-match {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
-}
-
-.uk-grid-match > * > :not([class*='uk-width']),
-.uk-grid-item-match > :not([class*='uk-width']) {
- /* 2 */
- box-sizing: border-box;
- width: 100%;
- /* 3 */
- flex: auto;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-grid-misc)) {@include hook-grid-misc();}
-
-// @mixin hook-grid-divider-horizontal(){}
-// @mixin hook-grid-divider-vertical(){}
-// @mixin hook-grid-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-grid-divider-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-grid-divider-horizontal(){}
-// @mixin hook-inverse-grid-divider-vertical(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/heading.scss b/docs/_sass/uikit/components/heading.scss
deleted file mode 100644
index 05518547d2..0000000000
--- a/docs/_sass/uikit/components/heading.scss
+++ /dev/null
@@ -1,321 +0,0 @@
-// Name: Heading
-// Description: Styles for headings
-//
-// Component: `uk-heading-primary`
-// `uk-heading-hero`
-// `uk-heading-divider`
-// `uk-heading-bullet`
-// `uk-heading-line`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$heading-small-font-size: $heading-small-font-size-m * 0.8 !default; // 38px 0.73
-$heading-medium-font-size: $heading-medium-font-size-m * 0.825 !default; // 40px 0.714
-$heading-large-font-size: $heading-large-font-size-m * 0.85 !default; // 50px 0.78
-$heading-xlarge-font-size: $heading-large-font-size-m !default; // 4rem / 64px
-$heading-2xlarge-font-size: $heading-xlarge-font-size-m !default; // 6rem / 96px
-
-$heading-small-font-size-m: $heading-medium-font-size-l * 0.8125 !default; // 3.25rem / 52px
-$heading-medium-font-size-m: $heading-medium-font-size-l * 0.875 !default; // 3.5rem / 56px
-$heading-large-font-size-m: $heading-medium-font-size-l !default; // 4rem / 64px
-$heading-xlarge-font-size-m: $heading-large-font-size-l !default; // 6rem / 96px
-$heading-2xlarge-font-size-m: $heading-xlarge-font-size-l !default; // 8rem / 128px
-
-$heading-medium-font-size-l: 4rem !default; // 64px
-$heading-large-font-size-l: 6rem !default; // 96px
-$heading-xlarge-font-size-l: 8rem !default; // 128px
-$heading-2xlarge-font-size-l: 11rem !default; // 176px
-
-$heading-small-line-height: 1.2 !default;
-$heading-medium-line-height: 1.1 !default;
-$heading-large-line-height: 1.1 !default;
-$heading-xlarge-line-height: 1 !default;
-$heading-2xlarge-line-height: 1 !default;
-
-$heading-divider-padding-bottom: unquote('calc(5px + 0.1em)') !default;
-$heading-divider-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-divider-border: $global-border !default;
-
-$heading-bullet-top: unquote('calc(-0.1 * 1em)') !default;
-$heading-bullet-height: unquote('calc(4px + 0.7em)') !default;
-$heading-bullet-margin-right: unquote('calc(5px + 0.2em)') !default;
-$heading-bullet-border-width: unquote('calc(5px + 0.1em)') !default;
-$heading-bullet-border: $global-border !default;
-
-$heading-line-top: 50% !default;
-$heading-line-height: $heading-line-border-width !default;
-$heading-line-width: 2000px !default;
-$heading-line-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-line-border: $global-border !default;
-$heading-line-margin-horizontal: unquote('calc(5px + 0.3em)') !default;
-
-
-/* ========================================================================
- Component: Heading
- ========================================================================== */
-
-.uk-heading-small {
- font-size: $heading-small-font-size;
- line-height: $heading-small-line-height;
- @if(mixin-exists(hook-heading-small)) {@include hook-heading-small();}
-}
-
-.uk-heading-medium {
- font-size: $heading-medium-font-size;
- line-height: $heading-medium-line-height;
- @if(mixin-exists(hook-heading-medium)) {@include hook-heading-medium();}
-}
-
-.uk-heading-large {
- font-size: $heading-large-font-size;
- line-height: $heading-large-line-height;
- @if(mixin-exists(hook-heading-large)) {@include hook-heading-large();}
-}
-
-.uk-heading-xlarge {
- font-size: $heading-xlarge-font-size;
- line-height: $heading-xlarge-line-height;
- @if(mixin-exists(hook-heading-xlarge)) {@include hook-heading-xlarge();}
-}
-
-.uk-heading-2xlarge {
- font-size: $heading-2xlarge-font-size;
- line-height: $heading-2xlarge-line-height;
- @if(mixin-exists(hook-heading-2xlarge)) {@include hook-heading-2xlarge();}
-}
-
-/* Tablet Landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-heading-small { font-size: $heading-small-font-size-m; }
- .uk-heading-medium { font-size: $heading-medium-font-size-m; }
- .uk-heading-large { font-size: $heading-large-font-size-m; }
- .uk-heading-xlarge { font-size: $heading-xlarge-font-size-m; }
- .uk-heading-2xlarge { font-size: $heading-2xlarge-font-size-m; }
-
-}
-
-/* Laptop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-heading-medium { font-size: $heading-medium-font-size-l; }
- .uk-heading-large { font-size: $heading-large-font-size-l; }
- .uk-heading-xlarge { font-size: $heading-xlarge-font-size-l; }
- .uk-heading-2xlarge { font-size: $heading-2xlarge-font-size-l; }
-
-}
-
-
-/* Primary
- Deprecated: Use `uk-heading-medium` instead
- ========================================================================== */
-
-$heading-primary-font-size-l: 3.75rem !default; // 60px
-$heading-primary-line-height-l: 1.1 !default;
-
-$heading-primary-font-size-m: $heading-primary-font-size-l * 0.9 !default; // 54px
-
-$heading-primary-font-size: $heading-primary-font-size-l * 0.8 !default; // 48px
-$heading-primary-line-height: 1.2 !default;
-
-@if ($deprecated == true) {
-.uk-heading-primary {
- font-size: $heading-primary-font-size;
- line-height: $heading-primary-line-height;
- @if(mixin-exists(hook-heading-primary)) {@include hook-heading-primary();}
-}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- @if ($deprecated == true) {
-.uk-heading-primary { font-size: $heading-primary-font-size-m; }
-}
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- @if ($deprecated == true) {
-.uk-heading-primary {
- font-size: $heading-primary-font-size-l;
- line-height: $heading-primary-line-height-l;
- }
-}
-
-}
-
-
-/* Hero
- Deprecated: Use `uk-heading-xlarge` instead
- ========================================================================== */
-
-$heading-hero-font-size-l: 8rem !default; // 128px
-$heading-hero-line-height-l: 1 !default;
-
-$heading-hero-font-size-m: $heading-hero-font-size-l * 0.75 !default; // 96px
-$heading-hero-line-height-m: 1 !default;
-
-$heading-hero-font-size: $heading-hero-font-size-l * 0.5 !default; // 64px
-$heading-hero-line-height: 1.1 !default;
-
-@if ($deprecated == true) {
-.uk-heading-hero {
- font-size: $heading-hero-font-size;
- line-height: $heading-hero-line-height;
- @if(mixin-exists(hook-heading-hero)) {@include hook-heading-hero();}
-}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- @if ($deprecated == true) {
-.uk-heading-hero {
- font-size: $heading-hero-font-size-m;
- line-height: $heading-hero-line-height-m;
- }
-}
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- @if ($deprecated == true) {
-.uk-heading-hero {
- font-size: $heading-hero-font-size-l;
- line-height: $heading-hero-line-height-l;
- }
-}
-
-}
-
-
-/* Divider
- ========================================================================== */
-
-.uk-heading-divider {
- padding-bottom: $heading-divider-padding-bottom;
- border-bottom: $heading-divider-border-width solid $heading-divider-border;
- @if(mixin-exists(hook-heading-divider)) {@include hook-heading-divider();}
-}
-
-
-/* Bullet
- ========================================================================== */
-
-.uk-heading-bullet { position: relative; }
-
-/*
- * 1. Using `inline-block` to make it work with text alignment
- * 2. Center vertically
- * 3. Style
- */
-
-.uk-heading-bullet::before {
- content: "";
- /* 1 */
- display: inline-block;
- /* 2 */
- position: relative;
- top: $heading-bullet-top;
- vertical-align: middle;
- /* 3 */
- height: $heading-bullet-height;
- margin-right: $heading-bullet-margin-right;
- border-left: $heading-bullet-border-width solid $heading-bullet-border;
- @if(mixin-exists(hook-heading-bullet)) {@include hook-heading-bullet();}
-}
-
-
-/* Line
- ========================================================================== */
-
-/*
- * Clip the child element
- */
-
-.uk-heading-line { overflow: hidden; }
-
-/*
- * Extra markup is needed to make it work with text align
- */
-
-.uk-heading-line > * {
- display: inline-block;
- position: relative;
-}
-
-/*
- * 1. Center vertically
- * 2. Make the element as large as possible. It's clipped by the container.
- * 3. Style
- */
-
-.uk-heading-line > ::before,
-.uk-heading-line > ::after {
- content: "";
- /* 1 */
- position: absolute;
- top: unquote('calc(#{$heading-line-top} - (#{$heading-line-height} / 2))');
- /* 2 */
- width: $heading-line-width;
- /* 3 */
- border-bottom: $heading-line-border-width solid $heading-line-border;
- @if(mixin-exists(hook-heading-line)) {@include hook-heading-line();}
-}
-
-.uk-heading-line > ::before {
- right: 100%;
- margin-right: $heading-line-margin-horizontal;
-}
-.uk-heading-line > ::after {
- left: 100%;
- margin-left: $heading-line-margin-horizontal;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-heading-misc)) {@include hook-heading-misc();}
-
-// @mixin hook-heading-small(){}
-// @mixin hook-heading-medium(){}
-// @mixin hook-heading-large(){}
-// @mixin hook-heading-xlarge(){}
-// @mixin hook-heading-2xlarge(){}
-// @mixin hook-heading-primary(){}
-// @mixin hook-heading-hero(){}
-// @mixin hook-heading-divider(){}
-// @mixin hook-heading-bullet(){}
-// @mixin hook-heading-line(){}
-// @mixin hook-heading-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-heading-divider-border: $inverse-global-border !default;
-$inverse-heading-bullet-border: $inverse-global-border !default;
-$inverse-heading-line-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-heading-small(){}
-// @mixin hook-inverse-heading-medium(){}
-// @mixin hook-inverse-heading-large(){}
-// @mixin hook-inverse-heading-xlarge(){}
-// @mixin hook-inverse-heading-2xlarge(){}
-// @mixin hook-inverse-heading-primary(){}
-// @mixin hook-inverse-heading-hero(){}
-// @mixin hook-inverse-heading-divider(){}
-// @mixin hook-inverse-heading-bullet(){}
-// @mixin hook-inverse-heading-line(){}
diff --git a/docs/_sass/uikit/components/height.scss b/docs/_sass/uikit/components/height.scss
deleted file mode 100644
index 3bcc150436..0000000000
--- a/docs/_sass/uikit/components/height.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-// Name: Height
-// Description: Utilities for heights
-//
-// Component: `uk-height-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$height-small-height: 150px !default;
-$height-medium-height: 300px !default;
-$height-large-height: 450px !default;
-
-
-/* ========================================================================
- Component: Height
- ========================================================================== */
-
-[class*='uk-height'] { box-sizing: border-box; }
-
-/*
- * Only works if parent element has a height set
- */
-
-.uk-height-1-1 { height: 100%; }
-
-/*
- * Useful to create image teasers
- */
-
-.uk-height-viewport { min-height: 100vh; }
-
-/*
- * Pixel
- * Useful for `overflow: auto`
- */
-
-.uk-height-small { height: $height-small-height; }
-.uk-height-medium { height: $height-medium-height; }
-.uk-height-large { height: $height-large-height; }
-
-.uk-height-max-small { max-height: $height-small-height; }
-.uk-height-max-medium { max-height: $height-medium-height; }
-.uk-height-max-large { max-height: $height-large-height; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-height-misc)) {@include hook-height-misc();}
-
-// @mixin hook-height-misc(){}
diff --git a/docs/_sass/uikit/components/icon.scss b/docs/_sass/uikit/components/icon.scss
deleted file mode 100644
index d801424b5b..0000000000
--- a/docs/_sass/uikit/components/icon.scss
+++ /dev/null
@@ -1,220 +0,0 @@
-// Name: Icon
-// Description: Component to create icons
-//
-// Component: `uk-icon`
-//
-// Modifiers: `uk-icon-image`
-// `uk-icon-link`
-// `uk-icon-button`
-//
-// States: `uk-preserve`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$icon-image-size: 20px !default;
-
-$icon-link-color: $global-muted-color !default;
-$icon-link-hover-color: $global-color !default;
-$icon-link-active-color: darken($global-color, 5%) !default;
-
-$icon-button-size: 36px !default;
-$icon-button-border-radius: 500px !default;
-$icon-button-background: $global-muted-background !default;
-$icon-button-color: $global-muted-color !default;
-
-$icon-button-hover-background: darken($icon-button-background, 5%) !default;
-$icon-button-hover-color: $global-color !default;
-
-$icon-button-active-background: darken($icon-button-background, 10%) !default;
-$icon-button-active-color: $global-color !default;
-
-
-/* ========================================================================
- Component: Icon
- ========================================================================== */
-
-/*
- * Note: 1. - 7. is required for `button` elements. Needed for Close and Form Icon component.
- * 1. Remove margins in Chrome, Safari and Opera.
- * 2. Remove borders for `button`.
- * 3. Remove border-radius in Chrome.
- * 4. Address `overflow` set to `hidden` in IE.
- * 5. Correct `font` properties and `color` not being inherited for `button`.
- * 6. Remove the inheritance of text transform in Edge, Firefox, and IE.
- * 7. Remove default `button` padding and background color
- * 8. Style
- * 9. Fill all SVG elements with the current text color if no `fill` attribute is set
- * 10. Let the container fit the height of the icon
- */
-
-.uk-icon {
- /* 1 */
- margin: 0;
- /* 2 */
- border: none;
- /* 3 */
- border-radius: 0;
- /* 4 */
- overflow: visible;
- /* 5 */
- font: inherit;
- color: inherit;
- /* 6 */
- text-transform: none;
- /* 7. */
- padding: 0;
- background-color: transparent;
- /* 8 */
- display: inline-block;
- /* 9 */
- fill: currentcolor;
- /* 10 */
- line-height: 0;
-}
-
-/* Required for `button`. */
-button.uk-icon:not(:disabled) { cursor: pointer; }
-
-/*
- * Remove the inner border and padding in Firefox.
- */
-
-.uk-icon::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/*
- * Set the fill and stroke color of all SVG elements to the current text color
- */
-
-.uk-icon:not(.uk-preserve) [fill*='#']:not(.uk-preserve) { fill: currentcolor; }
-.uk-icon:not(.uk-preserve) [stroke*='#']:not(.uk-preserve) { stroke: currentcolor; }
-
-/*
- * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835
- */
-
-.uk-icon > * { transform: translate(0,0); }
-
-
-/* Image modifier
- ========================================================================== */
-
-/*
- * Display images in icon dimensions
- */
-
-.uk-icon-image {
- width: $icon-image-size;
- height: $icon-image-size;
- background-position: 50% 50%;
- background-repeat: no-repeat;
- background-size: contain;
- vertical-align: middle;
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Link
- */
-
-.uk-icon-link {
- color: $icon-link-color;
- @if(mixin-exists(hook-icon-link)) {@include hook-icon-link();}
-}
-
-.uk-icon-link:hover,
-.uk-icon-link:focus {
- color: $icon-link-hover-color;
- outline: none;
- @if(mixin-exists(hook-icon-link-hover)) {@include hook-icon-link-hover();}
-}
-
-/* OnClick + Active */
-.uk-icon-link:active,
-.uk-active > .uk-icon-link {
- color: $icon-link-active-color;
- @if(mixin-exists(hook-icon-link-active)) {@include hook-icon-link-active();}
-}
-
-/*
- * Button
- * 1. Center icon vertically and horizontally
- */
-
-.uk-icon-button {
- box-sizing: border-box;
- width: $icon-button-size;
- height: $icon-button-size;
- border-radius: $icon-button-border-radius;
- background: $icon-button-background;
- color: $icon-button-color;
- vertical-align: middle;
- /* 1 */
- display: inline-flex;
- justify-content: center;
- align-items: center;
- @if(mixin-exists(hook-icon-button)) {@include hook-icon-button();}
-}
-
-/* Hover + Focus */
-.uk-icon-button:hover,
-.uk-icon-button:focus {
- background-color: $icon-button-hover-background;
- color: $icon-button-hover-color;
- outline: none;
- @if(mixin-exists(hook-icon-button-hover)) {@include hook-icon-button-hover();}
-}
-
-/* OnClick + Active */
-.uk-icon-button:active,
-.uk-active > .uk-icon-button {
- background-color: $icon-button-active-background;
- color: $icon-button-active-color;
- @if(mixin-exists(hook-icon-button-active)) {@include hook-icon-button-active();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-icon-misc)) {@include hook-icon-misc();}
-
-// @mixin hook-icon-link(){}
-// @mixin hook-icon-link-hover(){}
-// @mixin hook-icon-link-active(){}
-// @mixin hook-icon-button(){}
-// @mixin hook-icon-button-hover(){}
-// @mixin hook-icon-button-active(){}
-// @mixin hook-icon-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-icon-link-color: $inverse-global-muted-color !default;
-$inverse-icon-link-hover-color: $inverse-global-color !default;
-$inverse-icon-link-active-color: $inverse-global-color !default;
-$inverse-icon-button-background: $inverse-global-muted-background !default;
-$inverse-icon-button-color: $inverse-global-muted-color !default;
-$inverse-icon-button-hover-background: fadein($inverse-icon-button-background, 5%) !default;
-$inverse-icon-button-hover-color: $inverse-global-color !default;
-$inverse-icon-button-active-background: fadein($inverse-icon-button-background, 10%) !default;
-$inverse-icon-button-active-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-icon-link(){}
-// @mixin hook-inverse-icon-link-hover(){}
-// @mixin hook-inverse-icon-link-active(){}
-// @mixin hook-inverse-icon-button(){}
-// @mixin hook-inverse-icon-button-hover(){}
-// @mixin hook-inverse-icon-button-active(){}
diff --git a/docs/_sass/uikit/components/iconnav.scss b/docs/_sass/uikit/components/iconnav.scss
deleted file mode 100644
index e0d2ae1a14..0000000000
--- a/docs/_sass/uikit/components/iconnav.scss
+++ /dev/null
@@ -1,148 +0,0 @@
-// Name: Iconnav
-// Description: Component to create icon navigations
-//
-// Component: `uk-iconnav`
-//
-// Modifier: `uk-iconnav-vertical`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$iconnav-margin-horizontal: $global-small-margin !default;
-$iconnav-margin-vertical: $iconnav-margin-horizontal !default;
-
-$iconnav-item-color: $global-muted-color !default;
-
-$iconnav-item-hover-color: $global-color !default;
-
-$iconnav-item-active-color: $global-color !default;
-
-
-/* ========================================================================
- Component: Iconnav
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Reset list
- * 3. Gutter
- */
-
-.uk-iconnav {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin: 0;
- padding: 0;
- list-style: none;
- /* 3 */
- margin-left: (-$iconnav-margin-horizontal);
- @if(mixin-exists(hook-iconnav)) {@include hook-iconnav();}
-}
-
-/*
- * Space is allocated based on content dimensions, but shrinks: 0 1 auto
- * 1. Gutter
- */
-
-.uk-iconnav > * {
- /* 1 */
- padding-left: $iconnav-margin-horizontal;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Items must target `a` elements to exclude other elements (e.g. dropdowns)
- * 1. Center content vertically if there is still some text
- * 2. Imitate white space gap when using flexbox
- * 3. Force text not to affect item height
- * 4. Style
- * 5. Required for `a` if there is still some text
- */
-
-.uk-iconnav > * > a {
- /* 1 */
- display: flex;
- align-items: center;
- /* 2 */
- column-gap: 0.25em;
- /* 3 */
- line-height: 0;
- /* 4 */
- color: $iconnav-item-color;
- /* 5 */
- text-decoration: none;
- @if(mixin-exists(hook-iconnav-item)) {@include hook-iconnav-item();}
-}
-
-/* Hover + Focus */
-.uk-iconnav > * > a:hover,
-.uk-iconnav > * > a:focus {
- color: $iconnav-item-hover-color;
- outline: none;
- @if(mixin-exists(hook-iconnav-item-hover)) {@include hook-iconnav-item-hover();}
-}
-
-/* Active */
-.uk-iconnav > .uk-active > a {
- color: $iconnav-item-active-color;
- @if(mixin-exists(hook-iconnav-item-active)) {@include hook-iconnav-item-active();}
-}
-
-
-/* Modifier: 'uk-iconnav-vertical'
- ========================================================================== */
-
-/*
- * 1. Change direction
- * 2. Gutter
- */
-
-.uk-iconnav-vertical {
- /* 1 */
- flex-direction: column;
- /* 2 */
- margin-left: 0;
- margin-top: (-$iconnav-margin-vertical);
-}
-
-/* 2 */
-.uk-iconnav-vertical > * {
- padding-left: 0;
- padding-top: $iconnav-margin-vertical;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-iconnav-misc)) {@include hook-iconnav-misc();}
-
-// @mixin hook-iconnav(){}
-// @mixin hook-iconnav-item(){}
-// @mixin hook-iconnav-item-hover(){}
-// @mixin hook-iconnav-item-active(){}
-// @mixin hook-iconnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-iconnav-item-color: $inverse-global-muted-color !default;
-$inverse-iconnav-item-hover-color: $inverse-global-color !default;
-$inverse-iconnav-item-active-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-iconnav-item(){}
-// @mixin hook-inverse-iconnav-item-hover(){}
-// @mixin hook-inverse-iconnav-item-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/inverse.scss b/docs/_sass/uikit/components/inverse.scss
deleted file mode 100644
index cc5efee3f3..0000000000
--- a/docs/_sass/uikit/components/inverse.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-// Name: Inverse
-// Description: Inverse component style for light or dark backgrounds
-//
-// Component: `uk-light`
-// `uk-dark`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$inverse-global-color-mode: light !default;
-
-$inverse-global-color: rgba($global-inverse-color, 0.7) !default;
-$inverse-global-emphasis-color: $global-inverse-color !default;
-$inverse-global-muted-color: rgba($global-inverse-color, 0.5) !default;
-$inverse-global-inverse-color: $global-color !default;
-
-$inverse-global-primary-background: $global-inverse-color !default;
-$inverse-global-muted-background: rgba($global-inverse-color, 0.1) !default;
-
-$inverse-global-border: rgba($global-inverse-color, 0.2) !default;
-
-
-/* ========================================================================
- Component: Inverse
- ========================================================================== */
-
-
-
-/*
- * Implemented class depends on the general theme color
- * `uk-light` is for light colors on dark backgrounds
- * `uk-dark` is or dark colors on light backgrounds
- */
-
-@if ($inverse-global-color-mode == light) { .uk-light { @if (mixin-exists(hook-inverse)) {@include hook-inverse();}}}
-
-@if ($inverse-global-color-mode == dark) { .uk-dark { @if (mixin-exists(hook-inverse)) {@include hook-inverse();}}}
-
-
-// Hooks
-// ========================================================================
-
-// @mixin hook-inverse(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/label.scss b/docs/_sass/uikit/components/label.scss
deleted file mode 100644
index 6600aedfab..0000000000
--- a/docs/_sass/uikit/components/label.scss
+++ /dev/null
@@ -1,102 +0,0 @@
-// Name: Label
-// Description: Component to indicate important notes
-//
-// Component: `uk-label`
-//
-// Modifiers: `uk-label-success`
-// `uk-label-warning`
-// `uk-label-danger`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$label-padding-vertical: 0 !default;
-$label-padding-horizontal: $global-small-margin !default;
-$label-background: $global-primary-background !default;
-$label-line-height: $global-line-height !default;
-$label-font-size: $global-small-font-size !default;
-$label-color: $global-inverse-color !default;
-
-$label-success-background: $global-success-background !default;
-$label-success-color: $global-inverse-color !default;
-$label-warning-background: $global-warning-background !default;
-$label-warning-color: $global-inverse-color !default;
-$label-danger-background: $global-danger-background !default;
-$label-danger-color: $global-inverse-color !default;
-
-
-/* ========================================================================
- Component: Label
- ========================================================================== */
-
-.uk-label {
- display: inline-block;
- padding: $label-padding-vertical $label-padding-horizontal;
- background: $label-background;
- line-height: $label-line-height;
- font-size: $label-font-size;
- color: $label-color;
- vertical-align: middle;
- white-space: nowrap;
- @if(mixin-exists(hook-label)) {@include hook-label();}
-}
-
-
-/* Color modifiers
- ========================================================================== */
-
-/*
- * Success
- */
-
-.uk-label-success {
- background-color: $label-success-background;
- color: $label-success-color;
- @if(mixin-exists(hook-label-success)) {@include hook-label-success();}
-}
-
-/*
- * Warning
- */
-
-.uk-label-warning {
- background-color: $label-warning-background;
- color: $label-warning-color;
- @if(mixin-exists(hook-label-warning)) {@include hook-label-warning();}
-}
-
-/*
- * Danger
- */
-
-.uk-label-danger {
- background-color: $label-danger-background;
- color: $label-danger-color;
- @if(mixin-exists(hook-label-danger)) {@include hook-label-danger();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-label-misc)) {@include hook-label-misc();}
-
-// @mixin hook-label(){}
-// @mixin hook-label-success(){}
-// @mixin hook-label-warning(){}
-// @mixin hook-label-danger(){}
-// @mixin hook-label-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-label-background: $inverse-global-primary-background !default;
-$inverse-label-color: $inverse-global-inverse-color !default;
-
-
-
-// @mixin hook-inverse-label(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/leader.scss b/docs/_sass/uikit/components/leader.scss
deleted file mode 100644
index a671f098bf..0000000000
--- a/docs/_sass/uikit/components/leader.scss
+++ /dev/null
@@ -1,70 +0,0 @@
-// Name: Leader
-// Description: Component to create dot leaders
-//
-// Component: `uk-leader`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$leader-fill-content: unquote('.') !default;
-$leader-fill-margin-left: $global-small-gutter !default;
-
-
-/* ========================================================================
- Component: Leader
- ========================================================================== */
-
-.uk-leader { overflow: hidden; }
-
-/*
- * 1. Place element in text flow
- * 2. Never break into a new line
- * 3. Get a string back with as many repeating characters to fill the container
- * 4. Prevent wrapping. Overflowing characters will be clipped by the container
- */
-
-.uk-leader-fill::after {
- /* 1 */
- display: inline-block;
- margin-left: $leader-fill-margin-left;
- /* 2 */
- width: 0;
- /* 3 */
- content: attr(data-fill);
- /* 4 */
- white-space: nowrap;
- @if(mixin-exists(hook-leader)) {@include hook-leader();}
-}
-
-/*
- * Hide if media does not match
- */
-
-.uk-leader-fill.uk-leader-hide::after { display: none; }
-
-/*
- * Pass fill character to JS
- */
-
-.uk-leader-fill-content::before { content: '#{$leader-fill-content}'; }
-:root { --uk-leader-fill-content: #{$leader-fill-content}; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-leader-misc)) {@include hook-leader-misc();}
-
-// @mixin hook-leader(){}
-// @mixin hook-leader-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-
-
-// @mixin hook-inverse-leader(){}
diff --git a/docs/_sass/uikit/components/lightbox.scss b/docs/_sass/uikit/components/lightbox.scss
deleted file mode 100644
index 16f58c7882..0000000000
--- a/docs/_sass/uikit/components/lightbox.scss
+++ /dev/null
@@ -1,245 +0,0 @@
-// Name: Lightbox
-// Description: Component to create an lightbox image gallery
-//
-// Component: `uk-lightbox`
-//
-// Sub-objects: `uk-lightbox-page`
-// `uk-lightbox-items`
-// `uk-lightbox-toolbar`
-// `uk-lightbox-toolbar-icon`
-// `uk-lightbox-button`
-// `uk-lightbox-caption`
-// `uk-lightbox-iframe`
-//
-// States: `uk-open`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$lightbox-z-index: $global-z-index + 10 !default;
-$lightbox-background: #000 !default;
-
-$lightbox-item-color: rgba(255,255,255,0.7) !default;
-$lightbox-item-max-width: 100vw !default;
-$lightbox-item-max-height: 100vh !default;
-
-$lightbox-toolbar-padding-vertical: 10px !default;
-$lightbox-toolbar-padding-horizontal: 10px !default;
-$lightbox-toolbar-background: rgba(0,0,0,0.3) !default;
-$lightbox-toolbar-color: rgba(255,255,255,0.7) !default;
-
-$lightbox-toolbar-icon-padding: 5px !default;
-$lightbox-toolbar-icon-color: rgba(255,255,255,0.7) !default;
-
-$lightbox-toolbar-icon-hover-color: #fff !default;
-
-$lightbox-button-size: 50px !default;
-$lightbox-button-background: $lightbox-toolbar-background !default;
-$lightbox-button-color: rgba(255,255,255,0.7) !default;
-
-$lightbox-button-hover-color: #fff !default;
-
-
-/* ========================================================================
- Component: Lightbox
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Set position
- * 3. Allow scrolling for the modal dialog
- * 4. Horizontal padding
- * 5. Mask the background page
- * 6. Fade-in transition
- * 7. Prevent cancellation of pointer events while dragging
- */
-
-.uk-lightbox {
- /* 1 */
- display: none;
- /* 2 */
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: $lightbox-z-index;
- /* 5 */
- background: $lightbox-background;
- /* 6 */
- opacity: 0;
- transition: opacity 0.15s linear;
- /* 7 */
- touch-action: pinch-zoom;
- @if(mixin-exists(hook-lightbox)) {@include hook-lightbox();}
-}
-
-/*
- * Open
- * 1. Center child
- * 2. Fade-in
- */
-
-.uk-lightbox.uk-open {
- display: block;
- /* 2 */
- opacity: 1;
-}
-
-
-/* Page
- ========================================================================== */
-
-/*
- * Prevent scrollbars
- */
-
-.uk-lightbox-page { overflow: hidden; }
-
-
-/* Item
- ========================================================================== */
-
-/*
- * 1. Center child within the viewport
- * 2. Not visible by default
- * 3. Color needed for spinner icon
- * 4. Optimize animation
- * 5. Responsiveness
- * Using `vh` for `max-height` to fix image proportions after resize in Safari and Opera
- * Using `vh` and `vw` to make responsive image work in IE11
- * 6. Suppress outline on focus
- */
-
-.uk-lightbox-items > * {
- /* 1 */
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- /* 2 */
- display: none;
- justify-content: center;
- align-items: center;
- /* 3 */
- color: $lightbox-item-color;
- /* 4 */
- will-change: transform, opacity;
- @if(mixin-exists(hook-lightbox-item)) {@include hook-lightbox-item();}
-}
-
-/* 5 */
-.uk-lightbox-items > * > * {
- max-width: $lightbox-item-max-width;
- max-height: $lightbox-item-max-height;
-}
-
-/* 6 */
-.uk-lightbox-items > :focus { outline: none; }
-
-.uk-lightbox-items > * > :not(iframe) {
- width: auto;
- height: auto;
-}
-
-.uk-lightbox-items > .uk-active { display: flex; }
-
-/* Toolbar
- ========================================================================== */
-
-.uk-lightbox-toolbar {
- padding: $lightbox-toolbar-padding-vertical $lightbox-toolbar-padding-horizontal;
- background: $lightbox-toolbar-background;
- color: $lightbox-toolbar-color;
- @if(mixin-exists(hook-lightbox-toolbar)) {@include hook-lightbox-toolbar();}
-}
-
-.uk-lightbox-toolbar > * { color: $lightbox-toolbar-color; }
-
-
-/* Toolbar Icon (Close)
- ========================================================================== */
-
-.uk-lightbox-toolbar-icon {
- padding: $lightbox-toolbar-icon-padding;
- color: $lightbox-toolbar-icon-color;
- @if(mixin-exists(hook-lightbox-toolbar-icon)) {@include hook-lightbox-toolbar-icon();}
-}
-
-/*
- * Hover
- */
-
-.uk-lightbox-toolbar-icon:hover {
- color: $lightbox-toolbar-icon-hover-color;
- @if(mixin-exists(hook-lightbox-toolbar-icon-hover)) {@include hook-lightbox-toolbar-icon-hover();}
-}
-
-
-
-/* Button (Slidenav)
- ========================================================================== */
-
-/*
- * 1. Center icon vertically and horizontally
- */
-
-.uk-lightbox-button {
- box-sizing: border-box;
- width: $lightbox-button-size;
- height: $lightbox-button-size;
- background: $lightbox-button-background;
- color: $lightbox-button-color;
- /* 1 */
- display: inline-flex;
- justify-content: center;
- align-items: center;
- @if(mixin-exists(hook-lightbox-button)) {@include hook-lightbox-button();}
-}
-
-/* Hover + Focus */
-.uk-lightbox-button:hover,
-.uk-lightbox-button:focus {
- color: $lightbox-button-hover-color;
- @if(mixin-exists(hook-lightbox-button-hover)) {@include hook-lightbox-button-hover();}
-}
-
-/* OnClick */
-.uk-lightbox-button:active {
- @if(mixin-exists(hook-lightbox-button-active)) {@include hook-lightbox-button-active();}
-}
-
-
-/* Caption
- ========================================================================== */
-
-.uk-lightbox-caption:empty { display: none; }
-
-
-/* Iframe
- ========================================================================== */
-
-.uk-lightbox-iframe {
- width: 80%;
- height: 80%;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-lightbox-misc)) {@include hook-lightbox-misc();}
-
-// @mixin hook-lightbox(){}
-// @mixin hook-lightbox-item(){}
-// @mixin hook-lightbox-toolbar(){}
-// @mixin hook-lightbox-toolbar-icon(){}
-// @mixin hook-lightbox-toolbar-icon-hover(){}
-// @mixin hook-lightbox-button(){}
-// @mixin hook-lightbox-button-hover(){}
-// @mixin hook-lightbox-button-active(){}
-// @mixin hook-lightbox-misc(){}
diff --git a/docs/_sass/uikit/components/link.scss b/docs/_sass/uikit/components/link.scss
deleted file mode 100644
index 2df663525a..0000000000
--- a/docs/_sass/uikit/components/link.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-// Name: Link
-// Description: Styles for links
-//
-// Component: `uk-link-muted`
-// `uk-link-text`
-// `uk-link-heading`
-// `uk-link-reset`
-//
-// Sub-objects: `uk-link-toggle`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$link-muted-color: $global-muted-color !default;
-$link-muted-hover-color: $global-color !default;
-
-$link-text-hover-color: $global-muted-color !default;
-
-$link-heading-hover-color: $global-primary-background !default;
-$link-heading-hover-text-decoration: none !default;
-
-
-/* ========================================================================
- Component: Link
- ========================================================================== */
-
-
-/* Muted
- ========================================================================== */
-
-a.uk-link-muted,
-.uk-link-muted a {
- color: $link-muted-color;
- @if(mixin-exists(hook-link-muted)) {@include hook-link-muted();}
-}
-
-a.uk-link-muted:hover,
-.uk-link-muted a:hover,
-.uk-link-toggle:hover .uk-link-muted,
-.uk-link-toggle:focus .uk-link-muted {
- color: $link-muted-hover-color;
- @if(mixin-exists(hook-link-muted-hover)) {@include hook-link-muted-hover();}
-}
-
-
-/* Text
- ========================================================================== */
-
-a.uk-link-text,
-.uk-link-text a {
- color: inherit;
- @if(mixin-exists(hook-link-text)) {@include hook-link-text();}
-}
-
-a.uk-link-text:hover,
-.uk-link-text a:hover,
-.uk-link-toggle:hover .uk-link-text,
-.uk-link-toggle:focus .uk-link-text {
- color: $link-text-hover-color;
- @if(mixin-exists(hook-link-text-hover)) {@include hook-link-text-hover();}
-}
-
-
-/* Heading
- ========================================================================== */
-
-a.uk-link-heading,
-.uk-link-heading a {
- color: inherit;
- @if(mixin-exists(hook-link-heading)) {@include hook-link-heading();}
-}
-
-a.uk-link-heading:hover,
-.uk-link-heading a:hover,
-.uk-link-toggle:hover .uk-link-heading,
-.uk-link-toggle:focus .uk-link-heading {
- color: $link-heading-hover-color;
- text-decoration: $link-heading-hover-text-decoration;
- @if(mixin-exists(hook-link-heading-hover)) {@include hook-link-heading-hover();}
-}
-
-
-/* Reset
- ========================================================================== */
-
-/*
- * `!important` needed to override inverse component
- */
-
-a.uk-link-reset,
-.uk-link-reset a {
- color: inherit !important;
- text-decoration: none !important;
- @if(mixin-exists(hook-link-reset)) {@include hook-link-reset();}
-}
-
-
-/* Toggle
- ========================================================================== */
-
-.uk-link-toggle {
- color: inherit !important;
- text-decoration: none !important;
-}
-
-.uk-link-toggle:focus { outline: none; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-link-misc)) {@include hook-link-misc();}
-
-// @mixin hook-link-muted(){}
-// @mixin hook-link-muted-hover(){}
-// @mixin hook-link-text(){}
-// @mixin hook-link-text-hover(){}
-// @mixin hook-link-heading(){}
-// @mixin hook-link-heading-hover(){}
-// @mixin hook-link-reset(){}
-// @mixin hook-link-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-link-muted-color: $inverse-global-muted-color !default;
-$inverse-link-muted-hover-color: $inverse-global-color !default;
-$inverse-link-text-hover-color: $inverse-global-muted-color !default;
-$inverse-link-heading-hover-color: $inverse-global-primary-background !default;
-
-
-
-// @mixin hook-inverse-link-muted(){}
-// @mixin hook-inverse-link-muted-hover(){}
-// @mixin hook-inverse-link-text-hover(){}
-// @mixin hook-inverse-link-heading-hover(){}
diff --git a/docs/_sass/uikit/components/list.scss b/docs/_sass/uikit/components/list.scss
deleted file mode 100644
index bc66eb3b50..0000000000
--- a/docs/_sass/uikit/components/list.scss
+++ /dev/null
@@ -1,235 +0,0 @@
-// Name: List
-// Description: Styles for lists
-//
-// Component: `uk-list`
-//
-// Modifiers: `uk-list-disc`
-// `uk-list-circle`
-// `uk-list-square`
-// `uk-list-decimal`
-// `uk-list-hyphen`
-// `uk-list-muted`
-// `uk-list-emphasis`
-// `uk-list-primary`
-// `uk-list-secondary`
-// `uk-list-bullet`
-// `uk-list-divider`
-// `uk-list-striped`
-// `uk-list-large`
-// `uk-list-collapse`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$list-margin-top: $global-small-margin !default;
-
-$list-padding-left: 30px !default;
-
-$list-marker-height: ($global-line-height * 1em) !default;
-
-$list-muted-color: $global-muted-color !default;
-$list-emphasis-color: $global-emphasis-color !default;
-$list-primary-color: $global-primary-background !default;
-$list-secondary-color: $global-secondary-background !default;
-
-$list-bullet-icon-color: $global-color !default;
-
-$list-divider-margin-top: $global-small-margin !default;
-$list-divider-border-width: $global-border-width !default;
-$list-divider-border: $global-border !default;
-
-$list-striped-padding-vertical: $global-small-margin !default;
-$list-striped-padding-horizontal: $global-small-margin !default;
-$list-striped-background: $global-muted-background !default;
-
-$list-large-margin-top: $global-margin !default;
-$list-large-divider-margin-top: $global-margin !default;
-$list-large-striped-padding-vertical: $global-margin !default;
-$list-large-striped-padding-horizontal: $global-small-margin !default;
-
-$internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-
-
-/* ========================================================================
- Component: List
- ========================================================================== */
-
-.uk-list {
- padding: 0;
- list-style: none;
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-list > * > :last-child { margin-bottom: 0; }
-
-/*
- * Style
- */
-
-.uk-list > :nth-child(n+2),
-.uk-list > * > ul { margin-top: $list-margin-top; }
-
-
-/* Marker modifiers
- * Moving `::marker` inside `::before` to style it differently
- * To style the `::marker` is currently only supported in Firefox and Safari
- ========================================================================== */
-
-.uk-list-disc > *,
-.uk-list-circle > *,
-.uk-list-square > *,
-.uk-list-decimal > *,
-.uk-list-hyphen > * { padding-left: $list-padding-left; }
-
-/*
- * Type modifiers
- */
-
-.uk-list-decimal { counter-reset: decimal; }
-.uk-list-decimal > * { counter-increment: decimal; }
-
-[class*='uk-list'] > ::before {
- content: '';
- position: relative;
- left: (-$list-padding-left);
- width: $list-padding-left;
- height: $list-marker-height;
- margin-bottom: (-$list-marker-height);
- display: list-item;
- list-style-position: inside;
- text-align: right;
-}
-
-.uk-list-disc > ::before { list-style-type: disc; }
-.uk-list-circle > ::before { list-style-type: circle; }
-.uk-list-square > ::before { list-style-type: square; }
-.uk-list-decimal > ::before { content: counter(decimal, decimal) '\200A.\00A0'; }
-.uk-list-hyphen > ::before { content: '–\00A0\00A0'; }
-
-/*
- * Color modifiers
- */
-
-.uk-list-muted > ::before { color: $list-muted-color !important; }
-.uk-list-emphasis > ::before { color: $list-emphasis-color !important; }
-.uk-list-primary > ::before { color: $list-primary-color !important; }
-.uk-list-secondary > ::before { color: $list-secondary-color !important; }
-
-
-/* Image bullet modifier
- ========================================================================== */
-
-.uk-list-bullet > * { padding-left: $list-padding-left; }
-
-.uk-list-bullet > ::before {
- content: "";
- position: relative;
- left: (-$list-padding-left);
- width: $list-padding-left;
- height: $list-marker-height;
- margin-bottom: (-$list-marker-height);
- @include svg-fill($internal-list-bullet-image, "#000", $list-bullet-icon-color);
- background-repeat: no-repeat;
- background-position: 50% 50%;
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Divider
- */
-
-.uk-list-divider > :nth-child(n+2) {
- margin-top: $list-divider-margin-top;
- padding-top: $list-divider-margin-top;
- border-top: $list-divider-border-width solid $list-divider-border;
- @if(mixin-exists(hook-list-divider)) {@include hook-list-divider();}
-}
-
-/*
- * Striped
- */
-
-.uk-list-striped > * {
- padding: $list-striped-padding-vertical $list-striped-padding-horizontal;
- @if(mixin-exists(hook-list-striped)) {@include hook-list-striped();}
-}
-
-.uk-list-striped > :nth-of-type(odd) { background: $list-striped-background; }
-
-.uk-list-striped > :nth-child(n+2) { margin-top: 0; }
-
-
-/* Size modifier
- ========================================================================== */
-
-.uk-list-large > :nth-child(n+2),
-.uk-list-large > * > ul { margin-top: $list-large-margin-top; }
-
-.uk-list-collapse > :nth-child(n+2),
-.uk-list-collapse > * > ul { margin-top: 0; }
-
-/*
- * Divider
- */
-
-.uk-list-large.uk-list-divider > :nth-child(n+2) {
- margin-top: $list-large-divider-margin-top;
- padding-top: $list-large-divider-margin-top;
-}
-
-.uk-list-collapse.uk-list-divider > :nth-child(n+2) {
- margin-top: 0;
- padding-top: 0;
-}
-
-/*
- * Striped
- */
-
-.uk-list-large.uk-list-striped > * { padding: $list-large-striped-padding-vertical $list-large-striped-padding-horizontal; }
-
-.uk-list-collapse.uk-list-striped > * {
- padding-top: 0;
- padding-bottom: 0;
-}
-
-.uk-list-large.uk-list-striped > :nth-child(n+2),
-.uk-list-collapse.uk-list-striped > :nth-child(n+2) { margin-top: 0; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-list-misc)) {@include hook-list-misc();}
-
-// @mixin hook-list-divider(){}
-// @mixin hook-list-striped(){}
-// @mixin hook-list-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-list-muted-color: $inverse-global-muted-color !default;
-$inverse-list-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-list-primary-color: $inverse-global-primary-background !default;
-$inverse-list-secondary-color: $inverse-global-primary-background !default;
-
-$inverse-list-divider-border: $inverse-global-border !default;
-$inverse-list-striped-background: $inverse-global-muted-background !default;
-
-$inverse-list-bullet-icon-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-list-divider(){}
-// @mixin hook-inverse-list-striped(){}
diff --git a/docs/_sass/uikit/components/margin.scss b/docs/_sass/uikit/components/margin.scss
deleted file mode 100644
index 87d948dc2a..0000000000
--- a/docs/_sass/uikit/components/margin.scss
+++ /dev/null
@@ -1,250 +0,0 @@
-// Name: Margin
-// Description: Utilities for margins
-//
-// Component: `uk-margin-*`
-// `uk-margin-small-*`
-// `uk-margin-medium-*`
-// `uk-margin-large-*`
-// `uk-margin-xlarge-*`
-// `uk-margin-remove-*`
-// `uk-margin-auto-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$margin-margin: $global-margin !default;
-
-$margin-small-margin: $global-small-margin !default;
-
-$margin-medium-margin: $global-medium-margin !default;
-
-$margin-large-margin: $global-medium-margin !default;
-$margin-large-margin-l: $global-large-margin !default;
-
-$margin-xlarge-margin: $global-large-margin !default;
-$margin-xlarge-margin-l: $global-xlarge-margin !default;
-
-
-/* ========================================================================
- Component: Margin
- ========================================================================== */
-
-/*
- * Default
- */
-
-.uk-margin { margin-bottom: $margin-margin; }
-* + .uk-margin { margin-top: $margin-margin !important; }
-
-.uk-margin-top { margin-top: $margin-margin !important; }
-.uk-margin-bottom { margin-bottom: $margin-margin !important; }
-.uk-margin-left { margin-left: $margin-margin !important; }
-.uk-margin-right { margin-right: $margin-margin !important; }
-
-
-/* Small
- ========================================================================== */
-
-.uk-margin-small { margin-bottom: $margin-small-margin; }
-* + .uk-margin-small { margin-top: $margin-small-margin !important; }
-
-.uk-margin-small-top { margin-top: $margin-small-margin !important; }
-.uk-margin-small-bottom { margin-bottom: $margin-small-margin !important; }
-.uk-margin-small-left { margin-left: $margin-small-margin !important; }
-.uk-margin-small-right { margin-right: $margin-small-margin !important; }
-
-
-/* Medium
- ========================================================================== */
-
-.uk-margin-medium { margin-bottom: $margin-medium-margin; }
-* + .uk-margin-medium { margin-top: $margin-medium-margin !important; }
-
-.uk-margin-medium-top { margin-top: $margin-medium-margin !important; }
-.uk-margin-medium-bottom { margin-bottom: $margin-medium-margin !important; }
-.uk-margin-medium-left { margin-left: $margin-medium-margin !important; }
-.uk-margin-medium-right { margin-right: $margin-medium-margin !important; }
-
-
-/* Large
- ========================================================================== */
-
-.uk-margin-large { margin-bottom: $margin-large-margin; }
-* + .uk-margin-large { margin-top: $margin-large-margin !important; }
-
-.uk-margin-large-top { margin-top: $margin-large-margin !important; }
-.uk-margin-large-bottom { margin-bottom: $margin-large-margin !important; }
-.uk-margin-large-left { margin-left: $margin-large-margin !important; }
-.uk-margin-large-right { margin-right: $margin-large-margin !important; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-margin-large { margin-bottom: $margin-large-margin-l; }
- * + .uk-margin-large { margin-top: $margin-large-margin-l !important; }
-
- .uk-margin-large-top { margin-top: $margin-large-margin-l !important; }
- .uk-margin-large-bottom { margin-bottom: $margin-large-margin-l !important; }
- .uk-margin-large-left { margin-left: $margin-large-margin-l !important; }
- .uk-margin-large-right { margin-right: $margin-large-margin-l !important; }
-
-}
-
-
-/* XLarge
- ========================================================================== */
-
-.uk-margin-xlarge { margin-bottom: $margin-xlarge-margin; }
-* + .uk-margin-xlarge { margin-top: $margin-xlarge-margin !important; }
-
-.uk-margin-xlarge-top { margin-top: $margin-xlarge-margin !important; }
-.uk-margin-xlarge-bottom { margin-bottom: $margin-xlarge-margin !important; }
-.uk-margin-xlarge-left { margin-left: $margin-xlarge-margin !important; }
-.uk-margin-xlarge-right { margin-right: $margin-xlarge-margin !important; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-margin-xlarge { margin-bottom: $margin-xlarge-margin-l; }
- * + .uk-margin-xlarge { margin-top: $margin-xlarge-margin-l !important; }
-
- .uk-margin-xlarge-top { margin-top: $margin-xlarge-margin-l !important; }
- .uk-margin-xlarge-bottom { margin-bottom: $margin-xlarge-margin-l !important; }
- .uk-margin-xlarge-left { margin-left: $margin-xlarge-margin-l !important; }
- .uk-margin-xlarge-right { margin-right: $margin-xlarge-margin-l !important; }
-
-}
-
-
-/* Auto
- ========================================================================== */
-
-.uk-margin-auto {
- margin-left: auto !important;
- margin-right: auto !important;
-}
-
-.uk-margin-auto-top { margin-top: auto !important; }
-.uk-margin-auto-bottom { margin-bottom: auto !important; }
-.uk-margin-auto-left { margin-left: auto !important; }
-.uk-margin-auto-right { margin-right: auto !important; }
-
-.uk-margin-auto-vertical {
- margin-top: auto !important;
- margin-bottom: auto !important;
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-margin-auto\@s {
- margin-left: auto !important;
- margin-right: auto !important;
- }
-
- .uk-margin-auto-left\@s { margin-left: auto !important; }
- .uk-margin-auto-right\@s { margin-right: auto !important; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-margin-auto\@m {
- margin-left: auto !important;
- margin-right: auto !important;
- }
-
- .uk-margin-auto-left\@m { margin-left: auto !important; }
- .uk-margin-auto-right\@m { margin-right: auto !important; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-margin-auto\@l {
- margin-left: auto !important;
- margin-right: auto !important;
- }
-
- .uk-margin-auto-left\@l { margin-left: auto !important; }
- .uk-margin-auto-right\@l { margin-right: auto !important; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-margin-auto\@xl {
- margin-left: auto !important;
- margin-right: auto !important;
- }
-
- .uk-margin-auto-left\@xl { margin-left: auto !important; }
- .uk-margin-auto-right\@xl { margin-right: auto !important; }
-
-}
-
-
-/* Remove
- ========================================================================== */
-
- .uk-margin-remove { margin: 0 !important; }
- .uk-margin-remove-top { margin-top: 0 !important; }
- .uk-margin-remove-bottom { margin-bottom: 0 !important; }
- .uk-margin-remove-left { margin-left: 0 !important; }
- .uk-margin-remove-right { margin-right: 0 !important; }
-
- .uk-margin-remove-vertical {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- }
-
- .uk-margin-remove-adjacent + *,
- .uk-margin-remove-first-child > :first-child { margin-top: 0 !important; }
- .uk-margin-remove-last-child > :last-child { margin-bottom: 0 !important; }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-margin-remove-left\@s { margin-left: 0 !important; }
- .uk-margin-remove-right\@s { margin-right: 0 !important; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-margin-remove-left\@m { margin-left: 0 !important; }
- .uk-margin-remove-right\@m { margin-right: 0 !important; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-margin-remove-left\@l { margin-left: 0 !important; }
- .uk-margin-remove-right\@l { margin-right: 0 !important; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-margin-remove-left\@xl { margin-left: 0 !important; }
- .uk-margin-remove-right\@xl { margin-right: 0 !important; }
-
-}
-
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-margin-misc)) {@include hook-margin-misc();}
-
-// @mixin hook-margin-misc(){}
diff --git a/docs/_sass/uikit/components/marker.scss b/docs/_sass/uikit/components/marker.scss
deleted file mode 100644
index 97e436098c..0000000000
--- a/docs/_sass/uikit/components/marker.scss
+++ /dev/null
@@ -1,63 +0,0 @@
-// Name: Marker
-// Description: Component to create a marker icon
-//
-// Component: `uk-marker`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$marker-padding: 5px !default;
-$marker-background: $global-secondary-background !default;
-$marker-color: $global-inverse-color !default;
-
-$marker-hover-color: $global-inverse-color !default;
-
-
-/* ========================================================================
- Component: Marker
- ========================================================================== */
-
-/*
- * Addopts `uk-icon`
- */
-
-.uk-marker {
- padding: $marker-padding;
- background: $marker-background;
- color: $marker-color;
- @if(mixin-exists(hook-marker)) {@include hook-marker();}
-}
-
-/* Hover + Focus */
-.uk-marker:hover,
-.uk-marker:focus {
- color: $marker-hover-color;
- outline: none;
- @if(mixin-exists(hook-marker-hover)) {@include hook-marker-hover();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-marker-misc)) {@include hook-marker-misc();}
-
-// @mixin hook-marker(){}
-// @mixin hook-marker-hover(){}
-// @mixin hook-marker-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-marker-background: $global-muted-background !default;
-$inverse-marker-color: $global-color !default;
-$inverse-marker-hover-color: $global-color !default;
-
-
-
-// @mixin hook-inverse-marker(){}
-// @mixin hook-inverse-marker-hover(){}
diff --git a/docs/_sass/uikit/components/mixin.scss b/docs/_sass/uikit/components/mixin.scss
deleted file mode 100644
index 5ed438a569..0000000000
--- a/docs/_sass/uikit/components/mixin.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Mixin
-// Description: Defines mixins which are used across all components
-//
-// ========================================================================
-
-
-// SVG
-// ========================================================================
-
-/// Replace `$search` with `$replace` in `$string`
-/// @author Hugo Giraudel
-/// @param {String} $string - Initial string
-/// @param {String} $search - Substring to replace
-/// @param {String} $replace ('') - New value
-/// @return {String} - Updated string
-@function str-replace($string, $search, $replace: '') {
- $index: str-index($string, $search);
-
- @if $index {
- @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
- }
-
- @return $string;
-}
-
-@mixin svg-fill($src, $color-default, $color-new){
-
- $replace-src: str-replace($src, $color-default, $color-new) !default;
- $replace-src: str-replace($replace-src, "#", "%23");
- background-image: url(https://github.com/quote($replace-src));
-}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/modal.scss b/docs/_sass/uikit/components/modal.scss
deleted file mode 100644
index e93c99ca5d..0000000000
--- a/docs/_sass/uikit/components/modal.scss
+++ /dev/null
@@ -1,353 +0,0 @@
-// Name: Modal
-// Description: Component to create modal dialogs
-//
-// Component: `uk-modal`
-//
-// Sub-objects: `uk-modal-page`
-// `uk-modal-dialog`
-// `uk-modal-header`
-// `uk-modal-body`
-// `uk-modal-footer`
-// `uk-modal-title`
-// `uk-modal-close`
-//
-// Adopted: `uk-modal-close-default`
-// `uk-modal-close-outside`
-// `uk-modal-close-full`
-//
-// Modifiers: `uk-modal-container`
-// `uk-modal-full`
-//
-// States: `uk-open`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$modal-z-index: $global-z-index + 10 !default;
-$modal-background: rgba(0,0,0,0.6) !default;
-
-$modal-padding-horizontal: 15px !default;
-$modal-padding-horizontal-s: $global-gutter !default;
-$modal-padding-horizontal-m: $global-medium-gutter !default;
-$modal-padding-vertical: $modal-padding-horizontal !default;
-$modal-padding-vertical-s: 50px !default;
-
-$modal-dialog-width: 600px !default;
-$modal-dialog-background: $global-background !default;
-
-$modal-container-width: 1200px !default;
-
-$modal-body-padding-horizontal: $global-gutter !default;
-$modal-body-padding-vertical: $global-gutter !default;
-
-$modal-header-padding-horizontal: $global-gutter !default;
-$modal-header-padding-vertical: ($modal-header-padding-horizontal / 2) !default;
-$modal-header-background: $global-muted-background !default;
-
-$modal-footer-padding-horizontal: $global-gutter !default;
-$modal-footer-padding-vertical: ($modal-footer-padding-horizontal / 2) !default;
-$modal-footer-background: $global-muted-background !default;
-
-$modal-title-font-size: $global-xlarge-font-size !default;
-$modal-title-line-height: 1.3 !default;
-
-$modal-close-position: $global-small-margin !default;
-$modal-close-padding: 5px !default;
-
-$modal-close-outside-position: 0 !default;
-$modal-close-outside-translate: 100% !default;
-$modal-close-outside-color: lighten($global-inverse-color, 20%) !default;
-$modal-close-outside-hover-color: $global-inverse-color !default;
-
-
-/* ========================================================================
- Component: Modal
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Set position
- * 3. Allow scrolling for the modal dialog
- * 4. Horizontal padding
- * 5. Mask the background page
- * 6. Fade-in transition
- */
-
-.uk-modal {
- /* 1 */
- display: none;
- /* 2 */
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: $modal-z-index;
- /* 3 */
- overflow-y: auto;
- -webkit-overflow-scrolling: touch;
- /* 4 */
- padding: $modal-padding-vertical $modal-padding-horizontal;
- /* 5 */
- background: $modal-background;
- /* 6 */
- opacity: 0;
- transition: opacity 0.15s linear;
- @if(mixin-exists(hook-modal)) {@include hook-modal();}
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-modal { padding: $modal-padding-vertical-s $modal-padding-horizontal-s; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-modal {
- padding-left: $modal-padding-horizontal-m;
- padding-right: $modal-padding-horizontal-m;
- }
-
-}
-
-/*
- * Open
- */
-
-.uk-modal.uk-open { opacity: 1; }
-
-
-/* Page
- ========================================================================== */
-
-/*
- * Prevent scrollbars
- */
-
-.uk-modal-page { overflow: hidden; }
-
-
-/* Dialog
- ========================================================================== */
-
-/*
- * 1. Create position context for spinner and close button
- * 2. Dimensions
- * 3. Fix `max-width: 100%` not working in combination with flex and responsive images in IE11
- * `!important` needed to overwrite `uk-width-auto`. See `#modal-media-image` in tests
- * 4. Style
- * 5. Slide-in transition
- */
-
-.uk-modal-dialog {
- /* 1 */
- position: relative;
- /* 2 */
- box-sizing: border-box;
- margin: 0 auto;
- width: $modal-dialog-width;
- /* 3 */
- max-width: unquote('calc(100% - 0.01px)') !important;
- /* 4 */
- background: $modal-dialog-background;
- /* 5 */
- opacity: 0;
- transform: translateY(-100px);
- transition: 0.3s linear;
- transition-property: opacity, transform;
- @if(mixin-exists(hook-modal-dialog)) {@include hook-modal-dialog();}
-}
-
-/*
- * Open
- */
-
-.uk-open > .uk-modal-dialog {
- opacity: 1;
- transform: translateY(0);
-}
-
-
-/* Size modifier
- ========================================================================== */
-
-/*
- * Container size
- * Take the same size as the Container component
- */
-
-.uk-modal-container .uk-modal-dialog { width: $modal-container-width; }
-
-/*
- * Full size
- * 1. Remove padding and background from modal
- * 2. Reset all default declarations from modal dialog
- */
-
-/* 1 */
-.uk-modal-full {
- padding: 0;
- background: none;
-}
-
-/* 2 */
-.uk-modal-full .uk-modal-dialog {
- margin: 0;
- width: 100%;
- max-width: 100%;
- transform: translateY(0);
- @if(mixin-exists(hook-modal-full)) {@include hook-modal-full();}
-}
-
-
-/* Sections
- ========================================================================== */
-
-.uk-modal-body {
- display: flow-root;
- padding: $modal-body-padding-vertical $modal-body-padding-horizontal;
- @if(mixin-exists(hook-modal-body)) {@include hook-modal-body();}
-}
-
-.uk-modal-header {
- display: flow-root;
- padding: $modal-header-padding-vertical $modal-header-padding-horizontal;
- background: $modal-header-background;
- @if(mixin-exists(hook-modal-header)) {@include hook-modal-header();}
-}
-
-.uk-modal-footer {
- display: flow-root;
- padding: $modal-footer-padding-vertical $modal-footer-padding-horizontal;
- background: $modal-footer-background;
- @if(mixin-exists(hook-modal-footer)) {@include hook-modal-footer();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-modal-body > :last-child,
-.uk-modal-header > :last-child,
-.uk-modal-footer > :last-child { margin-bottom: 0; }
-
-
-/* Title
- ========================================================================== */
-
-.uk-modal-title {
- font-size: $modal-title-font-size;
- line-height: $modal-title-line-height;
- @if(mixin-exists(hook-modal-title)) {@include hook-modal-title();}
-}
-
-
-/* Close
- * Adopts `uk-close`
- ========================================================================== */
-
-[class*='uk-modal-close-'] {
- position: absolute;
- z-index: $modal-z-index;
- top: $modal-close-position;
- right: $modal-close-position;
- padding: $modal-close-padding;
- @if(mixin-exists(hook-modal-close)) {@include hook-modal-close();}
-}
-
-/*
- * Remove margin from adjacent element
- */
-
-[class*='uk-modal-close-']:first-child + * { margin-top: 0; }
-
-/*
- * Hover
- */
-
-[class*='uk-modal-close-']:hover {
- @if(mixin-exists(hook-modal-close-hover)) {@include hook-modal-close-hover();}
-}
-
-/*
- * Default
- */
-
-.uk-modal-close-default {
- @if(mixin-exists(hook-modal-close-default)) {@include hook-modal-close-default();}
-}
-
-.uk-modal-close-default:hover {
- @if(mixin-exists(hook-modal-close-default-hover)) {@include hook-modal-close-default-hover();}
-}
-
-/*
- * Outside
- * 1. Prevent scrollbar on small devices
- */
-
-.uk-modal-close-outside {
- top: $modal-close-outside-position;
- /* 1 */
- right: (-$modal-close-padding);
- transform: translate(0, -($modal-close-outside-translate));
- color: $modal-close-outside-color;
- @if(mixin-exists(hook-modal-close-outside)) {@include hook-modal-close-outside();}
-}
-
-.uk-modal-close-outside:hover {
- color: $modal-close-outside-hover-color;
- @if(mixin-exists(hook-modal-close-outside-hover)) {@include hook-modal-close-outside-hover();}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- /* 1 */
- .uk-modal-close-outside {
- right: $modal-close-outside-position;
- transform: translate($modal-close-outside-translate, -($modal-close-outside-translate));
- }
-
-}
-
-/*
- * Full
- */
-
-.uk-modal-close-full {
- @if(mixin-exists(hook-modal-close-full)) {@include hook-modal-close-full();}
-}
-
-.uk-modal-close-full:hover {
- @if(mixin-exists(hook-modal-close-full-hover)) {@include hook-modal-close-full-hover();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-modal-misc)) {@include hook-modal-misc();}
-
-// @mixin hook-modal(){}
-// @mixin hook-modal-dialog(){}
-// @mixin hook-modal-full(){}
-// @mixin hook-modal-header(){}
-// @mixin hook-modal-body(){}
-// @mixin hook-modal-footer(){}
-// @mixin hook-modal-title(){}
-// @mixin hook-modal-close(){}
-// @mixin hook-modal-close-hover(){}
-// @mixin hook-modal-close-default(){}
-// @mixin hook-modal-close-default-hover(){}
-// @mixin hook-modal-close-outside(){}
-// @mixin hook-modal-close-outside-hover(){}
-// @mixin hook-modal-close-full(){}
-// @mixin hook-modal-close-full-hover(){}
-// @mixin hook-modal-misc(){}
diff --git a/docs/_sass/uikit/components/nav.scss b/docs/_sass/uikit/components/nav.scss
deleted file mode 100644
index 78b0f6015d..0000000000
--- a/docs/_sass/uikit/components/nav.scss
+++ /dev/null
@@ -1,406 +0,0 @@
-// Name: Nav
-// Description: Defines styles for list navigations
-//
-// Component: `uk-nav`
-//
-// Sub-objects: `uk-nav-header`
-// `uk-nav-divider`
-// `uk-nav-sub`
-//
-// Modifiers: `uk-nav-parent-icon`
-// `uk-nav-default`
-// `uk-nav-primary`
-// `uk-nav-center`,
-// `uk-nav-divider`
-//
-// States: `uk-active`
-// `uk-parent`
-// `uk-open`
-// `uk-touch`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$nav-item-padding-vertical: 5px !default;
-$nav-item-padding-horizontal: 0 !default;
-
-$nav-sublist-padding-vertical: 5px !default;
-$nav-sublist-padding-left: 15px !default;
-$nav-sublist-deeper-padding-left: 15px !default;
-$nav-sublist-item-padding-vertical: 2px !default;
-
-$nav-parent-icon-width: ($global-line-height * 1em) !default;
-$nav-parent-icon-height: $nav-parent-icon-width !default;
-$nav-parent-icon-color: $global-color !default;
-
-$nav-header-padding-vertical: $nav-item-padding-vertical !default;
-$nav-header-padding-horizontal: $nav-item-padding-horizontal !default;
-$nav-header-font-size: $global-small-font-size !default;
-$nav-header-text-transform: uppercase !default;
-$nav-header-margin-top: $global-margin !default;
-
-$nav-divider-margin-vertical: 5px !default;
-$nav-divider-margin-horizontal: 0 !default;
-
-$nav-default-item-color: $global-muted-color !default;
-$nav-default-item-hover-color: $global-color !default;
-$nav-default-item-active-color: $global-emphasis-color !default;
-$nav-default-header-color: $global-emphasis-color !default;
-$nav-default-divider-border-width: $global-border-width !default;
-$nav-default-divider-border: $global-border !default;
-$nav-default-sublist-item-color: $global-muted-color !default;
-$nav-default-sublist-item-hover-color: $global-color !default;
-$nav-default-sublist-item-active-color: $global-emphasis-color !default;
-
-$nav-primary-item-font-size: $global-large-font-size !default;
-$nav-primary-item-line-height: $global-line-height !default;
-$nav-primary-item-color: $global-muted-color !default;
-$nav-primary-item-hover-color: $global-color !default;
-$nav-primary-item-active-color: $global-emphasis-color !default;
-$nav-primary-header-color: $global-emphasis-color !default;
-$nav-primary-divider-border-width: $global-border-width !default;
-$nav-primary-divider-border: $global-border !default;
-$nav-primary-sublist-item-color: $global-muted-color !default;
-$nav-primary-sublist-item-hover-color: $global-color !default;
-$nav-primary-sublist-item-active-color: $global-emphasis-color !default;
-
-$nav-dividers-margin-top: 0 !default;
-$nav-dividers-border-width: $global-border-width !default;
-$nav-dividers-border: $global-border !default;
-
-$internal-nav-parent-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-nav-parent-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-
-
-/* ========================================================================
- Component: Nav
- ========================================================================== */
-
-/*
- * Reset
- */
-
-.uk-nav,
-.uk-nav ul {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-/*
-* 1. Center content vertically, e.g. an icon
-* 2. Imitate white space gap when using flexbox
-* 3. Reset link
-* 4. Space is allocated solely based on content dimensions: 0 0 auto
- */
-
-.uk-nav li > a {
- /* 1 */
- display: flex;
- align-items: center;
- /* 2 */
- column-gap: 0.25em;
- /* 3*/
- text-decoration: none;
-}
-
-/* 4 */
-.uk-nav li > a > * { flex: none; }
-
-/*
- * Remove default focus style
- */
-
-.uk-nav li > a:focus { outline: none; }
-
-/*
- * Items
- * Must target `a` elements to exclude other elements (e.g. lists)
- */
-
-.uk-nav > li > a { padding: $nav-item-padding-vertical $nav-item-padding-horizontal; }
-
-
-/* Sublists
- ========================================================================== */
-
-/*
- * Level 2
- * `ul` needed for higher specificity to override padding
- */
-
-ul.uk-nav-sub {
- padding: $nav-sublist-padding-vertical 0 $nav-sublist-padding-vertical $nav-sublist-padding-left;
- @if(mixin-exists(hook-nav-sub)) {@include hook-nav-sub();}
-}
-
-/*
- * Level 3 and deeper
- */
-
-.uk-nav-sub ul { padding-left: $nav-sublist-deeper-padding-left; }
-
-/*
- * Items
- */
-
-.uk-nav-sub a { padding: $nav-sublist-item-padding-vertical 0; }
-
-
-/* Parent icon modifier
- ========================================================================== */
-
-.uk-nav-parent-icon > .uk-parent > a::after {
- content: "";
- width: $nav-parent-icon-width;
- height: $nav-parent-icon-height;
- margin-left: auto;
- @include svg-fill($internal-nav-parent-close-image, "#000", $nav-parent-icon-color);
- background-repeat: no-repeat;
- background-position: 50% 50%;
- @if(mixin-exists(hook-nav-parent-icon)) {@include hook-nav-parent-icon();}
-}
-
-.uk-nav-parent-icon > .uk-parent.uk-open > a::after { @include svg-fill($internal-nav-parent-open-image, "#000", $nav-parent-icon-color); }
-
-
-/* Header
- ========================================================================== */
-
-.uk-nav-header {
- padding: $nav-header-padding-vertical $nav-header-padding-horizontal;
- text-transform: $nav-header-text-transform;
- font-size: $nav-header-font-size;
- @if(mixin-exists(hook-nav-header)) {@include hook-nav-header();}
-}
-
-.uk-nav-header:not(:first-child) { margin-top: $nav-header-margin-top; }
-
-
-/* Divider
- ========================================================================== */
-
-.uk-nav >.uk-nav-divider {
- margin: $nav-divider-margin-vertical $nav-divider-margin-horizontal;
- @if(mixin-exists(hook-nav-divider)) {@include hook-nav-divider();}
-}
-
-
-/* Default modifier
- ========================================================================== */
-
-.uk-nav-default {
- @if(mixin-exists(hook-nav-default)) {@include hook-nav-default();}
-}
-
-/*
- * Items
- */
-
-.uk-nav-default > li > a {
- color: $nav-default-item-color;
- @if(mixin-exists(hook-nav-default-item)) {@include hook-nav-default-item();}
-}
-
-/* Hover + Focus */
-.uk-nav-default > li > a:hover,
-.uk-nav-default > li > a:focus {
- color: $nav-default-item-hover-color;
- @if(mixin-exists(hook-nav-default-item-hover)) {@include hook-nav-default-item-hover();}
-}
-
-/* Active */
-.uk-nav-default > li.uk-active > a {
- color: $nav-default-item-active-color;
- @if(mixin-exists(hook-nav-default-item-active)) {@include hook-nav-default-item-active();}
-}
-
-/*
- * Header
- */
-
-.uk-nav-default .uk-nav-header {
- color: $nav-default-header-color;
- @if(mixin-exists(hook-nav-default-header)) {@include hook-nav-default-header();}
-}
-
-/*
- * Divider
- */
-
-.uk-nav-default .uk-nav-divider {
- border-top: $nav-default-divider-border-width solid $nav-default-divider-border;
- @if(mixin-exists(hook-nav-default-divider)) {@include hook-nav-default-divider();}
-}
-
-/*
- * Sublists
- */
-
-.uk-nav-default .uk-nav-sub a { color: $nav-default-sublist-item-color; }
-
-.uk-nav-default .uk-nav-sub a:hover,
-.uk-nav-default .uk-nav-sub a:focus { color: $nav-default-sublist-item-hover-color; }
-
-.uk-nav-default .uk-nav-sub li.uk-active > a { color: $nav-default-sublist-item-active-color; }
-
-
-/* Primary modifier
- ========================================================================== */
-
-.uk-nav-primary {
- @if(mixin-exists(hook-nav-primary)) {@include hook-nav-primary();}
-}
-
-/*
- * Items
- */
-
-.uk-nav-primary > li > a {
- font-size: $nav-primary-item-font-size;
- line-height: $nav-primary-item-line-height;
- color: $nav-primary-item-color;
- @if(mixin-exists(hook-nav-primary-item)) {@include hook-nav-primary-item();}
-}
-
-/* Hover + Focus */
-.uk-nav-primary > li > a:hover,
-.uk-nav-primary > li > a:focus {
- color: $nav-primary-item-hover-color;
- @if(mixin-exists(hook-nav-primary-item-hover)) {@include hook-nav-primary-item-hover();}
-}
-
-/* Active */
-.uk-nav-primary > li.uk-active > a {
- color: $nav-primary-item-active-color;
- @if(mixin-exists(hook-nav-primary-item-active)) {@include hook-nav-primary-item-active();}
-}
-
-/*
- * Header
- */
-
-.uk-nav-primary .uk-nav-header {
- color: $nav-primary-header-color;
- @if(mixin-exists(hook-nav-primary-header)) {@include hook-nav-primary-header();}
-}
-
-/*
- * Divider
- */
-
-.uk-nav-primary .uk-nav-divider {
- border-top: $nav-primary-divider-border-width solid $nav-primary-divider-border;
- @if(mixin-exists(hook-nav-primary-divider)) {@include hook-nav-primary-divider();}
-}
-
-/*
- * Sublists
- */
-
-.uk-nav-primary .uk-nav-sub a { color: $nav-primary-sublist-item-color; }
-
-.uk-nav-primary .uk-nav-sub a:hover,
-.uk-nav-primary .uk-nav-sub a:focus { color: $nav-primary-sublist-item-hover-color; }
-
-.uk-nav-primary .uk-nav-sub li.uk-active > a { color: $nav-primary-sublist-item-active-color; }
-
-
-/* Alignment modifier
- ========================================================================== */
-
-/*
- * 1. Center header
- * 2. Center items
- */
-
- /* 1 */
-.uk-nav-center { text-align: center; }
- /* 2 */
-.uk-nav-center li > a { justify-content: center; }
-
-/* Sublists */
-.uk-nav-center .uk-nav-sub,
-.uk-nav-center .uk-nav-sub ul { padding-left: 0; }
-
-/* Parent icon modifier */
-.uk-nav-center.uk-nav-parent-icon > .uk-parent > a::after { margin-left: 0; }
-
-
-/* Style modifier
- ========================================================================== */
-
-.uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
- margin-top: $nav-dividers-margin-top;
- padding-top: $nav-dividers-margin-top;
- border-top: $nav-dividers-border-width solid $nav-dividers-border;
- @if(mixin-exists(hook-nav-dividers)) {@include hook-nav-dividers();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-nav-misc)) {@include hook-nav-misc();}
-
-// @mixin hook-nav-sub(){}
-// @mixin hook-nav-parent-icon(){}
-// @mixin hook-nav-header(){}
-// @mixin hook-nav-divider(){}
-// @mixin hook-nav-default(){}
-// @mixin hook-nav-default-item(){}
-// @mixin hook-nav-default-item-hover(){}
-// @mixin hook-nav-default-item-active(){}
-// @mixin hook-nav-default-header(){}
-// @mixin hook-nav-default-divider(){}
-// @mixin hook-nav-primary(){}
-// @mixin hook-nav-primary-item(){}
-// @mixin hook-nav-primary-item-hover(){}
-// @mixin hook-nav-primary-item-active(){}
-// @mixin hook-nav-primary-header(){}
-// @mixin hook-nav-primary-divider(){}
-// @mixin hook-nav-dividers(){}
-// @mixin hook-nav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-nav-parent-icon-color: $inverse-global-color !default;
-$inverse-nav-default-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-divider-border: $inverse-global-border !default;
-$inverse-nav-default-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-sublist-item-active-color: $inverse-global-emphasis-color !default;
-
-$inverse-nav-primary-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-divider-border: $inverse-global-border !default;
-$inverse-nav-primary-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-sublist-item-active-color: $inverse-global-emphasis-color !default;
-
-$inverse-nav-dividers-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-nav-parent-icon(){}
-// @mixin hook-inverse-nav-default-item(){}
-// @mixin hook-inverse-nav-default-item-hover(){}
-// @mixin hook-inverse-nav-default-item-active(){}
-// @mixin hook-inverse-nav-default-header(){}
-// @mixin hook-inverse-nav-default-divider(){}
-// @mixin hook-inverse-nav-primary-item(){}
-// @mixin hook-inverse-nav-primary-item-hover(){}
-// @mixin hook-inverse-nav-primary-item-active(){}
-// @mixin hook-inverse-nav-primary-header(){}
-// @mixin hook-inverse-nav-primary-divider(){}
-// @mixin hook-inverse-nav-dividers(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/navbar.scss b/docs/_sass/uikit/components/navbar.scss
deleted file mode 100644
index 3cfd6a3a62..0000000000
--- a/docs/_sass/uikit/components/navbar.scss
+++ /dev/null
@@ -1,554 +0,0 @@
-// Name: Navbar
-// Description: Component to create horizontal navigation bars
-//
-// Component: `uk-navbar`
-//
-// Sub-objects: `uk-navbar-container`
-// `uk-navbar-left`
-// `uk-navbar-right`
-// `uk-navbar-center`
-// `uk-navbar-center-left`
-// `uk-navbar-center-right`
-// `uk-navbar-nav`
-// `uk-navbar-item`
-// `uk-navbar-toggle`
-// `uk-navbar-subtitle`
-// `uk-navbar-dropbar`
-//
-// Adopted: `uk-navbar-dropdown` + Modifiers
-// `uk-navbar-dropdown-nav`
-// `uk-navbar-dropdown-grid`
-// `uk-navbar-toggle-icon`
-//
-// Modifiers: `uk-navbar-primary`
-// `uk-navbar-transparent`
-// `uk-navbar-sticky`
-// `uk-navbar-dropdown-stack`
-//
-// States: `uk-active`
-// `uk-parent`
-// `uk-open`
-//
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$navbar-background: $global-muted-background !default;
-$navbar-color-mode: none !default;
-
-$navbar-nav-item-height: 80px !default;
-$navbar-nav-item-padding-horizontal: 15px !default;
-$navbar-nav-item-color: $global-muted-color !default;
-$navbar-nav-item-font-size: $global-font-size !default;
-$navbar-nav-item-font-family: $global-font-family !default;
-$navbar-nav-item-hover-color: $global-color !default;
-$navbar-nav-item-onclick-color: $global-emphasis-color !default;
-$navbar-nav-item-active-color: $global-emphasis-color !default;
-
-$navbar-item-color: $global-color !default;
-
-$navbar-toggle-color: $global-muted-color !default;
-$navbar-toggle-hover-color: $global-color !default;
-
-$navbar-subtitle-font-size: $global-small-font-size !default;
-
-$navbar-dropdown-z-index: $global-z-index + 20 !default;
-$navbar-dropdown-width: 200px !default;
-$navbar-dropdown-margin: 0 !default;
-$navbar-dropdown-padding: 15px !default;
-$navbar-dropdown-background: $global-muted-background !default;
-$navbar-dropdown-color: $global-color !default;
-$navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
-$navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
-
-$navbar-dropdown-dropbar-margin-top: 0 !default;
-$navbar-dropdown-dropbar-margin-bottom: $navbar-dropdown-dropbar-margin-top !default;
-
-$navbar-dropdown-nav-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-header-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-divider-border-width: $global-border-width !default;
-$navbar-dropdown-nav-divider-border: $global-border !default;
-$navbar-dropdown-nav-sublist-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-sublist-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-sublist-item-active-color: $global-emphasis-color !default;
-
-$navbar-dropbar-background: $navbar-dropdown-background !default;
-$navbar-dropbar-z-index: $global-z-index - 20 !default;
-
-
-/* ========================================================================
- Component: Navbar
- ========================================================================== */
-
-/*
- * 1. Create position context to center navbar group
- */
-
-.uk-navbar {
- display: flex;
- /* 1 */
- position: relative;
- @if(mixin-exists(hook-navbar)) {@include hook-navbar();}
-}
-
-
-/* Container
- ========================================================================== */
-
-.uk-navbar-container:not(.uk-navbar-transparent) {
- background: $navbar-background;
- @if(mixin-exists(hook-navbar-container)) {@include hook-navbar-container();}
-}
-
-// Color Mode
-@if ( $navbar-color-mode == light ) { .uk-navbar-container:not(.uk-navbar-transparent) { @extend .uk-light !optional;} }
-@if ( $navbar-color-mode == dark ) { .uk-navbar-container:not(.uk-navbar-transparent) { @extend .uk-dark !optional;} }
-
-/*
- * Remove pseudo elements created by micro clearfix as precaution (if Container component is used)
- */
-
-.uk-navbar-container > ::before,
-.uk-navbar-container > ::after { display: none !important; }
-
-
-/* Groups
- ========================================================================== */
-
-/*
- * 1. Align navs and items vertically if they have a different height
- * 2. Note: IE 11 requires an extra `div` which affects the center selector
- */
-
-.uk-navbar-left,
-.uk-navbar-right,
-// 2. [class*='uk-navbar-center'],
-.uk-navbar-center,
-.uk-navbar-center-left > *,
-.uk-navbar-center-right > * {
- display: flex;
- /* 1 */
- align-items: center;
-}
-
-/*
- * Horizontal alignment
- * 1. Create position context for centered navbar with sub groups (left/right)
- * 2. Fix text wrapping if content is larger than 50% of the container.
- * 3. Needed for dropdowns because a new position context is created
- * `z-index` must be smaller than off-canvas
- * 4. Align sub groups for centered navbar
- */
-
-.uk-navbar-right { margin-left: auto; }
-
-.uk-navbar-center:only-child {
- margin-left: auto;
- margin-right: auto;
- /* 1 */
- position: relative;
-}
-
-.uk-navbar-center:not(:only-child) {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%,-50%);
- /* 2 */
- width: max-content;
- box-sizing: border-box;
- /* 3 */
- z-index: $global-z-index - 10;
-}
-
-/* 4 */
-.uk-navbar-center-left,
-.uk-navbar-center-right {
- position: absolute;
- top: 0;
-}
-
-.uk-navbar-center-left { right: 100%; }
-.uk-navbar-center-right { left: 100%; }
-
-[class*='uk-navbar-center-'] {
- width: max-content;
- box-sizing: border-box;
-}
-
-
-/* Nav
- ========================================================================== */
-
-/*
- * 1. Reset list
- */
-
-.uk-navbar-nav {
- display: flex;
- /* 1 */
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-/*
- * Allow items to wrap into the next line
- * Only not `absolute` positioned groups
- */
-
-.uk-navbar-left,
-.uk-navbar-right,
-.uk-navbar-center:only-child { flex-wrap: wrap; }
-
-/*
- * Items
- * 1. Center content vertically and horizontally
- * 2. Imitate white space gap when using flexbox
- * 3. Dimensions
- * 4. Style
- * 5. Required for `a`
- */
-
-.uk-navbar-nav > li > a, // Nav item
-.uk-navbar-item, // Content item
-.uk-navbar-toggle { // Clickable item
- /* 1 */
- display: flex;
- justify-content: center;
- align-items: center;
- /* 2 */
- column-gap: 0.25em;
- /* 3 */
- box-sizing: border-box;
- min-height: $navbar-nav-item-height;
- padding: 0 $navbar-nav-item-padding-horizontal;
- /* 4 */
- font-size: $navbar-nav-item-font-size;
- font-family: $navbar-nav-item-font-family;
- /* 5 */
- text-decoration: none;
-}
-
-/*
- * Nav items
- */
-
-.uk-navbar-nav > li > a {
- color: $navbar-nav-item-color;
- @if(mixin-exists(hook-navbar-nav-item)) {@include hook-navbar-nav-item();}
-}
-
-/*
- * Hover
- * Apply hover style also to focus state and if dropdown is opened
- */
-
-.uk-navbar-nav > li:hover > a,
-.uk-navbar-nav > li > a:focus,
-.uk-navbar-nav > li > a.uk-open {
- color: $navbar-nav-item-hover-color;
- outline: none;
- @if(mixin-exists(hook-navbar-nav-item-hover)) {@include hook-navbar-nav-item-hover();}
-}
-
-/* OnClick */
-.uk-navbar-nav > li > a:active {
- color: $navbar-nav-item-onclick-color;
- @if(mixin-exists(hook-navbar-nav-item-onclick)) {@include hook-navbar-nav-item-onclick();}
-}
-
-/* Active */
-.uk-navbar-nav > li.uk-active > a {
- color: $navbar-nav-item-active-color;
- @if(mixin-exists(hook-navbar-nav-item-active)) {@include hook-navbar-nav-item-active();}
-}
-
-
-/* Item
- ========================================================================== */
-
-.uk-navbar-item {
- color: $navbar-item-color;
- @if(mixin-exists(hook-navbar-item)) {@include hook-navbar-item();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-navbar-item > :last-child { margin-bottom: 0; }
-
-
-/* Toggle
- ========================================================================== */
-
-.uk-navbar-toggle {
- color: $navbar-toggle-color;
- @if(mixin-exists(hook-navbar-toggle)) {@include hook-navbar-toggle();}
-}
-
-.uk-navbar-toggle:hover,
-.uk-navbar-toggle:focus,
-.uk-navbar-toggle.uk-open {
- color: $navbar-toggle-hover-color;
- outline: none;
- text-decoration: none;
- @if(mixin-exists(hook-navbar-toggle-hover)) {@include hook-navbar-toggle-hover();}
-}
-
-/*
- * Icon
- * Adopts `uk-icon`
- */
-
-.uk-navbar-toggle-icon {
- @if(mixin-exists(hook-navbar-toggle-icon)) {@include hook-navbar-toggle-icon();}
-}
-
-/* Hover + Focus */
-:hover > .uk-navbar-toggle-icon,
-:focus > .uk-navbar-toggle-icon {
- @if(mixin-exists(hook-navbar-toggle-icon-hover)) {@include hook-navbar-toggle-icon-hover();}
-}
-
-
-/* Subtitle
- ========================================================================== */
-
-.uk-navbar-subtitle {
- font-size: $navbar-subtitle-font-size;
- @if(mixin-exists(hook-navbar-subtitle)) {@include hook-navbar-subtitle();}
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-.uk-navbar-primary {
- @if(mixin-exists(hook-navbar-primary)) {@include hook-navbar-primary();}
-}
-
-.uk-navbar-transparent {
- @if(mixin-exists(hook-navbar-transparent)) {@include hook-navbar-transparent();}
-}
-
-.uk-navbar-sticky {
- @if(mixin-exists(hook-navbar-sticky)) {@include hook-navbar-sticky();}
-}
-
-
-/* Dropdown
- ========================================================================== */
-
-/*
- * Adopts `uk-dropdown`
- * 1. Hide by default
- * 2. Set position
- * 3. Set a default width
- * 4. Style
- */
-
-.uk-navbar-dropdown {
- /* 1 */
- display: none;
- /* 2 */
- position: absolute;
- z-index: $navbar-dropdown-z-index;
- /* 3 */
- box-sizing: border-box;
- width: $navbar-dropdown-width;
- /* 4 */
- padding: $navbar-dropdown-padding;
- background: $navbar-dropdown-background;
- color: $navbar-dropdown-color;
- @if(mixin-exists(hook-navbar-dropdown)) {@include hook-navbar-dropdown();}
-}
-
-/* Show */
-.uk-navbar-dropdown.uk-open { display: block; }
-
-/*
- * Direction / Alignment modifiers
- */
-
-/* Direction */
-[class*='uk-navbar-dropdown-top'] { margin-top: (-$navbar-dropdown-margin); }
-[class*='uk-navbar-dropdown-bottom'] { margin-top: $navbar-dropdown-margin; }
-[class*='uk-navbar-dropdown-left'] { margin-left: (-$navbar-dropdown-margin); }
-[class*='uk-navbar-dropdown-right'] { margin-left: $navbar-dropdown-margin; }
-
-/*
- * Grid
- * Adopts `uk-grid`
- */
-
-/* Gutter Horizontal */
-.uk-navbar-dropdown-grid { margin-left: (-$navbar-dropdown-grid-gutter-horizontal); }
-.uk-navbar-dropdown-grid > * { padding-left: $navbar-dropdown-grid-gutter-horizontal; }
-
-/* Gutter Vertical */
-.uk-navbar-dropdown-grid > .uk-grid-margin { margin-top: $navbar-dropdown-grid-gutter-vertical; }
-
-/* Stack */
-.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid > * { width: 100% !important; }
-
-/*
- * Width modifier
- */
-
-.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack) { width: ($navbar-dropdown-width * 2); }
-.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack) { width: ($navbar-dropdown-width * 3); }
-.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack) { width: ($navbar-dropdown-width * 4); }
-.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack) { width: ($navbar-dropdown-width * 5); }
-
-/*
- * Dropbar modifier
- */
-
-.uk-navbar-dropdown-dropbar {
- margin-top: $navbar-dropdown-dropbar-margin-top;
- margin-bottom: $navbar-dropdown-dropbar-margin-bottom;
- @if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
-}
-
-
-/* Dropdown Nav
- * Adopts `uk-nav`
- ========================================================================== */
-
-.uk-navbar-dropdown-nav {
- @if(mixin-exists(hook-navbar-dropdown-nav)) {@include hook-navbar-dropdown-nav();}
-}
-
-/*
- * Items
- */
-
-.uk-navbar-dropdown-nav > li > a {
- color: $navbar-dropdown-nav-item-color;
- @if(mixin-exists(hook-navbar-dropdown-nav-item)) {@include hook-navbar-dropdown-nav-item();}
-}
-
-/* Hover + Focus */
-.uk-navbar-dropdown-nav > li > a:hover,
-.uk-navbar-dropdown-nav > li > a:focus {
- color: $navbar-dropdown-nav-item-hover-color;
- @if(mixin-exists(hook-navbar-dropdown-nav-item-hover)) {@include hook-navbar-dropdown-nav-item-hover();}
-}
-
-/* Active */
-.uk-navbar-dropdown-nav > li.uk-active > a {
- color: $navbar-dropdown-nav-item-active-color;
- @if(mixin-exists(hook-navbar-dropdown-nav-item-active)) {@include hook-navbar-dropdown-nav-item-active();}
-}
-
-/*
- * Header
- */
-
-.uk-navbar-dropdown-nav .uk-nav-header {
- color: $navbar-dropdown-nav-header-color;
- @if(mixin-exists(hook-navbar-dropdown-nav-header)) {@include hook-navbar-dropdown-nav-header();}
-}
-
-/*
- * Divider
- */
-
-.uk-navbar-dropdown-nav .uk-nav-divider {
- border-top: $navbar-dropdown-nav-divider-border-width solid $navbar-dropdown-nav-divider-border;
- @if(mixin-exists(hook-navbar-dropdown-nav-divider)) {@include hook-navbar-dropdown-nav-divider();}
-}
-
-/*
- * Sublists
- */
-
-.uk-navbar-dropdown-nav .uk-nav-sub a { color: $navbar-dropdown-nav-sublist-item-color; }
-
-.uk-navbar-dropdown-nav .uk-nav-sub a:hover,
-.uk-navbar-dropdown-nav .uk-nav-sub a:focus { color: $navbar-dropdown-nav-sublist-item-hover-color; }
-
-.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active > a { color: $navbar-dropdown-nav-sublist-item-active-color; }
-
-
-/* Dropbar
- ========================================================================== */
-
-.uk-navbar-dropbar {
- background: $navbar-dropbar-background;
- @if(mixin-exists(hook-navbar-dropbar)) {@include hook-navbar-dropbar();}
-}
-
-/*
- * Slide modifier
- */
-
-.uk-navbar-dropbar-slide {
- position: absolute;
- z-index: $navbar-dropbar-z-index;
- left: 0;
- right: 0;
- @if(mixin-exists(hook-navbar-dropbar-slide)) {@include hook-navbar-dropbar-slide();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-navbar-misc)) {@include hook-navbar-misc();}
-
-// @mixin hook-navbar(){}
-// @mixin hook-navbar-container(){}
-// @mixin hook-navbar-nav-item(){}
-// @mixin hook-navbar-nav-item-hover(){}
-// @mixin hook-navbar-nav-item-onclick(){}
-// @mixin hook-navbar-nav-item-active(){}
-// @mixin hook-navbar-item(){}
-// @mixin hook-navbar-toggle(){}
-// @mixin hook-navbar-toggle-hover(){}
-// @mixin hook-navbar-toggle-icon(){}
-// @mixin hook-navbar-toggle-icon-hover(){}
-// @mixin hook-navbar-subtitle(){}
-// @mixin hook-navbar-primary(){}
-// @mixin hook-navbar-transparent(){}
-// @mixin hook-navbar-sticky(){}
-// @mixin hook-navbar-dropdown(){}
-// @mixin hook-navbar-dropdown-dropbar(){}
-// @mixin hook-navbar-dropdown-nav(){}
-// @mixin hook-navbar-dropdown-nav-item(){}
-// @mixin hook-navbar-dropdown-nav-item-hover(){}
-// @mixin hook-navbar-dropdown-nav-item-active(){}
-// @mixin hook-navbar-dropdown-nav-header(){}
-// @mixin hook-navbar-dropdown-nav-divider(){}
-// @mixin hook-navbar-dropbar(){}
-// @mixin hook-navbar-dropbar-slide(){}
-// @mixin hook-navbar-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-navbar-nav-item-color: $inverse-global-muted-color !default;
-$inverse-navbar-nav-item-hover-color: $inverse-global-color !default;
-$inverse-navbar-nav-item-onclick-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-nav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-item-color: $inverse-global-color !default;
-$inverse-navbar-toggle-color: $inverse-global-muted-color !default;
-$inverse-navbar-toggle-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-navbar-nav-item(){}
-// @mixin hook-inverse-navbar-nav-item-hover(){}
-// @mixin hook-inverse-navbar-nav-item-onclick(){}
-// @mixin hook-inverse-navbar-nav-item-active(){}
-// @mixin hook-inverse-navbar-item(){}
-// @mixin hook-inverse-navbar-toggle(){}
-// @mixin hook-inverse-navbar-toggle-hover(){}
diff --git a/docs/_sass/uikit/components/notification.scss b/docs/_sass/uikit/components/notification.scss
deleted file mode 100644
index 37aff72963..0000000000
--- a/docs/_sass/uikit/components/notification.scss
+++ /dev/null
@@ -1,191 +0,0 @@
-// Name: Notification
-// Description: Component to create notification messages
-//
-// Component: `uk-notification`
-//
-// Sub-objects: `uk-notification-message`
-//
-// Adopted: `uk-notification-close`
-//
-// Modifiers: `uk-notification-top-center`
-// `uk-notification-top-right`
-// `uk-notification-bottom-left`
-// `uk-notification-bottom-center`
-// `uk-notification-bottom-right`
-// `uk-notification-message-primary`
-// `uk-notification-message-success`
-// `uk-notification-message-warning`
-// `uk-notification-message-danger`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$notification-position: 10px !default;
-$notification-z-index: $global-z-index + 40 !default;
-$notification-width: 350px !default;
-
-$notification-message-margin-top: 10px !default;
-$notification-message-padding: $global-small-gutter !default;
-$notification-message-background: $global-muted-background !default;
-$notification-message-color: $global-color !default;
-$notification-message-font-size: $global-medium-font-size !default;
-$notification-message-line-height: 1.4 !default;
-
-$notification-close-top: $notification-message-padding + 5px !default;
-$notification-close-right: $notification-message-padding !default;
-
-$notification-message-primary-color: $global-primary-background !default;
-$notification-message-success-color: $global-success-background !default;
-$notification-message-warning-color: $global-warning-background !default;
-$notification-message-danger-color: $global-danger-background !default;
-
-
-/* ========================================================================
- Component: Notification
- ========================================================================== */
-
-/*
- * 1. Set position
- * 2. Dimensions
- */
-
-.uk-notification {
- /* 1 */
- position: fixed;
- top: $notification-position;
- left: $notification-position;
- z-index: $notification-z-index;
- /* 2 */
- box-sizing: border-box;
- width: $notification-width;
- @if(mixin-exists(hook-notification)) {@include hook-notification();}
-}
-
-
-/* Position modifiers
-========================================================================== */
-
-.uk-notification-top-right,
-.uk-notification-bottom-right {
- left: auto;
- right: $notification-position;
-}
-
-.uk-notification-top-center,
-.uk-notification-bottom-center {
- left: 50%;
- margin-left: ($notification-width / -2);
-}
-
-.uk-notification-bottom-left,
-.uk-notification-bottom-right,
-.uk-notification-bottom-center {
- top: auto;
- bottom: $notification-position;
-}
-
-
-/* Responsiveness
-========================================================================== */
-
-/* Phones portrait and smaller */
-@media (max-width: $breakpoint-xsmall-max) {
-
- .uk-notification {
- left: $notification-position;
- right: $notification-position;
- width: auto;
- margin: 0;
- }
-
-}
-
-
-/* Message
-========================================================================== */
-
-.uk-notification-message {
- position: relative;
- padding: $notification-message-padding;
- background: $notification-message-background;
- color: $notification-message-color;
- font-size: $notification-message-font-size;
- line-height: $notification-message-line-height;
- cursor: pointer;
- @if(mixin-exists(hook-notification-message)) {@include hook-notification-message();}
-}
-
-* + .uk-notification-message { margin-top: $notification-message-margin-top; }
-
-
-/* Close
- * Adopts `uk-close`
- ========================================================================== */
-
-.uk-notification-close {
- display: none;
- position: absolute;
- top: $notification-close-top;
- right: $notification-close-right;
- @if(mixin-exists(hook-notification-close)) {@include hook-notification-close();}
-}
-
-.uk-notification-message:hover .uk-notification-close { display: block; }
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Primary
- */
-
-.uk-notification-message-primary {
- color: $notification-message-primary-color;
- @if(mixin-exists(hook-notification-message-primary)) {@include hook-notification-message-primary();}
-}
-
-/*
- * Success
- */
-
-.uk-notification-message-success {
- color: $notification-message-success-color;
- @if(mixin-exists(hook-notification-message-success)) {@include hook-notification-message-success();}
-}
-
-/*
- * Warning
- */
-
-.uk-notification-message-warning {
- color: $notification-message-warning-color;
- @if(mixin-exists(hook-notification-message-warning)) {@include hook-notification-message-warning();}
-}
-
-/*
- * Danger
- */
-
-.uk-notification-message-danger {
- color: $notification-message-danger-color;
- @if(mixin-exists(hook-notification-message-danger)) {@include hook-notification-message-danger();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-notification-misc)) {@include hook-notification-misc();}
-
-// @mixin hook-notification(){}
-// @mixin hook-notification-message(){}
-// @mixin hook-notification-close(){}
-// @mixin hook-notification-message-primary(){}
-// @mixin hook-notification-message-success(){}
-// @mixin hook-notification-message-warning(){}
-// @mixin hook-notification-message-danger(){}
-// @mixin hook-notification-misc(){}
diff --git a/docs/_sass/uikit/components/offcanvas.scss b/docs/_sass/uikit/components/offcanvas.scss
deleted file mode 100644
index af5e7a67d4..0000000000
--- a/docs/_sass/uikit/components/offcanvas.scss
+++ /dev/null
@@ -1,306 +0,0 @@
-// Name: Off-canvas
-// Description: Component to create an off-canvas sidebar
-//
-// Component: `uk-offcanvas`
-//
-// Sub-objects: `uk-offcanvas-bar`
-// `uk-offcanvas-container`
-// `uk-offcanvas-page`
-//
-// Adopted: `uk-offcanvas-close`
-//
-// Modifiers: `uk-offcanvas-flip`
-// `uk-offcanvas-bar-animation`
-// `uk-offcanvas-reveal`
-// `uk-offcanvas-overlay`
-// `uk-offcanvas-container-animation`
-//
-// States: `uk-open`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$offcanvas-z-index: $global-z-index !default;
-
-$offcanvas-bar-width: 270px !default;
-$offcanvas-bar-padding-vertical: $global-margin !default;
-$offcanvas-bar-padding-horizontal: $global-margin !default;
-$offcanvas-bar-background: $global-secondary-background !default;
-$offcanvas-bar-color-mode: light !default;
-
-$offcanvas-bar-width-m: 350px !default;
-$offcanvas-bar-padding-vertical-m: $global-medium-gutter !default;
-$offcanvas-bar-padding-horizontal-m: $global-medium-gutter !default;
-
-$offcanvas-close-position: 20px !default;
-$offcanvas-close-padding: 5px !default;
-
-$offcanvas-overlay-background: rgba(0,0,0,0.1) !default;
-
-
-/* ========================================================================
- Component: Off-canvas
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Set position
- */
-
-.uk-offcanvas {
- /* 1 */
- display: none;
- /* 2 */
- position: fixed;
- top: 0;
- bottom: 0;
- left: 0;
- z-index: $offcanvas-z-index;
-}
-
-/*
- * Flip modifier
- */
-
-.uk-offcanvas-flip .uk-offcanvas {
- right: 0;
- left: auto;
-}
-
-
-/* Bar
- ========================================================================== */
-
-/*
- * 1. Set position
- * 2. Size and style
- * 3. Allow scrolling
- */
-
-.uk-offcanvas-bar {
- /* 1 */
- position: absolute;
- top: 0;
- bottom: 0;
- left: (-$offcanvas-bar-width);
- /* 2 */
- box-sizing: border-box;
- width: $offcanvas-bar-width;
- padding: $offcanvas-bar-padding-vertical $offcanvas-bar-padding-horizontal;
- background: $offcanvas-bar-background;
- /* 3 */
- overflow-y: auto;
- -webkit-overflow-scrolling: touch;
- @if(mixin-exists(hook-offcanvas-bar)) {@include hook-offcanvas-bar();}
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-offcanvas-bar {
- left: (-$offcanvas-bar-width-m);
- width: $offcanvas-bar-width-m;
- padding: $offcanvas-bar-padding-vertical-m $offcanvas-bar-padding-horizontal-m;
- }
-
-}
-
-// Color Mode
-@if ( $offcanvas-bar-color-mode == light ) { .uk-offcanvas-bar { @extend .uk-light !optional;} }
-@if ( $offcanvas-bar-color-mode == dark ) { .uk-offcanvas-bar { @extend .uk-dark !optional;} }
-
-/* Flip modifier */
-.uk-offcanvas-flip .uk-offcanvas-bar {
- left: auto;
- right: (-$offcanvas-bar-width);
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-offcanvas-flip .uk-offcanvas-bar { right: (-$offcanvas-bar-width-m); }
-
-}
-
-/*
- * Open
- */
-
-.uk-open > .uk-offcanvas-bar { left: 0; }
-.uk-offcanvas-flip .uk-open > .uk-offcanvas-bar {
- left: auto;
- right: 0;
-}
-
-/*
- * Slide Animation (Used in slide and push mode)
- */
-
-.uk-offcanvas-bar-animation { transition: left 0.3s ease-out; }
-.uk-offcanvas-flip .uk-offcanvas-bar-animation { transition-property: right; }
-
-/*
- * Reveal Animation
- * 1. Set position
- * 2. Clip the bar
- * 3. Animation
- * 4. Reset position
- */
-
-.uk-offcanvas-reveal {
- /* 1 */
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- /* 2 */
- width: 0;
- overflow: hidden;
- /* 3 */
- transition: width 0.3s ease-out;
-}
-
-.uk-offcanvas-reveal .uk-offcanvas-bar {
- /* 4 */
- left: 0;
-}
-
-.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar {
- /* 4 */
- left: auto;
- right: 0;
-}
-
-.uk-open > .uk-offcanvas-reveal { width: $offcanvas-bar-width; }
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-open > .uk-offcanvas-reveal { width: $offcanvas-bar-width-m; }
-
-}
-
-/*
- * Flip modifier
- */
-
-.uk-offcanvas-flip .uk-offcanvas-reveal {
- right: 0;
- left: auto;
-}
-
-
-/* Close
- * Adopts `uk-close`
- ========================================================================== */
-
-.uk-offcanvas-close {
- position: absolute;
- z-index: $offcanvas-z-index;
- top: $offcanvas-close-position;
- right: $offcanvas-close-position;
- padding: $offcanvas-close-padding;
- @if(mixin-exists(hook-offcanvas-close)) {@include hook-offcanvas-close();}
-}
-
-
-/* Overlay
- ========================================================================== */
-
-/*
- * Overlay the whole page. Needed for the `::before`
- * 1. Using `100vw` so no modification is needed when off-canvas is flipped
- * 2. Allow for closing with swipe gesture on devices with pointer events.
- */
-
-.uk-offcanvas-overlay {
- /* 1 */
- width: 100vw;
- /* 2 */
- touch-action: none;
-}
-
-/*
- * 1. Mask the whole page
- * 2. Fade-in transition
- */
-
-.uk-offcanvas-overlay::before {
- /* 1 */
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: $offcanvas-overlay-background;
- /* 2 */
- opacity: 0;
- transition: opacity 0.15s linear;
- @if(mixin-exists(hook-offcanvas-overlay)) {@include hook-offcanvas-overlay();}
-}
-
-.uk-offcanvas-overlay.uk-open::before { opacity: 1; }
-
-
-/* Prevent scrolling
- ========================================================================== */
-
-/*
- * Prevent horizontal scrollbar when the content is slide-out
- * Has to be on the `html` element too to make it work on the `body`
- */
-
-.uk-offcanvas-page,
-.uk-offcanvas-container { overflow-x: hidden; }
-
-
-/* Container
- ========================================================================== */
-
-/*
- * Prepare slide-out animation (Used in reveal and push mode)
- * Using `position: left` instead of `transform` because position `fixed` elements like sticky navbars
- * lose their fixed state and behaves like `absolute` within a transformed container
- * 1. Provide a fixed width and prevent shrinking
- */
-
-.uk-offcanvas-container {
- position: relative;
- left: 0;
- transition: left 0.3s ease-out;
- /* 1 */
- box-sizing: border-box;
- width: 100%;
-}
-
-/*
- * Activate slide-out animation
- */
-
-:not(.uk-offcanvas-flip).uk-offcanvas-container-animation { left: $offcanvas-bar-width; }
-
-.uk-offcanvas-flip.uk-offcanvas-container-animation { left: (-$offcanvas-bar-width); }
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- :not(.uk-offcanvas-flip).uk-offcanvas-container-animation { left: $offcanvas-bar-width-m; }
-
- .uk-offcanvas-flip.uk-offcanvas-container-animation { left: (-$offcanvas-bar-width-m); }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-offcanvas-misc)) {@include hook-offcanvas-misc();}
-
-// @mixin hook-offcanvas-bar(){}
-// @mixin hook-offcanvas-close(){}
-// @mixin hook-offcanvas-overlay(){}
-// @mixin hook-offcanvas-misc(){}
diff --git a/docs/_sass/uikit/components/overlay.scss b/docs/_sass/uikit/components/overlay.scss
deleted file mode 100644
index c3eb0a5711..0000000000
--- a/docs/_sass/uikit/components/overlay.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-// Name: Overlay
-// Description: Component to create content areas overlaying an image
-//
-// Component: `uk-overlay`
-//
-// Adopted: `uk-overlay-icon`
-//
-// Modifier: `uk-overlay-default`
-// `uk-overlay-primary`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$overlay-padding-horizontal: $global-gutter !default;
-$overlay-padding-vertical: $global-gutter !default;
-
-$overlay-default-background: rgba($global-background, 0.8) !default;
-
-$overlay-primary-background: rgba($global-secondary-background, 0.8) !default;
-$overlay-primary-color-mode: light !default;
-
-
-/* ========================================================================
- Component: Overlay
- ========================================================================== */
-
-.uk-overlay {
- padding: $overlay-padding-vertical $overlay-padding-horizontal;
- @if(mixin-exists(hook-overlay)) {@include hook-overlay();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-overlay > :last-child { margin-bottom: 0; }
-
-
-/* Icon
- ========================================================================== */
-
-.uk-overlay-icon {
- @if(mixin-exists(hook-overlay-icon)) {@include hook-overlay-icon();}
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Default
- */
-
-.uk-overlay-default {
- background: $overlay-default-background;
- @if(mixin-exists(hook-overlay-default)) {@include hook-overlay-default();}
-}
-
-/*
- * Primary
- */
-
-.uk-overlay-primary {
- background: $overlay-primary-background;
- @if(mixin-exists(hook-overlay-primary)) {@include hook-overlay-primary();}
-}
-
-// Color Mode
-@if ( $overlay-primary-color-mode == light ) { .uk-overlay-primary { @extend .uk-light !optional;} }
-@if ( $overlay-primary-color-mode == dark ) { .uk-overlay-primary { @extend .uk-dark !optional;} }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-overlay-misc)) {@include hook-overlay-misc();}
-
-// @mixin hook-overlay(){}
-// @mixin hook-overlay-icon(){}
-// @mixin hook-overlay-default(){}
-// @mixin hook-overlay-primary(){}
-// @mixin hook-overlay-misc(){}
diff --git a/docs/_sass/uikit/components/padding.scss b/docs/_sass/uikit/components/padding.scss
deleted file mode 100644
index 0c0f1ed10b..0000000000
--- a/docs/_sass/uikit/components/padding.scss
+++ /dev/null
@@ -1,81 +0,0 @@
-// Name: Padding
-// Description: Utilities for padding
-//
-// Component: `uk-padding`
-// `uk-padding-large`
-// `uk-padding-remove-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$padding-padding: $global-gutter !default;
-$padding-padding-l: $global-medium-gutter !default;
-
-$padding-small-padding: $global-small-gutter !default;
-
-$padding-large-padding: $global-gutter !default;
-$padding-large-padding-l: $global-large-gutter !default;
-
-
-/* ========================================================================
- Component: Padding
- ========================================================================== */
-
-.uk-padding { padding: $padding-padding; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-padding { padding: $padding-padding-l; }
-
-}
-
-
-/* Small
- ========================================================================== */
-
-.uk-padding-small { padding: $padding-small-padding; }
-
-
-/* Large
- ========================================================================== */
-
-.uk-padding-large { padding: $padding-large-padding; }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-padding-large { padding: $padding-large-padding-l; }
-
-}
-
-
-/* Remove
- ========================================================================== */
-
-.uk-padding-remove { padding: 0 !important; }
-.uk-padding-remove-top { padding-top: 0 !important; }
-.uk-padding-remove-bottom { padding-bottom: 0 !important; }
-.uk-padding-remove-left { padding-left: 0 !important; }
-.uk-padding-remove-right { padding-right: 0 !important; }
-
-.uk-padding-remove-vertical {
- padding-top: 0 !important;
- padding-bottom: 0 !important;
-}
-
-.uk-padding-remove-horizontal {
- padding-left: 0 !important;
- padding-right: 0 !important;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-padding-misc)) {@include hook-padding-misc();}
-
-// @mixin hook-padding-misc(){}
diff --git a/docs/_sass/uikit/components/pagination.scss b/docs/_sass/uikit/components/pagination.scss
deleted file mode 100644
index 6c501e7bdf..0000000000
--- a/docs/_sass/uikit/components/pagination.scss
+++ /dev/null
@@ -1,131 +0,0 @@
-// Name: Pagination
-// Description: Component to create a page navigation
-//
-// Component: `uk-pagination`
-//
-// Adopted: `uk-pagination-next`
-// `uk-pagination-previous`
-//
-// States: `uk-active`
-// `uk-disabled`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$pagination-margin-horizontal: 0 !default;
-
-$pagination-item-padding-vertical: 5px !default;
-$pagination-item-padding-horizontal: 10px !default;
-$pagination-item-color: $global-muted-color !default;
-$pagination-item-hover-color: $global-color !default;
-$pagination-item-hover-text-decoration: none !default;
-$pagination-item-active-color: $global-color !default;
-$pagination-item-disabled-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Pagination
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Gutter
- * 3. Reset list
- */
-
-.uk-pagination {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin-left: (-$pagination-margin-horizontal);
- /* 3 */
- padding: 0;
- list-style: none;
- @if(mixin-exists(hook-pagination)) {@include hook-pagination();}
-}
-
-/*
- * 1. Space is allocated solely based on content dimensions: 0 0 auto
- * 2. Gutter
- * 3. Create position context for dropdowns
- */
-
-.uk-pagination > * {
- /* 1 */
- flex: none;
- /* 2 */
- padding-left: $pagination-margin-horizontal;
- /* 3 */
- position: relative;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * 1. Prevent gap if child element is `inline-block`, e.g. an icon
- * 2. Style
- */
-
-.uk-pagination > * > * {
- /* 1 */
- display: block;
- /* 2 */
- padding: $pagination-item-padding-vertical $pagination-item-padding-horizontal;
- color: $pagination-item-color;
- @if(mixin-exists(hook-pagination-item)) {@include hook-pagination-item();}
-}
-
-/* Hover + Focus */
-.uk-pagination > * > :hover,
-.uk-pagination > * > :focus {
- color: $pagination-item-hover-color;
- text-decoration: $pagination-item-hover-text-decoration;
- @if(mixin-exists(hook-pagination-item-hover)) {@include hook-pagination-item-hover();}
-}
-
-/* Active */
-.uk-pagination > .uk-active > * {
- color: $pagination-item-active-color;
- @if(mixin-exists(hook-pagination-item-active)) {@include hook-pagination-item-active();}
-}
-
-/* Disabled */
-.uk-pagination > .uk-disabled > * {
- color: $pagination-item-disabled-color;
- @if(mixin-exists(hook-pagination-item-disabled)) {@include hook-pagination-item-disabled();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-pagination-misc)) {@include hook-pagination-misc();}
-
-// @mixin hook-pagination(){}
-// @mixin hook-pagination-item(){}
-// @mixin hook-pagination-item-hover(){}
-// @mixin hook-pagination-item-active(){}
-// @mixin hook-pagination-item-disabled(){}
-// @mixin hook-pagination-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-pagination-item-color: $inverse-global-muted-color !default;
-$inverse-pagination-item-hover-color: $inverse-global-color !default;
-$inverse-pagination-item-active-color: $inverse-global-color !default;
-$inverse-pagination-item-disabled-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-pagination-item(){}
-// @mixin hook-inverse-pagination-item-hover(){}
-// @mixin hook-inverse-pagination-item-active(){}
-// @mixin hook-inverse-pagination-item-disabled(){}
diff --git a/docs/_sass/uikit/components/placeholder.scss b/docs/_sass/uikit/components/placeholder.scss
deleted file mode 100644
index 05c06f7d92..0000000000
--- a/docs/_sass/uikit/components/placeholder.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-// Name: Placeholder
-// Description: Component to create placeholder boxes
-//
-// Component: `uk-placeholder`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$placeholder-margin-vertical: $global-margin !default;
-$placeholder-padding-vertical: $global-gutter !default;
-$placeholder-padding-horizontal: $global-gutter !default;
-$placeholder-background: $global-muted-background !default;
-
-
-/* ========================================================================
- Component: Placeholder
- ========================================================================== */
-
-.uk-placeholder {
- margin-bottom: $placeholder-margin-vertical;
- padding: $placeholder-padding-vertical $placeholder-padding-horizontal;
- background: $placeholder-background;
- @if(mixin-exists(hook-placeholder)) {@include hook-placeholder();}
-}
-
-/* Add margin if adjacent element */
-* + .uk-placeholder { margin-top: $placeholder-margin-vertical; }
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-placeholder > :last-child { margin-bottom: 0; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-placeholder-misc)) {@include hook-placeholder-misc();}
-
-// @mixin hook-placeholder(){}
-// @mixin hook-placeholder-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/position.scss b/docs/_sass/uikit/components/position.scss
deleted file mode 100644
index 419e9270f4..0000000000
--- a/docs/_sass/uikit/components/position.scss
+++ /dev/null
@@ -1,265 +0,0 @@
-// Name: Position
-// Description: Utilities to position content
-//
-// Component: `uk-position-absolute`
-// `uk-position-relative`
-// `uk-position-z-index`
-// `uk-position-top`
-// `uk-position-bottom`
-// `uk-position-left`
-// `uk-position-right`
-// `uk-position-top-left`
-// `uk-position-top-center`
-// `uk-position-top-right`
-// `uk-position-bottom-left`
-// `uk-position-bottom-center`
-// `uk-position-bottom-right`
-// `uk-position-center`
-// `uk-position-center-left`
-// `uk-position-center-right`
-// `uk-position-cover`
-//
-// Modifiers: `uk-position-small`
-// `uk-position-medium`
-// `uk-position-large`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$position-small-margin: $global-small-gutter !default;
-$position-medium-margin: $global-gutter !default;
-$position-large-margin: $global-gutter !default;
-$position-large-margin-l: 50px !default;
-
-
-/* ========================================================================
- Component: Position
- ========================================================================== */
-
-
-/* Directions
- ========================================================================== */
-
-/*
- * 1. Prevent content overflow if `max-width: 100%` is used inside position container.
- */
-
-[class*='uk-position-top'],
-[class*='uk-position-bottom'],
-[class*='uk-position-left'],
-[class*='uk-position-right'],
-[class*='uk-position-center'] {
- position: absolute !important;
- /* 1 */
- max-width: 100%;
-}
-
-
-/* Edges
- ========================================================================== */
-
-/* Don't use `width: 100%` because it is wrong if the parent has padding. */
-.uk-position-top {
- top: 0;
- left: 0;
- right: 0;
-}
-
-.uk-position-bottom {
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-.uk-position-left {
- top: 0;
- bottom: 0;
- left: 0;
-}
-
-.uk-position-right {
- top: 0;
- bottom: 0;
- right: 0;
-}
-
-
-/* Corners
- ========================================================================== */
-
-.uk-position-top-left {
- top: 0;
- left: 0;
-}
-
-.uk-position-top-right {
- top: 0;
- right: 0;
-}
-
-.uk-position-bottom-left {
- bottom: 0;
- left: 0;
-}
-
-.uk-position-bottom-right {
- bottom: 0;
- right: 0;
-}
-
-/*
- * Center
- * 1. Fix text wrapping if content is larger than 50% of the container.
- */
-
-.uk-position-center {
- top: 50%;
- left: 50%;
- transform: translate(-50%,-50%);
- /* 1 */
- width: max-content;
- max-width: 100%;
- box-sizing: border-box;
-}
-
-/* Vertical */
-[class*='uk-position-center-left'],
-[class*='uk-position-center-right'] {
- top: 50%;
- transform: translateY(-50%);
-}
-
-.uk-position-center-left { left: 0; }
-.uk-position-center-right { right: 0; }
-
-.uk-position-center-left-out {
- right: 100%;
- width: max-content;
-}
-
-.uk-position-center-right-out {
- left: 100%;
- width: max-content;
-}
-
-/* Horizontal */
-.uk-position-top-center,
-.uk-position-bottom-center {
- left: 50%;
- transform: translateX(-50%);
- /* 1 */
- width: max-content;
- max-width: 100%;
- box-sizing: border-box;
-}
-
-.uk-position-top-center { top: 0; }
-.uk-position-bottom-center { bottom: 0; }
-
-
-/* Cover
- ========================================================================== */
-
-.uk-position-cover {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-
-/* Utility
- ========================================================================== */
-
-.uk-position-relative { position: relative !important; }
-
-.uk-position-absolute { position: absolute !important; }
-
-.uk-position-fixed { position: fixed !important; }
-
-.uk-position-z-index { z-index: 1; }
-
-
-/* Margin modifier
- ========================================================================== */
-
-/*
- * Small
- */
-
-.uk-position-small {
- max-width: unquote('calc(100% - (#{$position-small-margin} * 2))');
- margin: $position-small-margin;
-}
-
-.uk-position-small.uk-position-center { transform: translate(-50%, -50%) translate(-$position-small-margin, (-$position-small-margin)); }
-
-.uk-position-small[class*='uk-position-center-left'],
-.uk-position-small[class*='uk-position-center-right'] { transform: translateY(-50%) translateY(-$position-small-margin); }
-
-.uk-position-small.uk-position-top-center,
-.uk-position-small.uk-position-bottom-center { transform: translateX(-50%) translateX(-$position-small-margin); }
-
-/*
- * Medium
- */
-
-.uk-position-medium {
- max-width: unquote('calc(100% - (#{$position-medium-margin} * 2))');
- margin: $position-medium-margin;
-}
-
-.uk-position-medium.uk-position-center { transform: translate(-50%, -50%) translate(-$position-medium-margin, (-$position-medium-margin)); }
-
-.uk-position-medium[class*='uk-position-center-left'],
-.uk-position-medium[class*='uk-position-center-right'] { transform: translateY(-50%) translateY(-$position-medium-margin); }
-
-.uk-position-medium.uk-position-top-center,
-.uk-position-medium.uk-position-bottom-center { transform: translateX(-50%) translateX(-$position-medium-margin); }
-
-/*
- * Large
- */
-
-.uk-position-large {
- max-width: unquote('calc(100% - (#{$position-large-margin} * 2))');
- margin: $position-large-margin;
-}
-
-.uk-position-large.uk-position-center { transform: translate(-50%, -50%) translate(-$position-large-margin, (-$position-large-margin)); }
-
-.uk-position-large[class*='uk-position-center-left'],
-.uk-position-large[class*='uk-position-center-right'] { transform: translateY(-50%) translateY(-$position-large-margin); }
-
-.uk-position-large.uk-position-top-center,
-.uk-position-large.uk-position-bottom-center { transform: translateX(-50%) translateX(-$position-large-margin); }
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-position-large {
- max-width: unquote('calc(100% - (#{$position-large-margin-l} * 2))');
- margin: $position-large-margin-l;
- }
-
- .uk-position-large.uk-position-center { transform: translate(-50%, -50%) translate(-$position-large-margin-l, (-$position-large-margin-l)); }
-
- .uk-position-large[class*='uk-position-center-left'],
- .uk-position-large[class*='uk-position-center-right'] { transform: translateY(-50%) translateY(-$position-large-margin-l); }
-
- .uk-position-large.uk-position-top-center,
- .uk-position-large.uk-position-bottom-center { transform: translateX(-50%) translateX(-$position-large-margin-l); }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-position-misc)) {@include hook-position-misc();}
-
-// @mixin hook-position-misc(){}
diff --git a/docs/_sass/uikit/components/print.scss b/docs/_sass/uikit/components/print.scss
deleted file mode 100644
index 6162df525f..0000000000
--- a/docs/_sass/uikit/components/print.scss
+++ /dev/null
@@ -1,61 +0,0 @@
-// Name: Print
-// Description: Optimize page for printing
-//
-// Adapted from http://github.com/h5bp/html5-boilerplate
-//
-// Modifications: Removed link `href` and `title` related rules
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Print
- ========================================================================== */
-
-@media print {
-
- *,
- *::before,
- *::after {
- background: transparent !important;
- color: black !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
-
- a,
- a:visited { text-decoration: underline; }
-
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
-
- thead { display: table-header-group; }
-
- tr,
- img { page-break-inside: avoid; }
-
- img { max-width: 100% !important; }
-
- @page { margin: 0.5cm; }
-
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
-
- h2,
- h3 { page-break-after: avoid; }
-
- @if(mixin-exists(hook-print)) {@include hook-print();}
-
-}
-
-// Hooks
-// ========================================================================
-
-// @mixin hook-print(){}
diff --git a/docs/_sass/uikit/components/progress.scss b/docs/_sass/uikit/components/progress.scss
deleted file mode 100644
index 4575513ed6..0000000000
--- a/docs/_sass/uikit/components/progress.scss
+++ /dev/null
@@ -1,105 +0,0 @@
-// Name: Progress
-// Description: Component to create progress bars
-//
-// Component: `uk-progress`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$progress-height: 15px !default;
-$progress-margin-vertical: $global-margin !default;
-$progress-background: $global-muted-background !default;
-
-$progress-bar-background: $global-primary-background !default;
-
-
-/* ========================================================================
- Component: Progress
- ========================================================================== */
-
-/*
- * 1. Add the correct vertical alignment in Chrome, Firefox, and Opera.
- * 2. Remove default style
- * 3. Behave like a block element
- * 4. Remove borders in Firefox and Edge
- * 5. Set background color for progress container in Firefox, IE11 and Edge
- * 6. Style
- */
-
-.uk-progress {
- /* 1 */
- vertical-align: baseline;
- /* 2 */
- -webkit-appearance: none;
- -moz-appearance: none;
- /* 3 */
- display: block;
- width: 100%;
- /* 4 */
- border: 0;
- /* 5 */
- background-color: $progress-background;
- /* 6 */
- margin-bottom: $progress-margin-vertical;
- height: $progress-height;
- @if(mixin-exists(hook-progress)) {@include hook-progress();}
-}
-
-/* Add margin if adjacent element */
-* + .uk-progress { margin-top: $progress-margin-vertical; }
-
-/*
- * Remove animated circles for indeterminate state in IE11 and Edge
- */
-
-.uk-progress:indeterminate { color: transparent; }
-
-/*
- * Progress container
- * 2. Remove progress bar for indeterminate state in Firefox
- */
-
-.uk-progress::-webkit-progress-bar {
- background-color: $progress-background;
- @if(mixin-exists(hook-progress)) {@include hook-progress();}
-}
-
-/* 2 */
-.uk-progress:indeterminate::-moz-progress-bar { width: 0; }
-
-/*
- * Progress bar
- * 1. Remove right border in IE11 and Edge
- */
-
-.uk-progress::-webkit-progress-value {
- background-color: $progress-bar-background;
- transition: width 0.6s ease;
- @if(mixin-exists(hook-progress-bar)) {@include hook-progress-bar();}
-}
-
-.uk-progress::-moz-progress-bar {
- background-color: $progress-bar-background;
- @if(mixin-exists(hook-progress-bar)) {@include hook-progress-bar();}
-}
-
-.uk-progress::-ms-fill {
- background-color: $progress-bar-background;
- transition: width 0.6s ease;
- /* 1 */
- border: 0;
- @if(mixin-exists(hook-progress-bar)) {@include hook-progress-bar();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-progress-misc)) {@include hook-progress-misc();}
-
-// @mixin hook-progress(){}
-// @mixin hook-progress-bar(){}
-// @mixin hook-progress-misc(){}
diff --git a/docs/_sass/uikit/components/search.scss b/docs/_sass/uikit/components/search.scss
deleted file mode 100644
index 9f5e0e090c..0000000000
--- a/docs/_sass/uikit/components/search.scss
+++ /dev/null
@@ -1,328 +0,0 @@
-// Name: Search
-// Description: Component to create the search
-//
-// Component: `uk-search`
-//
-// Sub-objects: `uk-search-input`
-// `uk-search-toggle`
-//
-// Adopted: `uk-search-icon`
-//
-// Modifier: `uk-search-default`
-// `uk-search-navbar`
-// `uk-search-large`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$search-color: $global-color !default;
-$search-placeholder-color: $global-muted-color !default;
-
-$search-icon-color: $global-muted-color !default;
-
-$search-default-width: 240px !default;
-$search-default-height: $global-control-height !default;
-$search-default-padding-horizontal: 10px !default;
-$search-default-background: $global-muted-background !default;
-$search-default-focus-background: darken($search-default-background, 5%) !default;
-
-$search-default-icon-width: $global-control-height !default;
-
-$search-navbar-width: 400px !default;
-$search-navbar-height: 40px !default;
-$search-navbar-background: transparent !default;
-$search-navbar-font-size: $global-large-font-size !default;
-
-$search-navbar-icon-width: 40px !default;
-
-$search-large-width: 500px !default;
-$search-large-height: 80px !default;
-$search-large-background: transparent !default;
-$search-large-font-size: $global-2xlarge-font-size !default;
-
-$search-large-icon-width: 80px !default;
-
-$search-toggle-color: $global-muted-color !default;
-$search-toggle-hover-color: $global-color !default;
-
-
-/* ========================================================================
- Component: Search
- ========================================================================== */
-
-/*
- * 1. Container fits its content
- * 2. Create position context
- * 3. Prevent content overflow
- * 4. Reset `form`
- */
-
-.uk-search {
- /* 1 */
- display: inline-block;
- /* 2 */
- position: relative;
- /* 3 */
- max-width: 100%;
- /* 4 */
- margin: 0;
-}
-
-
-/* Input
- ========================================================================== */
-
-/*
- * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X.
- */
-
-.uk-search-input::-webkit-search-cancel-button,
-.uk-search-input::-webkit-search-decoration { -webkit-appearance: none; }
-
-/*
- * Removes placeholder transparency in Firefox.
- */
-
-.uk-search-input::-moz-placeholder { opacity: 1; }
-
-/*
- * 1. Define consistent box sizing.
- * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera.
- * 3. Remove `border-radius` in iOS.
- * 4. Change font properties to `inherit` in all browsers
- * 5. Show the overflow in Edge.
- * 6. Remove default style in iOS.
- * 7. Vertical alignment
- * 8. Take the full container width
- * 9. Style
- */
-
-.uk-search-input {
- /* 1 */
- box-sizing: border-box;
- /* 2 */
- margin: 0;
- /* 3 */
- border-radius: 0;
- /* 4 */
- font: inherit;
- /* 5 */
- overflow: visible;
- /* 6 */
- -webkit-appearance: none;
- /* 7 */
- vertical-align: middle;
- /* 8 */
- width: 100%;
- /* 9 */
- border: none;
- color: $search-color;
- @if(mixin-exists(hook-search-input)) {@include hook-search-input();}
-}
-
-.uk-search-input:focus { outline: none; }
-
-/* Placeholder */
-.uk-search-input:-ms-input-placeholder { color: $search-placeholder-color !important; }
-.uk-search-input::placeholder { color: $search-placeholder-color; }
-
-
-/* Icon (Adopts `uk-icon`)
- ========================================================================== */
-
-/*
- * Remove default focus style
- */
-
-.uk-search-icon:focus { outline: none; }
-
-/*
- * Position above input
- * 1. Set position
- * 2. Center icon vertically and horizontally
- * 3. Style
- */
-
-.uk-search .uk-search-icon {
- /* 1 */
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- /* 2 */
- display: inline-flex;
- justify-content: center;
- align-items: center;
- /* 3 */
- color: $search-icon-color;
-}
-
-/*
- * Required for `a`.
- */
-
-.uk-search .uk-search-icon:hover { color: $search-icon-color; }
-
-/*
- * Make `input` element clickable through icon, e.g. if it's a `span`
- */
-
-.uk-search .uk-search-icon:not(a):not(button):not(input) { pointer-events: none; }
-
-/*
- * Position modifier
- */
-
-.uk-search .uk-search-icon-flip {
- right: 0;
- left: auto;
-}
-
-
-/* Default modifier
- ========================================================================== */
-
-.uk-search-default { width: $search-default-width; }
-
-/*
- * Input
- */
-
-.uk-search-default .uk-search-input {
- height: $search-default-height;
- padding-left: $search-default-padding-horizontal;
- padding-right: $search-default-padding-horizontal;
- background: $search-default-background;
- @if(mixin-exists(hook-search-default-input)) {@include hook-search-default-input();}
-}
-
-/* Focus */
-.uk-search-default .uk-search-input:focus {
- background-color: $search-default-focus-background;
- @if(mixin-exists(hook-search-default-input-focus)) {@include hook-search-default-input-focus();}
-}
-
-/*
- * Icon
- */
-
-.uk-search-default .uk-search-icon { width: $search-default-icon-width; }
-
-.uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: ($search-default-icon-width); }
-.uk-search-default .uk-search-icon-flip ~ .uk-search-input { padding-right: ($search-default-icon-width); }
-
-
-/* Navbar modifier
- ========================================================================== */
-
-.uk-search-navbar { width: $search-navbar-width; }
-
-/*
- * Input
- */
-
-.uk-search-navbar .uk-search-input {
- height: $search-navbar-height;
- background: $search-navbar-background;
- font-size: $search-navbar-font-size;
- @if(mixin-exists(hook-search-navbar-input)) {@include hook-search-navbar-input();}
-}
-
-/*
- * Icon
- */
-
-.uk-search-navbar .uk-search-icon { width: $search-navbar-icon-width; }
-
-.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: ($search-navbar-icon-width); }
-.uk-search-navbar .uk-search-icon-flip ~ .uk-search-input { padding-right: ($search-navbar-icon-width); }
-
-
-/* Large modifier
- ========================================================================== */
-
-.uk-search-large { width: $search-large-width; }
-
-/*
- * Input
- */
-
-.uk-search-large .uk-search-input {
- height: $search-large-height;
- background: $search-large-background;
- font-size: $search-large-font-size;
- @if(mixin-exists(hook-search-large-input)) {@include hook-search-large-input();}
-}
-
-/*
- * Icon
- */
-
-.uk-search-large .uk-search-icon { width: $search-large-icon-width; }
-
-.uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: ($search-large-icon-width); }
-.uk-search-large .uk-search-icon-flip ~ .uk-search-input { padding-right: ($search-large-icon-width); }
-
-
-/* Toggle
- ========================================================================== */
-
-.uk-search-toggle {
- color: $search-toggle-color;
- @if(mixin-exists(hook-search-toggle)) {@include hook-search-toggle();}
-}
-
-/* Hover + Focus */
-.uk-search-toggle:hover,
-.uk-search-toggle:focus {
- color: $search-toggle-hover-color;
- @if(mixin-exists(hook-search-toggle-hover)) {@include hook-search-toggle-hover();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-search-misc)) {@include hook-search-misc();}
-
-// @mixin hook-search-input(){}
-// @mixin hook-search-default-input(){}
-// @mixin hook-search-default-input-focus(){}
-// @mixin hook-search-navbar-input(){}
-// @mixin hook-search-large-input(){}
-
-// @mixin hook-search-toggle(){}
-// @mixin hook-search-toggle-hover(){}
-
-// @mixin hook-search-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-search-color: $inverse-global-color !default;
-$inverse-search-placeholder-color: $inverse-global-muted-color !default;
-
-$inverse-search-icon-color: $inverse-global-muted-color !default;
-
-$inverse-search-default-background: $inverse-global-muted-background !default;
-$inverse-search-default-focus-background: fadein($inverse-search-default-background, 5%) !default;
-
-$inverse-search-navbar-background: transparent !default;
-
-$inverse-search-large-background: transparent !default;
-
-$inverse-search-toggle-color: $inverse-global-muted-color !default;
-$inverse-search-toggle-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-search-default-input(){}
-// @mixin hook-inverse-search-default-input-focus(){}
-// @mixin hook-inverse-search-navbar-input(){}
-// @mixin hook-inverse-search-large-input(){}
-// @mixin hook-inverse-search-toggle(){}
-// @mixin hook-inverse-search-toggle-hover(){}
diff --git a/docs/_sass/uikit/components/section.scss b/docs/_sass/uikit/components/section.scss
deleted file mode 100644
index a3eacb1d06..0000000000
--- a/docs/_sass/uikit/components/section.scss
+++ /dev/null
@@ -1,212 +0,0 @@
-// Name: Section
-// Description: Component to create horizontal layout section
-//
-// Component: `uk-section`
-//
-// Modifiers: `uk-section-xsmall`
-// `uk-section-small`
-// `uk-section-large`
-// `uk-section-xlarge`
-// `uk-section-default`
-// `uk-section-muted`
-// `uk-section-primary`
-// `uk-section-secondary`
-// `uk-section-overlap`
-//
-// States: `uk-preserve-color`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$section-padding-vertical: $global-medium-margin !default;
-$section-padding-vertical-m: $global-large-margin !default;
-
-$section-xsmall-padding-vertical: $global-margin !default;
-
-$section-small-padding-vertical: $global-medium-margin !default;
-
-$section-large-padding-vertical: $global-large-margin !default;
-$section-large-padding-vertical-m: $global-xlarge-margin !default;
-
-$section-xlarge-padding-vertical: $global-xlarge-margin !default;
-$section-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-
-$section-default-background: $global-background !default;
-
-$section-muted-background: $global-muted-background !default;
-
-$section-primary-background: $global-primary-background !default;
-$section-primary-color-mode: light !default;
-
-$section-secondary-background: $global-secondary-background !default;
-$section-secondary-color-mode: light !default;
-
-
-/* ========================================================================
- Component: Section
- ========================================================================== */
-
-/*
- * 1. Make it work with `100vh` and height in general
- */
-
-.uk-section {
- display: flow-root;
- box-sizing: border-box; /* 1 */
- padding-top: $section-padding-vertical;
- padding-bottom: $section-padding-vertical;
- @if(mixin-exists(hook-section)) {@include hook-section();}
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-section {
- padding-top: $section-padding-vertical-m;
- padding-bottom: $section-padding-vertical-m;
- }
-
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-section > :last-child { margin-bottom: 0; }
-
-
-/* Size modifiers
- ========================================================================== */
-
-/*
- * XSmall
- */
-
-.uk-section-xsmall {
- padding-top: $section-xsmall-padding-vertical;
- padding-bottom: $section-xsmall-padding-vertical;
-}
-
-/*
- * Small
- */
-
-.uk-section-small {
- padding-top: $section-small-padding-vertical;
- padding-bottom: $section-small-padding-vertical;
-}
-
-/*
- * Large
- */
-
-.uk-section-large {
- padding-top: $section-large-padding-vertical;
- padding-bottom: $section-large-padding-vertical;
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-section-large {
- padding-top: $section-large-padding-vertical-m;
- padding-bottom: $section-large-padding-vertical-m;
- }
-
-}
-
-
-/*
- * XLarge
- */
-
-.uk-section-xlarge {
- padding-top: $section-xlarge-padding-vertical;
- padding-bottom: $section-xlarge-padding-vertical;
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-section-xlarge {
- padding-top: $section-xlarge-padding-vertical-m;
- padding-bottom: $section-xlarge-padding-vertical-m;
- }
-
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Default
- */
-
-.uk-section-default {
- background: $section-default-background;
- @if(mixin-exists(hook-section-default)) {@include hook-section-default();}
-}
-
-/*
- * Muted
- */
-
-.uk-section-muted {
- background: $section-muted-background;
- @if(mixin-exists(hook-section-muted)) {@include hook-section-muted();}
-}
-
-/*
- * Primary
- */
-
-.uk-section-primary {
- background: $section-primary-background;
- @if(mixin-exists(hook-section-primary)) {@include hook-section-primary();}
-}
-
-@if ( $section-primary-color-mode == light ) { .uk-section-primary:not(.uk-preserve-color) { @extend .uk-light !optional;} }
-@if ( $section-primary-color-mode == dark ) { .uk-section-primary:not(.uk-preserve-color) { @extend .uk-dark !optional;} }
-
-/*
- * Secondary
- */
-
-.uk-section-secondary {
- background: $section-secondary-background;
- @if(mixin-exists(hook-section-secondary)) {@include hook-section-secondary();}
-}
-
-@if ( $section-secondary-color-mode == light ) { .uk-section-secondary:not(.uk-preserve-color) { @extend .uk-light !optional;} }
-@if ( $section-secondary-color-mode == dark ) { .uk-section-secondary:not(.uk-preserve-color) { @extend .uk-dark !optional;} }
-
-
-/* Overlap modifier
- ========================================================================== */
-
-/*
- * Reserved modifier to make a section overlap another section with an border image
- * Implemented by the theme
- */
-
-.uk-section-overlap {
- @if(mixin-exists(hook-section-overlap)) {@include hook-section-overlap();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-section-misc)) {@include hook-section-misc();}
-
-// @mixin hook-section(){}
-// @mixin hook-section-default(){}
-// @mixin hook-section-muted(){}
-// @mixin hook-section-secondary(){}
-// @mixin hook-section-primary(){}
-// @mixin hook-section-overlap(){}
-// @mixin hook-section-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/slidenav.scss b/docs/_sass/uikit/components/slidenav.scss
deleted file mode 100644
index 0b9af8f256..0000000000
--- a/docs/_sass/uikit/components/slidenav.scss
+++ /dev/null
@@ -1,122 +0,0 @@
-// Name: Slidenav
-// Description: Component to create previous/next icon navigations
-//
-// Component: `uk-slidenav`
-//
-// Sub-objects: `uk-slidenav-container`
-//
-// Modifiers: `uk-slidenav-previous`
-// `uk-slidenav-next`
-// `uk-slidenav-large`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$slidenav-padding-vertical: 5px !default;
-$slidenav-padding-horizontal: 10px !default;
-
-$slidenav-color: rgba($global-color, 0.5) !default;
-$slidenav-hover-color: rgba($global-color, 0.9) !default;
-$slidenav-active-color: rgba($global-color, 0.5) !default;
-
-$slidenav-large-padding-vertical: 10px !default;
-$slidenav-large-padding-horizontal: $slidenav-large-padding-vertical !default;
-
-
-/* ========================================================================
- Component: Slidenav
- ========================================================================== */
-
-/*
- * Adopts `uk-icon`
- */
-
-.uk-slidenav {
- padding: $slidenav-padding-vertical $slidenav-padding-horizontal;
- color: $slidenav-color;
- @if(mixin-exists(hook-slidenav)) {@include hook-slidenav();}
-}
-
-/* Hover + Focus */
-.uk-slidenav:hover,
-.uk-slidenav:focus {
- color: $slidenav-hover-color;
- outline: none;
- @if(mixin-exists(hook-slidenav-hover)) {@include hook-slidenav-hover();}
-}
-
-/* OnClick */
-.uk-slidenav:active {
- color: $slidenav-active-color;
- @if(mixin-exists(hook-slidenav-active)) {@include hook-slidenav-active();}
-}
-
-
-/* Icon modifier
- ========================================================================== */
-
-/*
- * Previous
- */
-
-.uk-slidenav-previous {
- @if(mixin-exists(hook-slidenav-previous)) {@include hook-slidenav-previous();}
-}
-
-/*
- * Next
- */
-
-.uk-slidenav-next {
- @if(mixin-exists(hook-slidenav-next)) {@include hook-slidenav-next();}
-}
-
-
-/* Size modifier
- ========================================================================== */
-
-.uk-slidenav-large {
- padding: $slidenav-large-padding-vertical $slidenav-large-padding-horizontal;
- @if(mixin-exists(hook-slidenav-large)) {@include hook-slidenav-large();}
-}
-
-
-/* Container
- ========================================================================== */
-
-.uk-slidenav-container {
- display: flex;
- @if(mixin-exists(hook-slidenav-container)) {@include hook-slidenav-container();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-slidenav-misc)) {@include hook-slidenav-misc();}
-
-// @mixin hook-slidenav(){}
-// @mixin hook-slidenav-hover(){}
-// @mixin hook-slidenav-active(){}
-// @mixin hook-slidenav-previous(){}
-// @mixin hook-slidenav-next(){}
-// @mixin hook-slidenav-large(){}
-// @mixin hook-slidenav-container(){}
-// @mixin hook-slidenav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-slidenav-color: rgba($inverse-global-color, 0.7) !default;
-$inverse-slidenav-hover-color: rgba($inverse-global-color, 0.95) !default;
-$inverse-slidenav-active-color: rgba($inverse-global-color, 0.7) !default;
-
-
-
-// @mixin hook-inverse-slidenav(){}
-// @mixin hook-inverse-slidenav-hover(){}
-// @mixin hook-inverse-slidenav-active(){}
diff --git a/docs/_sass/uikit/components/slider.scss b/docs/_sass/uikit/components/slider.scss
deleted file mode 100644
index d73ec1f8da..0000000000
--- a/docs/_sass/uikit/components/slider.scss
+++ /dev/null
@@ -1,120 +0,0 @@
-// Name: Slider
-// Description: Component to create horizontal sliders
-//
-// Component: `uk-slider`
-//
-// Sub-objects: `uk-slider-container`
-// `uk-slider-items`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$slider-container-margin-top: -11px !default;
-$slider-container-margin-bottom: -39px !default;
-$slider-container-margin-left: -25px !default;
-$slider-container-margin-right: -25px !default;
-
-
-/* ========================================================================
- Component: Slider
- ========================================================================== */
-
-/*
- * 1. Prevent tab highlighting on iOS.
- */
-
-.uk-slider {
- /* 1 */
- -webkit-tap-highlight-color: transparent;
- @if(mixin-exists(hook-slider)) {@include hook-slider();}
-}
-
-
-/* Container
- ========================================================================== */
-
-/*
- * Clip child elements
- */
-
-.uk-slider-container { overflow: hidden; }
-
-/*
- * Widen container to prevent box-shadows from clipping, `large-box-shadow`
- */
-
-.uk-slider-container-offset {
- margin: $slider-container-margin-top $slider-container-margin-right $slider-container-margin-bottom $slider-container-margin-left;
- padding: ($slider-container-margin-top * -1) ($slider-container-margin-right * -1) ($slider-container-margin-bottom * -1) ($slider-container-margin-left * -1);
-}
-
-/* Items
- ========================================================================== */
-
-/*
- * 1. Optimize animation
- * 2. Create a containing block. In Safari it's neither created by `transform` nor `will-change`.
- */
-
-.uk-slider-items {
- /* 1 */
- will-change: transform;
- /* 2 */
- position: relative;
-}
-
-/*
- * 1. Reset list style without interfering with grid
- * 2. Prevent displaying the callout information on iOS.
- */
-
-.uk-slider-items:not(.uk-grid) {
- display: flex;
- /* 1 */
- margin: 0;
- padding: 0;
- list-style: none;
- /* 2 */
- -webkit-touch-callout: none;
-}
-
-.uk-slider-items.uk-grid { flex-wrap: nowrap; }
-
-
-/* Item
- ========================================================================== */
-
-/*
- * 1. Let items take content dimensions (0 0 auto)
- * `max-width` needed to keep image responsiveness and prevent content overflow
- * 3. Create position context
- * 4. Disable horizontal panning gestures in IE11 and Edge
- * 5. Suppress outline on focus
- */
-
-.uk-slider-items > * {
- /* 1 */
- flex: none;
- max-width: 100%;
- /* 3 */
- position: relative;
- /* 4 */
- touch-action: pan-y;
-}
-
-/* 5 */
-.uk-slider-items > :focus { outline: none; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-slider-misc)) {@include hook-slider-misc();}
-
-// @mixin hook-slider(){}
-// @mixin hook-slider-misc(){}
diff --git a/docs/_sass/uikit/components/slideshow.scss b/docs/_sass/uikit/components/slideshow.scss
deleted file mode 100644
index 8a8117eb98..0000000000
--- a/docs/_sass/uikit/components/slideshow.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-// Name: Slideshow
-// Description: Component to create slideshows
-//
-// Component: `uk-slideshow`
-//
-// Sub-objects: `uk-slideshow-items`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Slideshow
- ========================================================================== */
-
-/*
- * 1. Prevent tab highlighting on iOS.
- */
-
-.uk-slideshow {
- /* 1 */
- -webkit-tap-highlight-color: transparent;
- @if(mixin-exists(hook-slideshow)) {@include hook-slideshow();}
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * 1. Create position and stacking context
- * 2. Reset list
- * 3. Clip child elements
- * 4. Prevent displaying the callout information on iOS.
- */
-
-.uk-slideshow-items {
- /* 1 */
- position: relative;
- z-index: 0;
- /* 2 */
- margin: 0;
- padding: 0;
- list-style: none;
- /* 3 */
- overflow: hidden;
- /* 4 */
- -webkit-touch-callout: none;
-}
-
-
-/* Item
- ========================================================================== */
-
-/*
- * 1. Position items above each other
- * 2. Take the full width
- * 3. Clip child elements, e.g. for `uk-cover`
- * 4. Optimize animation
- * 5. Disable horizontal panning gestures in IE11 and Edge
- * 6. Suppress outline on focus
- */
-
-.uk-slideshow-items > * {
- /* 1 */
- position: absolute;
- top: 0;
- left: 0;
- /* 2 */
- right: 0;
- bottom: 0;
- /* 3 */
- overflow: hidden;
- /* 4 */
- will-change: transform, opacity;
- /* 5 */
- touch-action: pan-y;
-}
-
-/* 6 */
-.uk-slideshow-items > :focus { outline: none; }
-
-/*
- * Hide not active items
- */
-
-.uk-slideshow-items > :not(.uk-active) { display: none; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-slideshow-misc)) {@include hook-slideshow-misc();}
-
-// @mixin hook-slideshow(){}
-// @mixin hook-slideshow-misc(){}
diff --git a/docs/_sass/uikit/components/sortable.scss b/docs/_sass/uikit/components/sortable.scss
deleted file mode 100644
index 5bc66aeb02..0000000000
--- a/docs/_sass/uikit/components/sortable.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-// Name: Sortable
-// Description: Component to create sortable grids and lists
-//
-// Component: `uk-sortable`
-//
-// Sub-objects: `uk-sortable-drag`
-// `uk-sortable-placeholder`
-// `uk-sortable-handle`
-//
-// Modifiers: `uk-sortable-empty`
-//
-// States: `uk-drag`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$sortable-dragged-z-index: $global-z-index + 50 !default;
-
-$sortable-placeholder-opacity: 0 !default;
-
-$sortable-empty-height: 50px !default;
-
-
-/* ========================================================================
- Component: Sortable
- ========================================================================== */
-
-.uk-sortable {
- position: relative;
- @if(mixin-exists(hook-sortable)) {@include hook-sortable();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-sortable > :last-child { margin-bottom: 0; }
-
-
-/* Drag
- ========================================================================== */
-
-.uk-sortable-drag {
- position: fixed !important;
- z-index: $sortable-dragged-z-index !important;
- pointer-events: none;
- @if(mixin-exists(hook-sortable-drag)) {@include hook-sortable-drag();}
-}
-
-
-/* Placeholder
- ========================================================================== */
-
-.uk-sortable-placeholder {
- opacity: $sortable-placeholder-opacity;
- pointer-events: none;
- @if(mixin-exists(hook-sortable-placeholder)) {@include hook-sortable-placeholder();}
-}
-
-
-/* Empty modifier
- ========================================================================== */
-
-.uk-sortable-empty {
- min-height: $sortable-empty-height;
- @if(mixin-exists(hook-sortable-empty)) {@include hook-sortable-empty();}
-}
-
-
-/* Handle
- ========================================================================== */
-
-/* Hover */
-.uk-sortable-handle:hover { cursor: move; }
-
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-sortable-misc)) {@include hook-sortable-misc();}
-
-// @mixin hook-sortable(){}
-// @mixin hook-sortable-drag(){}
-// @mixin hook-sortable-placeholder(){}
-// @mixin hook-sortable-empty(){}
-// @mixin hook-sortable-misc(){}
diff --git a/docs/_sass/uikit/components/spinner.scss b/docs/_sass/uikit/components/spinner.scss
deleted file mode 100644
index a02f41d17b..0000000000
--- a/docs/_sass/uikit/components/spinner.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-// Name: Spinner
-// Description: Component to create a loading spinner
-//
-// Component: `uk-spinner`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$spinner-size: 30px !default;
-$spinner-stroke-width: 1 !default;
-$spinner-radius: floor(($spinner-size - $spinner-stroke-width) / 2) !default; // Minus stroke width to prevent overflow clipping
-$spinner-circumference: round(2 * 3.141 * $spinner-radius) !default;
-$spinner-duration: 1.4s !default;
-
-
-/* ========================================================================
- Component: Spinner
- ========================================================================== */
-
-/*
- * Adopts `uk-icon`
- */
-
-.uk-spinner {
- @if(mixin-exists(hook-spinner)) {@include hook-spinner();}
-}
-
-
-/* SVG
- ========================================================================== */
-
-.uk-spinner > * { animation: uk-spinner-rotate $spinner-duration linear infinite; }
-
-@keyframes uk-spinner-rotate {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(270deg); }
-}
-
-/*
- * Circle
- */
-
-.uk-spinner > * > * {
- stroke-dasharray: $spinner-circumference;
- stroke-dashoffset: 0;
- transform-origin: center;
- animation: uk-spinner-dash $spinner-duration ease-in-out infinite;
- stroke-width: $spinner-stroke-width;
- stroke-linecap: round;
-}
-
-@keyframes uk-spinner-dash {
- 0% { stroke-dashoffset: $spinner-circumference; }
- 50% {
- stroke-dashoffset: $spinner-circumference/4;
- transform:rotate(135deg);
- }
- 100% {
- stroke-dashoffset: $spinner-circumference;
- transform:rotate(450deg);
- }
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-spinner-misc)) {@include hook-spinner-misc();}
-
-// @mixin hook-spinner(){}
-// @mixin hook-spinner-misc(){}
diff --git a/docs/_sass/uikit/components/sticky.scss b/docs/_sass/uikit/components/sticky.scss
deleted file mode 100644
index fe976d1926..0000000000
--- a/docs/_sass/uikit/components/sticky.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-// Name: Sticky
-// Description: Component to make elements sticky in the viewport
-//
-// Component: `uk-sticky`
-//
-// Modifier: `uk-sticky-fixed`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$sticky-z-index: $global-z-index - 20 !default;
-
-$sticky-animation-duration: 0.2s !default;
-$sticky-reverse-animation-duration: 0.2s !default;
-
-
-/* ========================================================================
- Component: Sticky
- ========================================================================== */
-
-/*
- * 1. Force new layer to resolve frame rate issues on devices with lower frame rates
- */
-
-.uk-sticky-fixed {
- z-index: $sticky-z-index;
- box-sizing: border-box;
- margin: 0 !important;
- /* 1 */
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-
-/*
- * Faster animations
- */
-
-.uk-sticky[class*='uk-animation-'] { animation-duration: $sticky-animation-duration; }
-
-.uk-sticky.uk-animation-reverse { animation-duration: $sticky-reverse-animation-duration; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-sticky-misc)) {@include hook-sticky-misc();}
-
-// @mixin hook-sticky-misc(){}
diff --git a/docs/_sass/uikit/components/subnav.scss b/docs/_sass/uikit/components/subnav.scss
deleted file mode 100644
index 8b0d4548ed..0000000000
--- a/docs/_sass/uikit/components/subnav.scss
+++ /dev/null
@@ -1,249 +0,0 @@
-// Name: Subnav
-// Description: Component to create a sub navigation
-//
-// Component: `uk-subnav`
-//
-// Modifiers: `uk-subnav-divider`
-// `uk-subnav-pill`
-//
-// States: `uk-active`
-// `uk-first-column`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$subnav-margin-horizontal: 20px !default;
-
-$subnav-item-color: $global-muted-color !default;
-$subnav-item-hover-color: $global-color !default;
-$subnav-item-hover-text-decoration: none !default;
-$subnav-item-active-color: $global-emphasis-color !default;
-
-$subnav-divider-margin-horizontal: $subnav-margin-horizontal !default;
-$subnav-divider-border-height: 1.5em !default;
-$subnav-divider-border-width: $global-border-width !default;
-$subnav-divider-border: $global-border !default;
-
-$subnav-pill-item-padding-vertical: 5px !default;
-$subnav-pill-item-padding-horizontal: 10px !default;
-$subnav-pill-item-background: transparent !default;
-$subnav-pill-item-color: $subnav-item-color !default;
-$subnav-pill-item-hover-background: $global-muted-background !default;
-$subnav-pill-item-hover-color: $global-color !default;
-$subnav-pill-item-onclick-background: $subnav-pill-item-hover-background !default;
-$subnav-pill-item-onclick-color: $subnav-pill-item-hover-color !default;
-$subnav-pill-item-active-background: $global-primary-background !default;
-$subnav-pill-item-active-color: $global-inverse-color !default;
-
-$subnav-item-disabled-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Subnav
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Center items vertically if they have a different height
- * 3. Gutter
- * 4. Reset list
- */
-
-.uk-subnav {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- align-items: center;
- /* 3 */
- margin-left: (-$subnav-margin-horizontal);
- /* 4 */
- padding: 0;
- list-style: none;
- @if(mixin-exists(hook-subnav)) {@include hook-subnav();}
-}
-
-/*
- * 1. Space is allocated solely based on content dimensions: 0 0 auto
- * 2. Gutter
- * 3. Create position context for dropdowns
- */
-
-.uk-subnav > * {
- /* 1 */
- flex: none;
- /* 2 */
- padding-left: $subnav-margin-horizontal;
- /* 3 */
- position: relative;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Items must target `a` elements to exclude other elements (e.g. dropdowns)
- * Using `:first-child` instead of `a` to support `span` elements for text
- * 1. Center content vertically, e.g. an icon
- * 2. Imitate white space gap when using flexbox
- * 3. Style
- */
-
-.uk-subnav > * > :first-child {
- /* 1 */
- display: flex;
- align-items: center;
- /* 2 */
- column-gap: 0.25em;
- /* 3 */
- color: $subnav-item-color;
- @if(mixin-exists(hook-subnav-item)) {@include hook-subnav-item();}
-}
-
-/* Hover + Focus */
-.uk-subnav > * > a:hover,
-.uk-subnav > * > a:focus {
- color: $subnav-item-hover-color;
- text-decoration: $subnav-item-hover-text-decoration;
- outline: none;
- @if(mixin-exists(hook-subnav-item-hover)) {@include hook-subnav-item-hover();}
-}
-
-/* Active */
-.uk-subnav > .uk-active > a {
- color: $subnav-item-active-color;
- @if(mixin-exists(hook-subnav-item-active)) {@include hook-subnav-item-active();}
-}
-
-
-/* Divider modifier
- ========================================================================== */
-
-/*
- * Set gutter
- */
-
-.uk-subnav-divider { margin-left: -(($subnav-divider-margin-horizontal * 2) + $subnav-divider-border-width); }
-
-/*
- * Align items and divider vertically
- */
-
-.uk-subnav-divider > * {
- display: flex;
- align-items: center;
-}
-
-/*
- * Divider
- * 1. `nth-child` makes it also work without JS if it's only one row
- */
-
-.uk-subnav-divider > ::before {
- content: "";
- height: $subnav-divider-border-height;
- margin-left: ($subnav-divider-margin-horizontal - $subnav-margin-horizontal);
- margin-right: $subnav-divider-margin-horizontal;
- border-left: $subnav-divider-border-width solid transparent;
-}
-
-/* 1 */
-.uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before {
- border-left-color: $subnav-divider-border;
- @if(mixin-exists(hook-subnav-divider)) {@include hook-subnav-divider();}
-}
-
-
-/* Pill modifier
- ========================================================================== */
-
-.uk-subnav-pill > * > :first-child {
- padding: $subnav-pill-item-padding-vertical $subnav-pill-item-padding-horizontal;
- background: $subnav-pill-item-background;
- color: $subnav-pill-item-color;
- @if(mixin-exists(hook-subnav-pill-item)) {@include hook-subnav-pill-item();}
-}
-
-/* Hover + Focus */
-.uk-subnav-pill > * > a:hover,
-.uk-subnav-pill > * > a:focus {
- background-color: $subnav-pill-item-hover-background;
- color: $subnav-pill-item-hover-color;
- @if(mixin-exists(hook-subnav-pill-item-hover)) {@include hook-subnav-pill-item-hover();}
-}
-
-/* OnClick */
-.uk-subnav-pill > * > a:active {
- background-color: $subnav-pill-item-onclick-background;
- color: $subnav-pill-item-onclick-color;
- @if(mixin-exists(hook-subnav-pill-item-onclick)) {@include hook-subnav-pill-item-onclick();}
-}
-
-/* Active */
-.uk-subnav-pill > .uk-active > a {
- background-color: $subnav-pill-item-active-background;
- color: $subnav-pill-item-active-color;
- @if(mixin-exists(hook-subnav-pill-item-active)) {@include hook-subnav-pill-item-active();}
-}
-
-
-/* Disabled
- * The same for all style modifiers
- ========================================================================== */
-
-.uk-subnav > .uk-disabled > a {
- color: $subnav-item-disabled-color;
- @if(mixin-exists(hook-subnav-item-disabled)) {@include hook-subnav-item-disabled();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-subnav-misc)) {@include hook-subnav-misc();}
-
-// @mixin hook-subnav(){}
-// @mixin hook-subnav-item(){}
-// @mixin hook-subnav-item-hover(){}
-// @mixin hook-subnav-item-active(){}
-// @mixin hook-subnav-divider(){}
-// @mixin hook-subnav-pill-item(){}
-// @mixin hook-subnav-pill-item-hover(){}
-// @mixin hook-subnav-pill-item-onclick(){}
-// @mixin hook-subnav-pill-item-active(){}
-// @mixin hook-subnav-item-disabled(){}
-// @mixin hook-subnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-subnav-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-subnav-divider-border: $inverse-global-border !default;
-$inverse-subnav-pill-item-background: transparent !default;
-$inverse-subnav-pill-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-pill-item-hover-background: $inverse-global-muted-background !default;
-$inverse-subnav-pill-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-pill-item-onclick-background: $inverse-subnav-pill-item-hover-background !default;
-$inverse-subnav-pill-item-onclick-color: $inverse-subnav-pill-item-hover-color !default;
-$inverse-subnav-pill-item-active-background: $inverse-global-primary-background !default;
-$inverse-subnav-pill-item-active-color: $inverse-global-inverse-color !default;
-$inverse-subnav-item-disabled-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-subnav-item(){}
-// @mixin hook-inverse-subnav-item-hover(){}
-// @mixin hook-inverse-subnav-item-active(){}
-// @mixin hook-inverse-subnav-divider(){}
-// @mixin hook-inverse-subnav-pill-item(){}
-// @mixin hook-inverse-subnav-pill-item-hover(){}
-// @mixin hook-inverse-subnav-pill-item-onclick(){}
-// @mixin hook-inverse-subnav-pill-item-active(){}
-// @mixin hook-inverse-subnav-item-disabled(){}
diff --git a/docs/_sass/uikit/components/svg.scss b/docs/_sass/uikit/components/svg.scss
deleted file mode 100644
index bcf804af07..0000000000
--- a/docs/_sass/uikit/components/svg.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-// Name: SVG
-// Description: Component to style SVGs
-//
-// Component: `uk-svg`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: SVG
- ========================================================================== */
-
-/*
- * 1. Fill all SVG elements with the current text color if no `fill` attribute is set
- * 2. Set the fill and stroke color of all SVG elements to the current text color
- */
-
-/* 1 */
-.uk-svg,
-/* 2 */
-.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve) { fill: currentcolor; }
-.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve) { stroke: currentcolor; }
-
-/*
- * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835
- */
-
-.uk-svg { transform: translate(0,0); }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-svg-misc)) {@include hook-svg-misc();}
-
-// @mixin hook-svg-misc(){}
diff --git a/docs/_sass/uikit/components/switcher.scss b/docs/_sass/uikit/components/switcher.scss
deleted file mode 100644
index 0d99cdf7b9..0000000000
--- a/docs/_sass/uikit/components/switcher.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-// Name: Switcher
-// Description: Component to navigate through different content panes
-//
-// Component: `uk-switcher`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Switcher
- ========================================================================== */
-
-/*
- * Reset list
- */
-
-.uk-switcher {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Hide not active items
- */
-
-.uk-switcher > :not(.uk-active) { display: none; }
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-switcher > * > :last-child { margin-bottom: 0; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-switcher-misc)) {@include hook-switcher-misc();}
-
-// @mixin hook-switcher-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/tab.scss b/docs/_sass/uikit/components/tab.scss
deleted file mode 100644
index 16d297f617..0000000000
--- a/docs/_sass/uikit/components/tab.scss
+++ /dev/null
@@ -1,197 +0,0 @@
-// Name: Tab
-// Description: Component to create a tabbed navigation
-//
-// Component: `uk-tab`
-//
-// Modifiers: `uk-tab-bottom`
-// `uk-tab-left`
-// `uk-tab-right`
-//
-// States: `uk-active`
-// `uk-disabled`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$tab-margin-horizontal: 20px !default;
-
-$tab-item-padding-horizontal: 10px !default;
-$tab-item-padding-vertical: 5px !default;
-$tab-item-color: $global-muted-color !default;
-$tab-item-hover-color: $global-color !default;
-$tab-item-hover-text-decoration: none !default;
-$tab-item-active-color: $global-emphasis-color !default;
-$tab-item-disabled-color: $global-muted-color !default;
-
-
-/* ========================================================================
- Component: Tab
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Gutter
- * 3. Reset list
- */
-
-.uk-tab {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin-left: (-$tab-margin-horizontal);
- /* 3 */
- padding: 0;
- list-style: none;
- @if(mixin-exists(hook-tab)) {@include hook-tab();}
-}
-
-/*
- * 1. Space is allocated solely based on content dimensions: 0 0 auto
- * 2. Gutter
- * 3. Create position context for dropdowns
- */
-
-.uk-tab > * {
- /* 1 */
- flex: none;
- /* 2 */
- padding-left: $tab-margin-horizontal;
- /* 3 */
- position: relative;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Items must target `a` elements to exclude other elements (e.g. dropdowns)
- * 1. Center content vertically, e.g. an icon
- * 2. Imitate white space gap when using flexbox
- * 3. Center content if a width is set
- * 4. Style
- */
-
-.uk-tab > * > a {
- /* 1 */
- display: flex;
- align-items: center;
- /* 2 */
- column-gap: 0.25em;
- /* 3 */
- justify-content: center;
- /* 4 */
- padding: $tab-item-padding-vertical $tab-item-padding-horizontal;
- color: $tab-item-color;
- @if(mixin-exists(hook-tab-item)) {@include hook-tab-item();}
-}
-
-/* Hover + Focus */
-.uk-tab > * > a:hover,
-.uk-tab > * > a:focus {
- color: $tab-item-hover-color;
- text-decoration: $tab-item-hover-text-decoration;
- @if(mixin-exists(hook-tab-item-hover)) {@include hook-tab-item-hover();}
-}
-
-/* Active */
-.uk-tab > .uk-active > a {
- color: $tab-item-active-color;
- @if(mixin-exists(hook-tab-item-active)) {@include hook-tab-item-active();}
-}
-
-/* Disabled */
-.uk-tab > .uk-disabled > a {
- color: $tab-item-disabled-color;
- @if(mixin-exists(hook-tab-item-disabled)) {@include hook-tab-item-disabled();}
-}
-
-
-/* Position modifier
- ========================================================================== */
-
-/*
- * Bottom
- */
-
-.uk-tab-bottom {
- @if(mixin-exists(hook-tab-bottom)) {@include hook-tab-bottom();}
-}
-
-.uk-tab-bottom > * > a {
- @if(mixin-exists(hook-tab-bottom-item)) {@include hook-tab-bottom-item();}
-}
-
-/*
- * Left + Right
- * 1. Reset Gutter
- */
-
-.uk-tab-left,
-.uk-tab-right {
- flex-direction: column;
- /* 1 */
- margin-left: 0;
-}
-
-/* 1 */
-.uk-tab-left > *,
-.uk-tab-right > * { padding-left: 0; }
-
-.uk-tab-left {
- @if(mixin-exists(hook-tab-left)) {@include hook-tab-left();}
-}
-
-.uk-tab-right {
- @if(mixin-exists(hook-tab-right)) {@include hook-tab-right();}
-}
-
-.uk-tab-left > * > a {
- text-align: left;
- @if(mixin-exists(hook-tab-left-item)) {@include hook-tab-left-item();}
-}
-
-.uk-tab-right > * > a {
- text-align: left;
- @if(mixin-exists(hook-tab-right-item)) {@include hook-tab-right-item();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-tab-misc)) {@include hook-tab-misc();}
-
-// @mixin hook-tab(){}
-// @mixin hook-tab-item(){}
-// @mixin hook-tab-item-hover(){}
-// @mixin hook-tab-item-active(){}
-// @mixin hook-tab-item-disabled(){}
-// @mixin hook-tab-bottom(){}
-// @mixin hook-tab-bottom-item(){}
-// @mixin hook-tab-left(){}
-// @mixin hook-tab-left-item(){}
-// @mixin hook-tab-right(){}
-// @mixin hook-tab-right-item(){}
-// @mixin hook-tab-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-tab-item-color: $inverse-global-muted-color !default;
-$inverse-tab-item-hover-color: $inverse-global-color !default;
-$inverse-tab-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-tab-item-disabled-color: $inverse-global-muted-color !default;
-
-
-
-// @mixin hook-inverse-tab(){}
-// @mixin hook-inverse-tab-item(){}
-// @mixin hook-inverse-tab-item-hover(){}
-// @mixin hook-inverse-tab-item-active(){}
-// @mixin hook-inverse-tab-item-disabled(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/table.scss b/docs/_sass/uikit/components/table.scss
deleted file mode 100644
index 50e2f81abf..0000000000
--- a/docs/_sass/uikit/components/table.scss
+++ /dev/null
@@ -1,315 +0,0 @@
-// Name: Table
-// Description: Styles for tables
-//
-// Component: `uk-table`
-//
-// Modifiers: `uk-table-middle`
-// `uk-table-divider`
-// `uk-table-striped`
-// `uk-table-hover`
-// `uk-table-small`
-// `uk-table-justify`
-// `uk-table-shrink`
-// `uk-table-expand`
-// `uk-table-link`
-// `uk-table-responsive`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$table-margin-vertical: $global-margin !default;
-
-$table-cell-padding-vertical: 16px !default;
-$table-cell-padding-horizontal: 12px !default;
-
-$table-header-cell-font-size: $global-font-size !default;
-$table-header-cell-font-weight: bold !default;
-$table-header-cell-color: $global-color !default;
-
-$table-footer-font-size: $global-small-font-size !default;
-
-$table-caption-font-size: $global-small-font-size !default;
-$table-caption-color: $global-muted-color !default;
-
-$table-row-active-background: #ffd !default;
-
-$table-divider-border-width: $global-border-width !default;
-$table-divider-border: $global-border !default;
-
-$table-striped-row-background: $global-muted-background !default;
-
-$table-hover-row-background: $table-row-active-background !default;
-
-$table-small-cell-padding-vertical: 10px !default;
-$table-small-cell-padding-horizontal: 12px !default;
-
-$table-large-cell-padding-vertical: 22px !default;
-$table-large-cell-padding-horizontal: 12px !default;
-
-$table-expand-min-width: 150px !default;
-
-
-/* ========================================================================
- Component: Table
- ========================================================================== */
-
-/*
- * 1. Remove most spacing between table cells.
- * 2. Behave like a block element
- * 3. Style
- */
-
-.uk-table {
- /* 1 */
- border-collapse: collapse;
- border-spacing: 0;
- /* 2 */
- width: 100%;
- /* 3 */
- margin-bottom: $table-margin-vertical;
- @if(mixin-exists(hook-table)) {@include hook-table();}
-}
-
-/* Add margin if adjacent element */
-* + .uk-table { margin-top: $table-margin-vertical; }
-
-
-/* Header cell
- ========================================================================== */
-
-/*
- * 1. Style
- */
-
-.uk-table th {
- padding: $table-cell-padding-vertical $table-cell-padding-horizontal;
- text-align: left;
- vertical-align: bottom;
- /* 1 */
- font-size: $table-header-cell-font-size;
- font-weight: $table-header-cell-font-weight;
- color: $table-header-cell-color;
- @if(mixin-exists(hook-table-header-cell)) {@include hook-table-header-cell();}
-}
-
-
-/* Cell
- ========================================================================== */
-
-.uk-table td {
- padding: $table-cell-padding-vertical $table-cell-padding-horizontal;
- vertical-align: top;
- @if(mixin-exists(hook-table-cell)) {@include hook-table-cell();}
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-table td > :last-child { margin-bottom: 0; }
-
-
-/* Footer
- ========================================================================== */
-
-.uk-table tfoot {
- font-size: $table-footer-font-size;
- @if(mixin-exists(hook-table-footer)) {@include hook-table-footer();}
-}
-
-
-/* Caption
- ========================================================================== */
-
-.uk-table caption {
- font-size: $table-caption-font-size;
- text-align: left;
- color: $table-caption-color;
- @if(mixin-exists(hook-table-caption)) {@include hook-table-caption();}
-}
-
-
-/* Alignment modifier
- ========================================================================== */
-
-.uk-table-middle,
-.uk-table-middle td { vertical-align: middle !important; }
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Divider
- */
-
-.uk-table-divider > tr:not(:first-child),
-.uk-table-divider > :not(:first-child) > tr,
-.uk-table-divider > :first-child > tr:not(:first-child) {
- border-top: $table-divider-border-width solid $table-divider-border;
- @if(mixin-exists(hook-table-divider)) {@include hook-table-divider();}
-}
-
-/*
- * Striped
- */
-
-.uk-table-striped > tr:nth-of-type(odd),
-.uk-table-striped tbody tr:nth-of-type(odd) {
- background: $table-striped-row-background;
- @if(mixin-exists(hook-table-striped)) {@include hook-table-striped();}
-}
-
-/*
- * Hover
- */
-
-.uk-table-hover > tr:hover,
-.uk-table-hover tbody tr:hover {
- background: $table-hover-row-background;
- @if(mixin-exists(hook-table-hover)) {@include hook-table-hover();}
-}
-
-
-/* Active state
- ========================================================================== */
-
-.uk-table > tr.uk-active,
-.uk-table tbody tr.uk-active {
- background: $table-row-active-background;
- @if(mixin-exists(hook-table-row-active)) {@include hook-table-row-active();}
-}
-
-/* Size modifier
- ========================================================================== */
-
-.uk-table-small th,
-.uk-table-small td {
- padding: $table-small-cell-padding-vertical $table-small-cell-padding-horizontal;
- @if(mixin-exists(hook-table-small)) {@include hook-table-small();}
-}
-
-.uk-table-large th,
-.uk-table-large td {
- padding: $table-large-cell-padding-vertical $table-large-cell-padding-horizontal;
- @if(mixin-exists(hook-table-large)) {@include hook-table-large();}
-}
-
-
-/* Justify modifier
- ========================================================================== */
-
-.uk-table-justify th:first-child,
-.uk-table-justify td:first-child { padding-left: 0; }
-
-.uk-table-justify th:last-child,
-.uk-table-justify td:last-child { padding-right: 0; }
-
-
-/* Cell size modifier
- ========================================================================== */
-
-.uk-table-shrink { width: 1px; }
-.uk-table-expand { min-width: $table-expand-min-width; }
-
-
-/* Cell link modifier
- ========================================================================== */
-
-/*
- * Does not work with `uk-table-justify` at the moment
- */
-
-.uk-table-link { padding: 0 !important; }
-
-.uk-table-link > a {
- display: block;
- padding: $table-cell-padding-vertical $table-cell-padding-horizontal;
-}
-
-.uk-table-small .uk-table-link > a { padding: $table-small-cell-padding-vertical $table-small-cell-padding-horizontal; }
-
-
-/* Responsive table
- ========================================================================== */
-
-
-/* Phone landscape and smaller */
-@media (max-width: $breakpoint-small-max) {
-
- .uk-table-responsive,
- .uk-table-responsive tbody,
- .uk-table-responsive th,
- .uk-table-responsive td,
- .uk-table-responsive tr { display: block; }
-
- .uk-table-responsive thead { display: none; }
-
- .uk-table-responsive th,
- .uk-table-responsive td {
- width: auto !important;
- max-width: none !important;
- min-width: 0 !important;
- overflow: visible !important;
- white-space: normal !important;
- }
-
- .uk-table-responsive th:not(:first-child):not(.uk-table-link),
- .uk-table-responsive td:not(:first-child):not(.uk-table-link),
- .uk-table-responsive .uk-table-link:not(:first-child) > a { padding-top: round($table-cell-padding-vertical / 3) !important; }
-
- .uk-table-responsive th:not(:last-child):not(.uk-table-link),
- .uk-table-responsive td:not(:last-child):not(.uk-table-link),
- .uk-table-responsive .uk-table-link:not(:last-child) > a { padding-bottom: round($table-cell-padding-vertical / 3) !important; }
-
- .uk-table-justify.uk-table-responsive th,
- .uk-table-justify.uk-table-responsive td {
- padding-left: 0;
- padding-right: 0;
- }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-table-misc)) {@include hook-table-misc();}
-
-// @mixin hook-table(){}
-// @mixin hook-table-header-cell(){}
-// @mixin hook-table-cell(){}
-// @mixin hook-table-footer(){}
-// @mixin hook-table-caption(){}
-// @mixin hook-table-row-active(){}
-// @mixin hook-table-divider(){}
-// @mixin hook-table-striped(){}
-// @mixin hook-table-hover(){}
-// @mixin hook-table-small(){}
-// @mixin hook-table-large(){}
-// @mixin hook-table-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-table-header-cell-color: $inverse-global-color !default;
-$inverse-table-caption-color: $inverse-global-muted-color !default;
-$inverse-table-row-active-background: fade-out($inverse-global-muted-background, 0.02) !default;
-$inverse-table-divider-border: $inverse-global-border !default;
-$inverse-table-striped-row-background: $inverse-global-muted-background !default;
-$inverse-table-hover-row-background: $inverse-table-row-active-background !default;
-
-
-
-// @mixin hook-inverse-table-header-cell(){}
-// @mixin hook-inverse-table-caption(){}
-// @mixin hook-inverse-table-row-active(){}
-// @mixin hook-inverse-table-divider(){}
-// @mixin hook-inverse-table-striped(){}
-// @mixin hook-inverse-table-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/text.scss b/docs/_sass/uikit/components/text.scss
deleted file mode 100644
index 25f5df2203..0000000000
--- a/docs/_sass/uikit/components/text.scss
+++ /dev/null
@@ -1,284 +0,0 @@
-// Name: Text
-// Description: Utilities for text
-//
-// Component: `uk-text-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$text-lead-font-size: $global-large-font-size !default;
-$text-lead-line-height: 1.5 !default;
-$text-lead-color: $global-emphasis-color !default;
-
-$text-meta-font-size: $global-small-font-size !default;
-$text-meta-line-height: 1.4 !default;
-$text-meta-color: $global-muted-color !default;
-
-$text-small-font-size: $global-small-font-size !default;
-$text-small-line-height: 1.5 !default;
-
-$text-large-font-size: $global-large-font-size !default;
-$text-large-line-height: 1.5 !default;
-
-$text-muted-color: $global-muted-color !default;
-$text-emphasis-color: $global-emphasis-color !default;
-$text-primary-color: $global-primary-background !default;
-$text-secondary-color: $global-secondary-background !default;
-$text-success-color: $global-success-background !default;
-$text-warning-color: $global-warning-background !default;
-$text-danger-color: $global-danger-background !default;
-
-$text-background-color: $global-primary-background !default;
-
-
-/* ========================================================================
- Component: Text
- ========================================================================== */
-
-
-/* Style modifiers
- ========================================================================== */
-
-.uk-text-lead {
- font-size: $text-lead-font-size;
- line-height: $text-lead-line-height;
- color: $text-lead-color;
- @if(mixin-exists(hook-text-lead)) {@include hook-text-lead();}
-}
-
-.uk-text-meta {
- font-size: $text-meta-font-size;
- line-height: $text-meta-line-height;
- color: $text-meta-color;
- @if(mixin-exists(hook-text-meta)) {@include hook-text-meta();}
-}
-
-
-/* Size modifiers
- ========================================================================== */
-
-.uk-text-small {
- font-size: $text-small-font-size;
- line-height: $text-small-line-height;
- @if(mixin-exists(hook-text-small)) {@include hook-text-small();}
-}
-
-.uk-text-large {
- font-size: $text-large-font-size;
- line-height: $text-large-line-height;
- @if(mixin-exists(hook-text-large)) {@include hook-text-large();}
-}
-
-.uk-text-default {
- font-size: $global-font-size;
- line-height: $global-line-height;
-}
-
-
-/* Weight modifier
- ========================================================================== */
-
-.uk-text-light { font-weight: 300; }
-.uk-text-normal { font-weight: 400; }
-.uk-text-bold { font-weight: 700; }
-
-.uk-text-lighter { font-weight: lighter; }
-.uk-text-bolder { font-weight: bolder; }
-
-
-/* Style modifier
- ========================================================================== */
-
-.uk-text-italic { font-style: italic; }
-
-
-/* Transform modifier
- ========================================================================== */
-
-.uk-text-capitalize { text-transform: capitalize !important; }
-.uk-text-uppercase { text-transform: uppercase !important; }
-.uk-text-lowercase { text-transform: lowercase !important; }
-
-
-/* Decoration modifier
- ========================================================================== */
-
-.uk-text-decoration-none { text-decoration: none !important; }
-
-
-/* Color modifiers
- ========================================================================== */
-
-.uk-text-muted { color: $text-muted-color !important; }
-.uk-text-emphasis { color: $text-emphasis-color !important; }
-.uk-text-primary { color: $text-primary-color !important; }
-.uk-text-secondary { color: $text-secondary-color !important; }
-.uk-text-success { color: $text-success-color !important; }
-.uk-text-warning { color: $text-warning-color !important; }
-.uk-text-danger { color: $text-danger-color !important; }
-
-
-/* Background modifier
- ========================================================================== */
-
-/*
- * 1. The background clips to the foreground text. Works in Chrome, Firefox, Safari, Edge and Opera
- * Default color is set to transparent
- * 2. Container fits the text
- * 3. Fallback color for IE11
- */
-
-.uk-text-background {
- /* 1 */
- -webkit-background-clip: text;
- /* 2 */
- display: inline-block;
- /* 3 */
- color: $text-background-color !important;
-}
-
-@supports (-webkit-background-clip: text) {
-
- .uk-text-background {
- background-color: $text-background-color;
- color: transparent !important;
- @if(mixin-exists(hook-text-background)) {@include hook-text-background();}
- }
-
-}
-
-
-/* Alignment modifiers
- ========================================================================== */
-
-.uk-text-left { text-align: left !important; }
-.uk-text-right { text-align: right !important; }
-.uk-text-center { text-align: center !important; }
-.uk-text-justify { text-align: justify !important; }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-text-left\@s { text-align: left !important; }
- .uk-text-right\@s { text-align: right !important; }
- .uk-text-center\@s { text-align: center !important; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-text-left\@m { text-align: left !important; }
- .uk-text-right\@m { text-align: right !important; }
- .uk-text-center\@m { text-align: center !important; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-text-left\@l { text-align: left !important; }
- .uk-text-right\@l { text-align: right !important; }
- .uk-text-center\@l { text-align: center !important; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-text-left\@xl { text-align: left !important; }
- .uk-text-right\@xl { text-align: right !important; }
- .uk-text-center\@xl { text-align: center !important; }
-
-}
-
-/*
- * Vertical
- */
-
-.uk-text-top { vertical-align: top !important; }
-.uk-text-middle { vertical-align: middle !important; }
-.uk-text-bottom { vertical-align: bottom !important; }
-.uk-text-baseline { vertical-align: baseline !important; }
-
-
-/* Wrap modifiers
- ========================================================================== */
-
-/*
- * Prevent text from wrapping onto multiple lines
- */
-
-.uk-text-nowrap { white-space: nowrap; }
-
-/*
- * 1. Make sure a max-width is set after which truncation can occur
- * 2. Prevent text from wrapping onto multiple lines, and truncate with an ellipsis
- * 3. Fix for table cells
- */
-
-.uk-text-truncate {
- /* 1 */
- max-width: 100%;
- /* 2 */
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-/* 2 */
-th.uk-text-truncate,
-td.uk-text-truncate { max-width: 0; }
-
-
-/*
- * 1. Wrap long words onto the next line and break them if they are too long to fit
- * 2. Legacy `word-wrap` as fallback for `overflow-wrap`
- * 3. Fix `overflow-wrap` which doesn't work with table cells in Chrome, Opera, IE11 and Edge
- * Must use `break-all` to support IE11 and Edge
- * Note: Not using `hyphens: auto;` because it hyphenates text even if not needed
- */
-
-.uk-text-break {
- /* 1 */
- overflow-wrap: break-word;
- /* 2 */
- word-wrap: break-word;
-}
-
-/* 3 */
-th.uk-text-break,
-td.uk-text-break { word-break: break-all; }
-
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-text-misc)) {@include hook-text-misc();}
-
-// @mixin hook-text-lead(){}
-// @mixin hook-text-meta(){}
-// @mixin hook-text-small(){}
-// @mixin hook-text-large(){}
-// @mixin hook-text-background(){}
-// @mixin hook-text-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-text-lead-color: $inverse-global-color !default;
-$inverse-text-meta-color: $inverse-global-muted-color !default;
-$inverse-text-muted-color: $inverse-global-muted-color !default;
-$inverse-text-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-text-primary-color: $inverse-global-primary-background !default;
-$inverse-text-secondary-color: $inverse-global-primary-background !default;
-
-
-
-// @mixin hook-inverse-text-lead(){}
-// @mixin hook-inverse-text-meta(){}
diff --git a/docs/_sass/uikit/components/thumbnav.scss b/docs/_sass/uikit/components/thumbnav.scss
deleted file mode 100644
index ce211a1f52..0000000000
--- a/docs/_sass/uikit/components/thumbnav.scss
+++ /dev/null
@@ -1,121 +0,0 @@
-// Name: Thumbnav
-// Description: Component to create thumbnail navigations
-//
-// Component: `uk-thumbnav`
-//
-// Modifier: `uk-thumbnav-vertical`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$thumbnav-margin-horizontal: 15px !default;
-$thumbnav-margin-vertical: $thumbnav-margin-horizontal !default;
-
-
-/* ========================================================================
- Component: Thumbnav
- ========================================================================== */
-
-/*
- * 1. Allow items to wrap into the next line
- * 2. Reset list
- * 3. Gutter
- */
-
-.uk-thumbnav {
- display: flex;
- /* 1 */
- flex-wrap: wrap;
- /* 2 */
- margin: 0;
- padding: 0;
- list-style: none;
- /* 3 */
- margin-left: (-$thumbnav-margin-horizontal);
- @if(mixin-exists(hook-thumbnav)) {@include hook-thumbnav();}
-}
-
-/*
- * Space is allocated based on content dimensions, but shrinks: 0 1 auto
- * 1. Gutter
- */
-
-.uk-thumbnav > * {
- /* 1 */
- padding-left: $thumbnav-margin-horizontal;
-}
-
-
-/* Items
- ========================================================================== */
-
-/*
- * Items
- */
-
-.uk-thumbnav > * > * {
- display: inline-block;
- @if(mixin-exists(hook-thumbnav-item)) {@include hook-thumbnav-item();}
-}
-
-/* Hover + Focus */
-.uk-thumbnav > * > :hover,
-.uk-thumbnav > * > :focus {
- outline: none;
- @if(mixin-exists(hook-thumbnav-item-hover)) {@include hook-thumbnav-item-hover();}
-}
-
-/* Active */
-.uk-thumbnav > .uk-active > * {
- @if(mixin-exists(hook-thumbnav-item-active)) {@include hook-thumbnav-item-active();}
-}
-
-
-/* Modifier: 'uk-thumbnav-vertical'
- ========================================================================== */
-
-/*
- * 1. Change direction
- * 2. Gutter
- */
-
-.uk-thumbnav-vertical {
- /* 1 */
- flex-direction: column;
- /* 2 */
- margin-left: 0;
- margin-top: (-$thumbnav-margin-vertical);
-}
-
-/* 2 */
-.uk-thumbnav-vertical > * {
- padding-left: 0;
- padding-top: $thumbnav-margin-vertical;
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-thumbnav-misc)) {@include hook-thumbnav-misc();}
-
-// @mixin hook-thumbnav(){}
-// @mixin hook-thumbnav-item(){}
-// @mixin hook-thumbnav-item-hover(){}
-// @mixin hook-thumbnav-item-active(){}
-// @mixin hook-thumbnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-
-
-// @mixin hook-inverse-thumbnav-item(){}
-// @mixin hook-inverse-thumbnav-item-hover(){}
-// @mixin hook-inverse-thumbnav-item-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/components/tile.scss b/docs/_sass/uikit/components/tile.scss
deleted file mode 100644
index 129ee19786..0000000000
--- a/docs/_sass/uikit/components/tile.scss
+++ /dev/null
@@ -1,213 +0,0 @@
-// Name: Tile
-// Description: Component to create tiled boxes
-//
-// Component: `uk-tile`
-//
-// Modifiers: `uk-tile-xsmall`
-// `uk-tile-small`
-// `uk-tile-large`
-// `uk-tile-xlarge`
-// `uk-tile-default`
-// `uk-tile-muted`
-// `uk-tile-primary`
-// `uk-tile-secondary`
-//
-// States: `uk-preserve-color`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$tile-padding-horizontal: 15px !default;
-$tile-padding-horizontal-s: $global-gutter !default;
-$tile-padding-horizontal-m: $global-medium-gutter !default;
-$tile-padding-vertical: $global-medium-margin !default;
-$tile-padding-vertical-m: $global-large-margin !default;
-
-$tile-xsmall-padding-vertical: $global-margin !default;
-
-$tile-small-padding-vertical: $global-medium-margin !default;
-
-$tile-large-padding-vertical: $global-large-margin !default;
-$tile-large-padding-vertical-m: $global-xlarge-margin !default;
-
-$tile-xlarge-padding-vertical: $global-xlarge-margin !default;
-$tile-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-
-$tile-default-background: $global-background !default;
-
-$tile-muted-background: $global-muted-background !default;
-
-$tile-primary-background: $global-primary-background !default;
-$tile-primary-color-mode: light !default;
-
-$tile-secondary-background: $global-secondary-background !default;
-$tile-secondary-color-mode: light !default;
-
-
-/* ========================================================================
- Component: Tile
- ========================================================================== */
-
-.uk-tile {
- display: flow-root;
- position: relative;
- box-sizing: border-box;
- padding-left: $tile-padding-horizontal;
- padding-right: $tile-padding-horizontal;
- padding-top: $tile-padding-vertical;
- padding-bottom: $tile-padding-vertical;
- @if(mixin-exists(hook-tile)) {@include hook-tile();}
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-tile {
- padding-left: $tile-padding-horizontal-s;
- padding-right: $tile-padding-horizontal-s;
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-tile {
- padding-left: $tile-padding-horizontal-m;
- padding-right: $tile-padding-horizontal-m;
- padding-top: $tile-padding-vertical-m;
- padding-bottom: $tile-padding-vertical-m;
- }
-
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-tile > :last-child { margin-bottom: 0; }
-
-
-/* Size modifiers
- ========================================================================== */
-
-/*
- * XSmall
- */
-
-.uk-tile-xsmall {
- padding-top: $tile-xsmall-padding-vertical;
- padding-bottom: $tile-xsmall-padding-vertical;
-}
-
-/*
- * Small
- */
-
-.uk-tile-small {
- padding-top: $tile-small-padding-vertical;
- padding-bottom: $tile-small-padding-vertical;
-}
-
-/*
- * Large
- */
-
-.uk-tile-large {
- padding-top: $tile-large-padding-vertical;
- padding-bottom: $tile-large-padding-vertical;
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-tile-large {
- padding-top: $tile-large-padding-vertical-m;
- padding-bottom: $tile-large-padding-vertical-m;
- }
-
-}
-
-
-/*
- * XLarge
- */
-
-.uk-tile-xlarge {
- padding-top: $tile-xlarge-padding-vertical;
- padding-bottom: $tile-xlarge-padding-vertical;
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-tile-xlarge {
- padding-top: $tile-xlarge-padding-vertical-m;
- padding-bottom: $tile-xlarge-padding-vertical-m;
- }
-
-}
-
-
-/* Style modifiers
- ========================================================================== */
-
-/*
- * Default
- */
-
-.uk-tile-default {
- background: $tile-default-background;
- @if(mixin-exists(hook-tile-default)) {@include hook-tile-default();}
-}
-
-/*
- * Muted
- */
-
-.uk-tile-muted {
- background: $tile-muted-background;
- @if(mixin-exists(hook-tile-muted)) {@include hook-tile-muted();}
-}
-
-/*
- * Primary
- */
-
-.uk-tile-primary {
- background: $tile-primary-background;
- @if(mixin-exists(hook-tile-primary)) {@include hook-tile-primary();}
-}
-
-// Color Mode
-@if ( $tile-primary-color-mode == light ) { .uk-tile-primary:not(.uk-preserve-color) { @extend .uk-light !optional;} }
-@if ( $tile-primary-color-mode == dark ) { .uk-tile-primary:not(.uk-preserve-color) { @extend .uk-dark !optional;} }
-
-/*
- * Secondary
- */
-
-.uk-tile-secondary {
- background: $tile-secondary-background;
- @if(mixin-exists(hook-tile-secondary)) {@include hook-tile-secondary();}
-}
-
-// Color Mode
-@if ( $tile-secondary-color-mode == light ) { .uk-tile-secondary:not(.uk-preserve-color) { @extend .uk-light !optional;} }
-@if ( $tile-secondary-color-mode == dark ) { .uk-tile-secondary:not(.uk-preserve-color) { @extend .uk-dark !optional;} }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-tile-misc)) {@include hook-tile-misc();}
-
-// @mixin hook-tile(){}
-// @mixin hook-tile-default(){}
-// @mixin hook-tile-muted(){}
-// @mixin hook-tile-primary(){}
-// @mixin hook-tile-secondary(){}
-// @mixin hook-tile-misc(){}
diff --git a/docs/_sass/uikit/components/tooltip.scss b/docs/_sass/uikit/components/tooltip.scss
deleted file mode 100644
index 416d289e4c..0000000000
--- a/docs/_sass/uikit/components/tooltip.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-// Name: Tooltip
-// Description: Component to create tooltips
-//
-// Component: `uk-tooltip`
-//
-// Modifiers `uk-tooltip-top`
-// `uk-tooltip-top-left`
-// `uk-tooltip-top-right`
-// `uk-tooltip-bottom`
-// `uk-tooltip-bottom-left`
-// `uk-tooltip-bottom-right`
-// `uk-tooltip-left`
-// `uk-tooltip-right`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$tooltip-z-index: $global-z-index + 30 !default;
-$tooltip-max-width: 200px !default;
-$tooltip-padding-vertical: 3px !default;
-$tooltip-padding-horizontal: 6px !default;
-$tooltip-background: #666 !default;
-$tooltip-border-radius: 2px !default;
-$tooltip-color: $global-inverse-color !default;
-$tooltip-font-size: 12px !default;
-
-$tooltip-margin: 10px !default;
-
-
-/* ========================================================================
- Component: Tooltip
- ========================================================================== */
-
-/*
- * 1. Hide by default
- * 2. Position
- * 3. Remove tooltip from document flow to keep the UIkit container from changing its size when injected into the document initially
- * 4. Dimensions
- * 5. Style
- */
-
-.uk-tooltip {
- /* 1 */
- display: none;
- /* 2 */
- position: absolute;
- z-index: $tooltip-z-index;
- /* 3 */
- top: 0;
- /* 4 */
- box-sizing: border-box;
- max-width: $tooltip-max-width;
- padding: $tooltip-padding-vertical $tooltip-padding-horizontal;
- /* 5 */
- background: $tooltip-background;
- border-radius: $tooltip-border-radius;
- color: $tooltip-color;
- font-size: $tooltip-font-size;
- @if(mixin-exists(hook-tooltip)) {@include hook-tooltip();}
-}
-
-/* Show */
-.uk-tooltip.uk-active { display: block; }
-
-
-/* Direction / Alignment modifiers
- ========================================================================== */
-
-/* Direction */
-[class*='uk-tooltip-top'] { margin-top: (-$tooltip-margin); }
-[class*='uk-tooltip-bottom'] { margin-top: $tooltip-margin; }
-[class*='uk-tooltip-left'] { margin-left: (-$tooltip-margin); }
-[class*='uk-tooltip-right'] { margin-left: $tooltip-margin; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-tooltip-misc)) {@include hook-tooltip-misc();}
-
-// @mixin hook-tooltip(){}
-// @mixin hook-tooltip-misc(){}
diff --git a/docs/_sass/uikit/components/totop.scss b/docs/_sass/uikit/components/totop.scss
deleted file mode 100644
index 4b8aa1d88f..0000000000
--- a/docs/_sass/uikit/components/totop.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-// Name: Totop
-// Description: Component to create an icon to scroll back to top
-//
-// Component: `uk-totop`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$totop-padding: 5px !default;
-$totop-color: $global-muted-color !default;
-
-$totop-hover-color: $global-color !default;
-
-$totop-active-color: $global-emphasis-color !default;
-
-
-/* ========================================================================
- Component: Totop
- ========================================================================== */
-
-/*
- * Addopts `uk-icon`
- */
-
-.uk-totop {
- padding: $totop-padding;
- color: $totop-color;
- @if(mixin-exists(hook-totop)) {@include hook-totop();}
-}
-
-/* Hover + Focus */
-.uk-totop:hover,
-.uk-totop:focus {
- color: $totop-hover-color;
- outline: none;
- @if(mixin-exists(hook-totop-hover)) {@include hook-totop-hover();}
-}
-
-/* OnClick */
-.uk-totop:active {
- color: $totop-active-color;
- @if(mixin-exists(hook-totop-active)) {@include hook-totop-active();}
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-totop-misc)) {@include hook-totop-misc();}
-
-// @mixin hook-totop(){}
-// @mixin hook-totop-hover(){}
-// @mixin hook-totop-active(){}
-// @mixin hook-totop-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-totop-color: $inverse-global-muted-color !default;
-$inverse-totop-hover-color: $inverse-global-color !default;
-$inverse-totop-active-color: $inverse-global-emphasis-color !default;
-
-
-
-// @mixin hook-inverse-totop(){}
-// @mixin hook-inverse-totop-hover(){}
-// @mixin hook-inverse-totop-active(){}
diff --git a/docs/_sass/uikit/components/transition.scss b/docs/_sass/uikit/components/transition.scss
deleted file mode 100644
index abcf794e15..0000000000
--- a/docs/_sass/uikit/components/transition.scss
+++ /dev/null
@@ -1,157 +0,0 @@
-// Name: Transition
-// Description: Utilities for transitions
-//
-// Component: `uk-transition-*`
-//
-// Modifiers: `uk-transition-fade`
-// `uk-transition-scale-up`
-// `uk-transition-scale-down`
-// `uk-transition-slide-top-*`
-// `uk-transition-slide-bottom-*`
-// `uk-transition-slide-left-*`
-// `uk-transition-slide-right-*`
-// `uk-transition-opaque`
-// `uk-transition-slow`
-//
-// Sub-objects: `uk-transition-toggle`,
-// `uk-transition-active`
-//
-// States: `uk-active`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$transition-duration: 0.3s !default;
-
-$transition-scale: 1.03 !default;
-
-$transition-slide-small-translate: 10px !default;
-$transition-slide-medium-translate: 50px !default;
-
-$transition-slow-duration: 0.7s !default;
-
-
-/* ========================================================================
- Component: Transition
- ========================================================================== */
-
-
-/* Toggle (Hover + Focus)
- ========================================================================== */
-
-/*
- * 1. Prevent tab highlighting on iOS.
- */
-
-.uk-transition-toggle {
- /* 1 */
- -webkit-tap-highlight-color: transparent;
-}
-
-/*
- * Remove outline for `tabindex`
- */
-
-.uk-transition-toggle:focus { outline: none; }
-
-
-/* Transitions
- ========================================================================== */
-
-/*
- * The toggle is triggered on touch devices by two methods:
- * 1. Using `:focus` and tabindex
- * 2. Using `:hover` and a `touchstart` event listener registered on the document
- * (Doesn't work on Surface touch devices)
- *
- * Note: Transitions don't work with `uk-postion-center-*` classes because they also use `transform`,
- * therefore it's recommended to use an extra `div` for the transition.
- */
-
-.uk-transition-fade,
-[class*='uk-transition-scale'],
-[class*='uk-transition-slide'] {
- transition: $transition-duration ease-out;
- transition-property: opacity, transform, filter;
- opacity: 0;
-}
-
-/*
- * Fade
- */
-
-.uk-transition-toggle:hover .uk-transition-fade,
-.uk-transition-toggle:focus .uk-transition-fade,
-.uk-transition-active.uk-active .uk-transition-fade { opacity: 1; }
-
-/*
- * Scale
- */
-
-.uk-transition-scale-up { transform: scale(1,1); }
-.uk-transition-scale-down { transform: scale($transition-scale,$transition-scale); }
-
-/* Show */
-.uk-transition-toggle:hover .uk-transition-scale-up,
-.uk-transition-toggle:focus .uk-transition-scale-up,
-.uk-transition-active.uk-active .uk-transition-scale-up {
- opacity: 1;
- transform: scale($transition-scale,$transition-scale);
-}
-
-.uk-transition-toggle:hover .uk-transition-scale-down,
-.uk-transition-toggle:focus .uk-transition-scale-down,
-.uk-transition-active.uk-active .uk-transition-scale-down {
- opacity: 1;
- transform: scale(1,1);
-}
-
-/*
- * Slide
- */
-
-.uk-transition-slide-top { transform: translateY(-100%); }
-.uk-transition-slide-bottom { transform: translateY(100%); }
-.uk-transition-slide-left { transform: translateX(-100%); }
-.uk-transition-slide-right { transform: translateX(100%); }
-
-.uk-transition-slide-top-small { transform: translateY(-$transition-slide-small-translate); }
-.uk-transition-slide-bottom-small { transform: translateY($transition-slide-small-translate); }
-.uk-transition-slide-left-small { transform: translateX(-$transition-slide-small-translate); }
-.uk-transition-slide-right-small { transform: translateX($transition-slide-small-translate); }
-
-.uk-transition-slide-top-medium { transform: translateY(-$transition-slide-medium-translate); }
-.uk-transition-slide-bottom-medium { transform: translateY($transition-slide-medium-translate); }
-.uk-transition-slide-left-medium { transform: translateX(-$transition-slide-medium-translate); }
-.uk-transition-slide-right-medium { transform: translateX($transition-slide-medium-translate); }
-
-/* Show */
-.uk-transition-toggle:hover [class*='uk-transition-slide'],
-.uk-transition-toggle:focus [class*='uk-transition-slide'],
-.uk-transition-active.uk-active [class*='uk-transition-slide'] {
- opacity: 1;
- transform: translate(0,0);
-}
-
-
-/* Opacity modifier
- ========================================================================== */
-
-.uk-transition-opaque { opacity: 1; }
-
-
-/* Duration modifiers
- ========================================================================== */
-
-.uk-transition-slow { transition-duration: $transition-slow-duration; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-transition-misc)) {@include hook-transition-misc();}
-
-// @mixin hook-transition-misc(){}
diff --git a/docs/_sass/uikit/components/utility.scss b/docs/_sass/uikit/components/utility.scss
deleted file mode 100644
index beb55562b2..0000000000
--- a/docs/_sass/uikit/components/utility.scss
+++ /dev/null
@@ -1,482 +0,0 @@
-// Name: Utility
-// Description: Utilities collection
-//
-// Component: `uk-panel-*`
-// `uk-clearfix`
-// `uk-float-*`
-// `uk-overflow-*`
-// `uk-resize-*`
-// `uk-display-*`
-// `uk-inline-*`
-// `uk-responsive-*`
-// `uk-preserve-width`
-// `uk-border-*`
-// `uk-box-shadow-*`
-// `uk-box-shadow-bottom`
-// `uk-dropcap`
-// `uk-logo`
-// `uk-blend-*`
-// `uk-transform-*`
-// `uk-transform-origin-*`
-//
-// States: `uk-disabled`
-// `uk-drag`
-// `uk-dragover`
-// `uk-preserve`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$panel-scrollable-height: 170px !default;
-$panel-scrollable-padding: 10px !default;
-$panel-scrollable-border-width: $global-border-width !default;
-$panel-scrollable-border: $global-border !default;
-
-$border-rounded-border-radius: 5px !default;
-
-$box-shadow-duration: 0.1s !default;
-
-$box-shadow-bottom-height: 30px !default;
-$box-shadow-bottom-border-radius: 100% !default;
-$box-shadow-bottom-background: #444 !default;
-$box-shadow-bottom-blur: 20px !default;
-
-$dropcap-margin-right: 10px !default;
-$dropcap-font-size: (($global-line-height * 3) * 1em) !default;
-
-$logo-font-size: $global-large-font-size !default;
-$logo-font-family: $global-font-family !default;
-$logo-color: $global-color !default;
-$logo-hover-color: $global-color !default;
-
-$dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3) !default;
-
-
-/* ========================================================================
- Component: Utility
- ========================================================================== */
-
-
-/* Panel
- ========================================================================== */
-
-.uk-panel {
- display: flow-root;
- position: relative;
- box-sizing: border-box;
-}
-
-/*
- * Remove margin from the last-child
- */
-
-.uk-panel > :last-child { margin-bottom: 0; }
-
-
-/*
- * Scrollable
- */
-
-.uk-panel-scrollable {
- height: $panel-scrollable-height;
- padding: $panel-scrollable-padding;
- border: $panel-scrollable-border-width solid $panel-scrollable-border;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- resize: both;
- @if(mixin-exists(hook-panel-scrollable)) {@include hook-panel-scrollable();}
-}
-
-
-/* Clearfix
- ========================================================================== */
-
-/*
- * 1. `table-cell` is used with `::before` because `table` creates a 1px gap when it becomes a flex item, only in Webkit
- * 2. `table` is used again with `::after` because `clear` only works with block elements.
- * Note: `display: block` with `overflow: hidden` is currently not working in the latest Safari
- */
-
-/* 1 */
-.uk-clearfix::before {
- content: "";
- display: table-cell;
-}
-
-/* 2 */
-.uk-clearfix::after {
- content: "";
- display: table;
- clear: both;
-}
-
-
-/* Float
- ========================================================================== */
-
-/*
- * 1. Prevent content overflow
- */
-
-.uk-float-left { float: left; }
-.uk-float-right { float: right; }
-
-/* 1 */
-[class*='uk-float-'] { max-width: 100%; }
-
-
-/* Overfow
- ========================================================================== */
-
-.uk-overflow-hidden { overflow: hidden; }
-
-/*
- * Enable scrollbars if content is clipped
- * Note: Firefox ignores `padding-bottom` for the scrollable overflow https://bugzilla.mozilla.org/show_bug.cgi?id=748518
- */
-
-.uk-overflow-auto {
- overflow: auto;
- -webkit-overflow-scrolling: touch;
-}
-
-.uk-overflow-auto > :last-child { margin-bottom: 0; }
-
-
-/* Resize
- ========================================================================== */
-
-.uk-resize { resize: both; }
-.uk-resize-vertical { resize: vertical; }
-
-
-/* Display
- ========================================================================== */
-
-.uk-display-block { display: block !important; }
-.uk-display-inline { display: inline !important; }
-.uk-display-inline-block { display: inline-block !important; }
-
-
-/* Inline
- ========================================================================== */
-
-/*
- * 1. Container fits its content
- * 2. Create position context
- * 3. Prevent content overflow
- * 4. Behave like most inline-block elements
- * 5. Force new layer without creating a new stacking context
- * to fix 1px glitch when combined with overlays and transitions in Webkit
- * 6. Clip child elements
- */
-
-[class*='uk-inline'] {
- /* 1 */
- display: inline-block;
- /* 2 */
- position: relative;
- /* 3 */
- max-width: 100%;
- /* 4 */
- vertical-align: middle;
- /* 5 */
- -webkit-backface-visibility: hidden;
-}
-
-.uk-inline-clip {
- /* 6 */
- overflow: hidden;
-}
-
-
-/* Responsive objects
- ========================================================================== */
-
-/*
- * Preserve original dimensions
- * Because `img, `video`, `canvas` and `audio` are already responsive by default, see Base component
- */
-
-.uk-preserve-width,
-.uk-preserve-width canvas,
-.uk-preserve-width img,
-.uk-preserve-width svg,
-.uk-preserve-width video { max-width: none; }
-
-/*
- * Responsiveness
- * Corrects `max-width` and `max-height` behavior if padding and border are used
- */
-
-.uk-responsive-width,
-.uk-responsive-height { box-sizing: border-box; }
-
-/*
- * 1. Set a maximum width. `important` needed to override `uk-preserve-width img`
- * 2. Auto scale the height. Only needed if `height` attribute is present
- */
-
-.uk-responsive-width {
- /* 1 */
- max-width: 100% !important;
- /* 2 */
- height: auto;
-}
-
-/*
- * 1. Set a maximum height. Only works if the parent element has a fixed height
- * 2. Auto scale the width. Only needed if `width` attribute is present
- * 3. Reset max-width, which `img, `video`, `canvas` and `audio` already have by default
- */
-
-.uk-responsive-height {
- /* 1 */
- max-height: 100%;
- /* 2 */
- width: auto;
- /* 3 */
- max-width: none;
-}
-
-
-/* Border
- ========================================================================== */
-
-.uk-border-circle { border-radius: 50%; }
-.uk-border-pill { border-radius: 500px; }
-.uk-border-rounded { border-radius: $border-rounded-border-radius; }
-
-/*
- * Fix `overflow: hidden` to be ignored with border-radius and CSS transforms in Webkit
- */
-
-.uk-inline-clip[class*='uk-border-'] { -webkit-transform: translateZ(0); }
-
-
-/* Box-shadow
- ========================================================================== */
-
-.uk-box-shadow-small { box-shadow: $global-small-box-shadow; }
-.uk-box-shadow-medium { box-shadow: $global-medium-box-shadow; }
-.uk-box-shadow-large { box-shadow: $global-large-box-shadow; }
-.uk-box-shadow-xlarge { box-shadow: $global-xlarge-box-shadow; }
-
-/*
- * Hover
- */
-
-[class*='uk-box-shadow-hover'] { transition: box-shadow $box-shadow-duration ease-in-out; }
-
-.uk-box-shadow-hover-small:hover { box-shadow: $global-small-box-shadow; }
-.uk-box-shadow-hover-medium:hover { box-shadow: $global-medium-box-shadow; }
-.uk-box-shadow-hover-large:hover { box-shadow: $global-large-box-shadow; }
-.uk-box-shadow-hover-xlarge:hover { box-shadow: $global-xlarge-box-shadow; }
-
-
-/* Box-shadow bottom
- ========================================================================== */
-
-/*
- * 1. Set position.
- * 2. Set style
- * 3. Fix shadow being clipped in Safari if container is animated
- */
-
-@supports (filter: blur(0)) {
-
- .uk-box-shadow-bottom {
- display: inline-block;
- position: relative;
- z-index: 0;
- max-width: 100%;
- vertical-align: middle;
- }
-
- .uk-box-shadow-bottom::after {
- content: '';
- /* 1 */
- position: absolute;
- bottom: (-$box-shadow-bottom-height);
- left: 0;
- right: 0;
- z-index: -1;
- /* 2 */
- height: $box-shadow-bottom-height;
- border-radius: $box-shadow-bottom-border-radius;
- background: $box-shadow-bottom-background;
- filter: blur($box-shadow-bottom-blur);
- /* 3 */
- will-change: filter;
- @if(mixin-exists(hook-box-shadow-bottom)) {@include hook-box-shadow-bottom();}
- }
-
-}
-
-
-/* Drop cap
- ========================================================================== */
-
-/*
- * 1. Firefox doesn't apply `::first-letter` if the first letter is inside child elements
- * https://bugzilla.mozilla.org/show_bug.cgi?id=214004
- * 2. In Firefox, a floating `::first-letter` doesn't have a line box and there for no `line-height`
- * https://bugzilla.mozilla.org/show_bug.cgi?id=317933
- * 3. Caused by 1.: Edge creates two nested `::first-letter` containers, one for each selector
- * This doubles the `font-size` exponential when using the `em` unit.
- */
-
-.uk-dropcap::first-letter,
-/* 1 */
-.uk-dropcap > p:first-of-type::first-letter {
- display: block;
- margin-right: $dropcap-margin-right;
- float: left;
- font-size: $dropcap-font-size;
- line-height: 1;
- @if(mixin-exists(hook-dropcap)) {@include hook-dropcap();}
-}
-
-/* 2 */
-@-moz-document url-prefix() {
-
- .uk-dropcap::first-letter,
- .uk-dropcap > p:first-of-type::first-letter { margin-top: 1.1%; }
-
-}
-
-/* 3 */
-@supports (-ms-ime-align: auto) {
-
- .uk-dropcap > p:first-of-type::first-letter { font-size: 1em; }
-
-}
-
-
-/* Logo
- ========================================================================== */
-
-/*
- * 1. Required for `a`
- */
-
-.uk-logo {
- font-size: $logo-font-size;
- font-family: $logo-font-family;
- color: $logo-color;
- /* 1 */
- text-decoration: none;
- @if(mixin-exists(hook-logo)) {@include hook-logo();}
-}
-
-/* Hover + Focus */
-.uk-logo:hover,
-.uk-logo:focus {
- color: $logo-hover-color;
- outline: none;
- /* 1 */
- text-decoration: none;
- @if(mixin-exists(hook-logo-hover)) {@include hook-logo-hover();}
-}
-
-.uk-logo-inverse { display: none; }
-
-
-/* Disabled State
- ========================================================================== */
-
-.uk-disabled { pointer-events: none; }
-
-
-/* Drag State
- ========================================================================== */
-
-/*
- * 1. Needed if moving over elements with have their own cursor on hover, e.g. links or buttons
- * 2. Fix dragging over iframes
- */
-
-.uk-drag,
-/* 1 */
-.uk-drag * { cursor: move; }
-
-/* 2 */
-.uk-drag iframe { pointer-events: none; }
-
-
-/* Dragover State
- ========================================================================== */
-
-/*
- * Create a box-shadow when dragging a file over the upload area
- */
-
-.uk-dragover { box-shadow: $dragover-box-shadow; }
-
-
-/* Blend modes
- ========================================================================== */
-
-.uk-blend-multiply { mix-blend-mode: multiply; }
-.uk-blend-screen { mix-blend-mode: screen; }
-.uk-blend-overlay { mix-blend-mode: overlay; }
-.uk-blend-darken { mix-blend-mode: darken; }
-.uk-blend-lighten { mix-blend-mode: lighten; }
-.uk-blend-color-dodge { mix-blend-mode: color-dodge; }
-.uk-blend-color-burn { mix-blend-mode: color-burn; }
-.uk-blend-hard-light { mix-blend-mode: hard-light; }
-.uk-blend-soft-light { mix-blend-mode: soft-light; }
-.uk-blend-difference { mix-blend-mode: difference; }
-.uk-blend-exclusion { mix-blend-mode: exclusion; }
-.uk-blend-hue { mix-blend-mode: hue; }
-.uk-blend-saturation { mix-blend-mode: saturation; }
-.uk-blend-color { mix-blend-mode: color; }
-.uk-blend-luminosity { mix-blend-mode: luminosity; }
-
-
-/* Transform
-========================================================================== */
-
-.uk-transform-center { transform: translate(-50%, -50%); }
-
-
-/* Transform Origin
-========================================================================== */
-
-.uk-transform-origin-top-left { transform-origin: 0 0; }
-.uk-transform-origin-top-center { transform-origin: 50% 0; }
-.uk-transform-origin-top-right { transform-origin: 100% 0; }
-.uk-transform-origin-center-left { transform-origin: 0 50%; }
-.uk-transform-origin-center-right { transform-origin: 100% 50%; }
-.uk-transform-origin-bottom-left { transform-origin: 0 100%; }
-.uk-transform-origin-bottom-center { transform-origin: 50% 100%; }
-.uk-transform-origin-bottom-right { transform-origin: 100% 100%; }
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-utility-misc)) {@include hook-utility-misc();}
-
-// @mixin hook-panel-scrollable(){}
-// @mixin hook-box-shadow-bottom(){}
-// @mixin hook-dropcap(){}
-// @mixin hook-logo(){}
-// @mixin hook-logo-hover(){}
-// @mixin hook-utility-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-logo-color: $inverse-global-color !default;
-$inverse-logo-hover-color: $inverse-global-color !default;
-
-
-
-// @mixin hook-inverse-dropcap(){}
-// @mixin hook-inverse-logo(){}
-// @mixin hook-inverse-logo-hover(){}
diff --git a/docs/_sass/uikit/components/variables.scss b/docs/_sass/uikit/components/variables.scss
deleted file mode 100644
index 0d3b304e70..0000000000
--- a/docs/_sass/uikit/components/variables.scss
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Component: Variables
-// Description: Defines common values which are used across all components
-//
-// ========================================================================
-
-
-// Load deprecated components
-// ========================================================================
-
-$deprecated: false !default;
-
-
-// Breakpoints
-// ========================================================================
-
-// Phone Portrait: Galaxy (360x640), iPhone 6 (375x667), iPhone 6+ (414x736)
-// Phone Landscape: Galaxy (640x360), iPhone 6 (667x375), iPhone 6+ (736x414)
-// Tablet Portrait: iPad (768x1024), Galaxy Tab (800x1280),
-// Tablet Landscape: iPad (1024x768), iPad Pro (1024x1366),
-// Desktop: Galaxy Tab (1280x800), iPad Pro (1366x1024)
-
-$breakpoint-small: 640px !default; // Phone landscape
-$breakpoint-medium: 960px !default; // Tablet Landscape
-$breakpoint-large: 1200px !default; // Desktop
-$breakpoint-xlarge: 1600px !default; // Large Screens
-
-$breakpoint-xsmall-max: ($breakpoint-small - 1) !default;
-$breakpoint-small-max: ($breakpoint-medium - 1) !default;
-$breakpoint-medium-max: ($breakpoint-large - 1) !default;
-$breakpoint-large-max: ($breakpoint-xlarge - 1) !default;
-
-
-// Global variables
-// ========================================================================
-
-//
-// Typography
-//
-
-$global-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-$global-font-size: 16px !default;
-$global-line-height: 1.5 !default; // 24px
-
-$global-2xlarge-font-size: 2.625rem !default; // 42px
-$global-xlarge-font-size: 2rem !default; // 32px
-$global-large-font-size: 1.5rem !default; // 24px
-$global-medium-font-size: 1.25rem !default; // 20px
-$global-small-font-size: 0.875rem !default; // 14px
-
-//
-// Colors
-//
-
-$global-color: #666 !default;
-$global-emphasis-color: #333 !default;
-$global-muted-color: #999 !default;
-
-$global-link-color: #1e87f0 !default;
-$global-link-hover-color: #0f6ecd !default;
-
-$global-inverse-color: #fff !default;
-
-//
-// Backgrounds
-//
-
-$global-background: #fff !default;
-
-$global-muted-background: #f8f8f8 !default;
-$global-primary-background: #1e87f0 !default;
-$global-secondary-background: #222 !default;
-
-$global-success-background: #32d296 !default;
-$global-warning-background: #faa05a !default;
-$global-danger-background: #f0506e !default;
-
-//
-// Borders
-//
-
-$global-border-width: 1px !default;
-$global-border: #e5e5e5 !default;
-
-//
-// Box-Shadows
-//
-
-$global-small-box-shadow: 0 2px 8px rgba(0,0,0,0.08) !default;
-$global-medium-box-shadow: 0 5px 15px rgba(0,0,0,0.08) !default;
-$global-large-box-shadow: 0 14px 25px rgba(0,0,0,0.16) !default;
-$global-xlarge-box-shadow: 0 28px 50px rgba(0,0,0,0.16) !default;
-
-//
-// Spacings
-//
-
-// Used in margin, section, list
-$global-margin: 20px !default;
-$global-small-margin: 10px !default;
-$global-medium-margin: 40px !default;
-$global-large-margin: 70px !default;
-$global-xlarge-margin: 140px !default;
-
-// Used in grid, column, container, align, card, padding
-$global-gutter: 30px !default;
-$global-small-gutter: 15px !default;
-$global-medium-gutter: 40px !default;
-$global-large-gutter: 70px !default;
-
-//
-// Controls
-//
-
-$global-control-height: 40px !default;
-$global-control-small-height: 30px !default;
-$global-control-large-height: 55px !default;
-
-//
-// Z-index
-//
-
-$global-z-index: 1000 !default;
diff --git a/docs/_sass/uikit/components/visibility.scss b/docs/_sass/uikit/components/visibility.scss
deleted file mode 100644
index 376af51639..0000000000
--- a/docs/_sass/uikit/components/visibility.scss
+++ /dev/null
@@ -1,175 +0,0 @@
-// Name: Visibility
-// Description: Utilities to show or hide content on breakpoints, hover or touch
-//
-// Component: `uk-hidden-*`
-// `uk-visible-*`
-// `uk-invisible`
-// `uk-visible-toggle`
-// `uk-hidden-hover`
-// `uk-invisible-hover`
-// `uk-hidden-touch`
-// `uk-hidden-notouch`
-//
-// ========================================================================
-
-
-/* ========================================================================
- Component: Visibility
- ========================================================================== */
-
-/*
- * Hidden
- * `hidden` attribute also set here to make it stronger
- */
-
-[hidden],
-.uk-hidden { display: none !important; }
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-hidden\@s { display: none !important; }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-hidden\@m { display: none !important; }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-hidden\@l { display: none !important; }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-hidden\@xl { display: none !important; }
-
-}
-
-/*
- * Visible
- */
-
-/* Phone portrait and smaller */
-@media (max-width: $breakpoint-xsmall-max) {
-
- .uk-visible\@s { display: none !important; }
-
-}
-
-/* Phone landscape and smaller */
-@media (max-width: $breakpoint-small-max) {
-
- .uk-visible\@m { display: none !important; }
-
-}
-
-/* Tablet landscape and smaller */
-@media (max-width: $breakpoint-medium-max) {
-
- .uk-visible\@l { display: none !important; }
-
-}
-
-/* Desktop and smaller */
-@media (max-width: $breakpoint-large-max) {
-
- .uk-visible\@xl { display: none !important; }
-
-}
-
-
-/* Visibility
- ========================================================================== */
-
-.uk-invisible { visibility: hidden !important; }
-
-
-/* Toggle (Hover + Focus)
- ========================================================================== */
-
-/*
- * Hidden
- * 1. The toggle is triggered on touch devices using `:focus` and tabindex
- * 2. The target stays visible if any element within receives focus through keyboard
- * Doesn't work in Edge, yet.
- * 3. Can't use `display: none` nor `visibility: hidden` because both are not focusable.
- *
- */
-
-/* 1 + 2 */
-.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) {
- /* 3 */
- position: absolute !important;
- width: 0 !important;
- height: 0 !important;
- padding: 0 !important;
- margin: 0 !important;
- overflow: hidden !important;
-}
-
-/*
- * Invisible
- */
-
-/* 1 + 2 */
-.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) {
- /* 3 */
- opacity: 0 !important;
-}
-
-/*
- * 1. Prevent tab highlighting on iOS.
- */
-
-.uk-visible-toggle {
- /* 1 */
- -webkit-tap-highlight-color: transparent;
-}
-
-/*
- * Remove outline for `tabindex`
- */
-
-.uk-visible-toggle:focus { outline: none; }
-
-
-/* Touch
- ========================================================================== */
-
-/*
- * Hide if primary pointing device has limited accuracy, e.g. a touch screen.
- * Works on mobile browsers: Safari, Chrome and Android browser
- */
-
-@media (pointer: coarse) {
- .uk-hidden-touch { display: none !important; }
-}
-
-/*
- * Hide if primary pointing device is accurate, e.g. mouse.
- * 1. Fallback for IE11 and Firefox, because `pointer` is not supported
- * 2. Reset if supported
- */
-
-/* 1 */
-.uk-hidden-notouch { display: none !important; }
-
-@media (pointer: coarse) {
- .uk-hidden-notouch { display: block !important; }
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-visibility-misc)) {@include hook-visibility-misc();}
-
-// @mixin hook-visibility-misc(){}
diff --git a/docs/_sass/uikit/components/width.scss b/docs/_sass/uikit/components/width.scss
deleted file mode 100644
index 30b873da00..0000000000
--- a/docs/_sass/uikit/components/width.scss
+++ /dev/null
@@ -1,379 +0,0 @@
-// Name: Width
-// Description: Utilities for widths
-//
-// Component: `uk-child-width-*`
-// `uk-width-*`
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$width-small-width: 150px !default;
-$width-medium-width: 300px !default;
-$width-large-width: 450px !default;
-$width-xlarge-width: 600px !default;
-$width-2xlarge-width: 750px !default;
-
-
-/* ========================================================================
- Component: Width
- ========================================================================== */
-
-
-/* Equal child widths
- ========================================================================== */
-
-[class*='uk-child-width'] > * {
- box-sizing: border-box;
- width: 100%;
-}
-
-.uk-child-width-1-2 > * { width: 50%; }
-.uk-child-width-1-3 > * { width: unquote('calc(100% * 1 / 3.001)'); }
-.uk-child-width-1-4 > * { width: 25%; }
-.uk-child-width-1-5 > * { width: 20%; }
-.uk-child-width-1-6 > * { width: unquote('calc(100% * 1 / 6.001)'); }
-
-.uk-child-width-auto > * { width: auto; }
-
-/*
- * 1. Reset the `min-width`, which is set to auto by default, because
- * flex items won't shrink below their minimum intrinsic content size.
- * Using `1px` instead of `0`, so items still wrap into the next line,
- * if they have zero width and padding and the predecessor is 100% wide.
- */
-
-.uk-child-width-expand > :not([class*='uk-width']) {
- flex: 1;
- /* 1 */
- min-width: 1px;
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- .uk-child-width-1-1\@s > * { width: 100%; }
- .uk-child-width-1-2\@s > * { width: 50%; }
- .uk-child-width-1-3\@s > * { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-child-width-1-4\@s > * { width: 25%; }
- .uk-child-width-1-5\@s > * { width: 20%; }
- .uk-child-width-1-6\@s > * { width: unquote('calc(100% * 1 / 6.001)'); }
-
- .uk-child-width-auto\@s > * { width: auto; }
- .uk-child-width-expand\@s > :not([class*='uk-width']) {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- .uk-child-width-1-1\@m > * { width: 100%; }
- .uk-child-width-1-2\@m > * { width: 50%; }
- .uk-child-width-1-3\@m > * { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-child-width-1-4\@m > * { width: 25%; }
- .uk-child-width-1-5\@m > * { width: 20%; }
- .uk-child-width-1-6\@m > * { width: unquote('calc(100% * 1 / 6.001)'); }
-
- .uk-child-width-auto\@m > * { width: auto; }
- .uk-child-width-expand\@m > :not([class*='uk-width']) {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- .uk-child-width-1-1\@l > * { width: 100%; }
- .uk-child-width-1-2\@l > * { width: 50%; }
- .uk-child-width-1-3\@l > * { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-child-width-1-4\@l > * { width: 25%; }
- .uk-child-width-1-5\@l > * { width: 20%; }
- .uk-child-width-1-6\@l > * { width: unquote('calc(100% * 1 / 6.001)'); }
-
- .uk-child-width-auto\@l > * { width: auto; }
- .uk-child-width-expand\@l > :not([class*='uk-width']) {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- .uk-child-width-1-1\@xl > * { width: 100%; }
- .uk-child-width-1-2\@xl > * { width: 50%; }
- .uk-child-width-1-3\@xl > * { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-child-width-1-4\@xl > * { width: 25%; }
- .uk-child-width-1-5\@xl > * { width: 20%; }
- .uk-child-width-1-6\@xl > * { width: unquote('calc(100% * 1 / 6.001)'); }
-
- .uk-child-width-auto\@xl > * { width: auto; }
- .uk-child-width-expand\@xl > :not([class*='uk-width']) {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-
-/* Single Widths
- ========================================================================== */
-
-/*
- * 1. `max-width` is needed for the pixel-based classes
- */
-
-[class*='uk-width'] {
- box-sizing: border-box;
- width: 100%;
- /* 1 */
- max-width: 100%;
-}
-
-/* Halves */
-.uk-width-1-2 { width: 50%; }
-
-/* Thirds */
-.uk-width-1-3 { width: unquote('calc(100% * 1 / 3.001)'); }
-.uk-width-2-3 { width: unquote('calc(100% * 2 / 3.001)'); }
-
-/* Quarters */
-.uk-width-1-4 { width: 25%; }
-.uk-width-3-4 { width: 75%; }
-
-/* Fifths */
-.uk-width-1-5 { width: 20%; }
-.uk-width-2-5 { width: 40%; }
-.uk-width-3-5 { width: 60%; }
-.uk-width-4-5 { width: 80%; }
-
-/* Sixths */
-.uk-width-1-6 { width: unquote('calc(100% * 1 / 6.001)'); }
-.uk-width-5-6 { width: unquote('calc(100% * 5 / 6.001)'); }
-
-/* Pixel */
-.uk-width-small { width: $width-small-width; }
-.uk-width-medium { width: $width-medium-width; }
-.uk-width-large { width: $width-large-width; }
-.uk-width-xlarge { width: $width-xlarge-width; }
-.uk-width-2xlarge { width: $width-2xlarge-width; }
-@if ($deprecated == true) {
-.uk-width-xxlarge { width: $width-2xlarge-width; }
-}
-
-/* Auto */
-.uk-width-auto { width: auto; }
-
-/* Expand */
-.uk-width-expand {
- flex: 1;
- min-width: 1px;
-}
-
-/* Phone landscape and bigger */
-@media (min-width: $breakpoint-small) {
-
- /* Whole */
- .uk-width-1-1\@s { width: 100%; }
-
- /* Halves */
- .uk-width-1-2\@s { width: 50%; }
-
- /* Thirds */
- .uk-width-1-3\@s { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-width-2-3\@s { width: unquote('calc(100% * 2 / 3.001)'); }
-
- /* Quarters */
- .uk-width-1-4\@s { width: 25%; }
- .uk-width-3-4\@s { width: 75%; }
-
- /* Fifths */
- .uk-width-1-5\@s { width: 20%; }
- .uk-width-2-5\@s { width: 40%; }
- .uk-width-3-5\@s { width: 60%; }
- .uk-width-4-5\@s { width: 80%; }
-
- /* Sixths */
- .uk-width-1-6\@s { width: unquote('calc(100% * 1 / 6.001)'); }
- .uk-width-5-6\@s { width: unquote('calc(100% * 5 / 6.001)'); }
-
- /* Pixel */
- .uk-width-small\@s { width: $width-small-width; }
- .uk-width-medium\@s { width: $width-medium-width; }
- .uk-width-large\@s { width: $width-large-width; }
- .uk-width-xlarge\@s { width: $width-xlarge-width; }
- .uk-width-2xlarge\@s { width: $width-2xlarge-width; }
- @if ($deprecated == true) {
-.uk-width-xxlarge\@s { width: $width-2xlarge-width; }
-}
-
- /* Auto */
- .uk-width-auto\@s { width: auto; }
-
- /* Expand */
- .uk-width-expand\@s {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Tablet landscape and bigger */
-@media (min-width: $breakpoint-medium) {
-
- /* Whole */
- .uk-width-1-1\@m { width: 100%; }
-
- /* Halves */
- .uk-width-1-2\@m { width: 50%; }
-
- /* Thirds */
- .uk-width-1-3\@m { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-width-2-3\@m { width: unquote('calc(100% * 2 / 3.001)'); }
-
- /* Quarters */
- .uk-width-1-4\@m { width: 25%; }
- .uk-width-3-4\@m { width: 75%; }
-
- /* Fifths */
- .uk-width-1-5\@m { width: 20%; }
- .uk-width-2-5\@m { width: 40%; }
- .uk-width-3-5\@m { width: 60%; }
- .uk-width-4-5\@m { width: 80%; }
-
- /* Sixths */
- .uk-width-1-6\@m { width: unquote('calc(100% * 1 / 6.001)'); }
- .uk-width-5-6\@m { width: unquote('calc(100% * 5 / 6.001)'); }
-
- /* Pixel */
- .uk-width-small\@m { width: $width-small-width; }
- .uk-width-medium\@m { width: $width-medium-width; }
- .uk-width-large\@m { width: $width-large-width; }
- .uk-width-xlarge\@m { width: $width-xlarge-width; }
- .uk-width-2xlarge\@m { width: $width-2xlarge-width; }
- @if ($deprecated == true) {
-.uk-width-xxlarge\@m { width: $width-2xlarge-width; }
-}
-
- /* Auto */
- .uk-width-auto\@m { width: auto; }
-
- /* Expand */
- .uk-width-expand\@m {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Desktop and bigger */
-@media (min-width: $breakpoint-large) {
-
- /* Whole */
- .uk-width-1-1\@l { width: 100%; }
-
- /* Halves */
- .uk-width-1-2\@l { width: 50%; }
-
- /* Thirds */
- .uk-width-1-3\@l { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-width-2-3\@l { width: unquote('calc(100% * 2 / 3.001)'); }
-
- /* Quarters */
- .uk-width-1-4\@l { width: 25%; }
- .uk-width-3-4\@l { width: 75%; }
-
- /* Fifths */
- .uk-width-1-5\@l { width: 20%; }
- .uk-width-2-5\@l { width: 40%; }
- .uk-width-3-5\@l { width: 60%; }
- .uk-width-4-5\@l { width: 80%; }
-
- /* Sixths */
- .uk-width-1-6\@l { width: unquote('calc(100% * 1 / 6.001)'); }
- .uk-width-5-6\@l { width: unquote('calc(100% * 5 / 6.001)'); }
-
- /* Pixel */
- .uk-width-small\@l { width: $width-small-width; }
- .uk-width-medium\@l { width: $width-medium-width; }
- .uk-width-large\@l { width: $width-large-width; }
- .uk-width-xlarge\@l { width: $width-xlarge-width; }
- .uk-width-2xlarge\@l { width: $width-2xlarge-width; }
- @if ($deprecated == true) {
-.uk-width-xxlarge\@l { width: $width-2xlarge-width; }
-}
-
- /* Auto */
- .uk-width-auto\@l { width: auto; }
-
- /* Expand */
- .uk-width-expand\@l {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-/* Large screen and bigger */
-@media (min-width: $breakpoint-xlarge) {
-
- /* Whole */
- .uk-width-1-1\@xl { width: 100%; }
-
- /* Halves */
- .uk-width-1-2\@xl { width: 50%; }
-
- /* Thirds */
- .uk-width-1-3\@xl { width: unquote('calc(100% * 1 / 3.001)'); }
- .uk-width-2-3\@xl { width: unquote('calc(100% * 2 / 3.001)'); }
-
- /* Quarters */
- .uk-width-1-4\@xl { width: 25%; }
- .uk-width-3-4\@xl { width: 75%; }
-
- /* Fifths */
- .uk-width-1-5\@xl { width: 20%; }
- .uk-width-2-5\@xl { width: 40%; }
- .uk-width-3-5\@xl { width: 60%; }
- .uk-width-4-5\@xl { width: 80%; }
-
- /* Sixths */
- .uk-width-1-6\@xl { width: unquote('calc(100% * 1 / 6.001)'); }
- .uk-width-5-6\@xl { width: unquote('calc(100% * 5 / 6.001)'); }
-
- /* Pixel */
- .uk-width-small\@xl { width: $width-small-width; }
- .uk-width-medium\@xl { width: $width-medium-width; }
- .uk-width-large\@xl { width: $width-large-width; }
- .uk-width-xlarge\@xl { width: $width-xlarge-width; }
- .uk-width-2xlarge\@xl { width: $width-2xlarge-width; }
- @if ($deprecated == true) {
-.uk-width-xxlarge\@xl { width: $width-2xlarge-width; }
-}
-
- /* Auto */
- .uk-width-auto\@xl { width: auto; }
-
- /* Expand */
- .uk-width-expand\@xl {
- flex: 1;
- min-width: 1px;
- }
-
-}
-
-
-// Hooks
-// ========================================================================
-
-@if(mixin-exists(hook-width-misc)) {@include hook-width-misc();}
-
-// @mixin hook-width-misc(){}
diff --git a/docs/_sass/uikit/mixins-theme.scss b/docs/_sass/uikit/mixins-theme.scss
deleted file mode 100644
index 59826ca64f..0000000000
--- a/docs/_sass/uikit/mixins-theme.scss
+++ /dev/null
@@ -1,2204 +0,0 @@
-@mixin hook-accordion(){}
-@mixin hook-accordion-item(){}
-@mixin hook-accordion-title(){
-
- overflow: hidden;
-
- &::before {
- content: "";
- width: ($accordion-title-line-height * 1em);
- height: ($accordion-title-line-height * 1em);
- margin-left: $accordion-icon-margin-left;
- float: right;
- @include svg-fill($internal-accordion-close-image, "#000", $accordion-icon-color);
- background-repeat: no-repeat;
- background-position: 50% 50%;
- }
-
- .uk-open > &::before { @include svg-fill($internal-accordion-open-image, "#000", $accordion-icon-color); }
-
-}
-@mixin hook-accordion-title-hover(){}
-@mixin hook-accordion-content(){}
-@mixin hook-accordion-misc(){}
-@mixin hook-inverse-accordion-item(){}
-@mixin hook-inverse-accordion-title(){}
-@mixin hook-inverse-accordion-title-hover(){}
-@mixin hook-inverse-component-accordion(){
-
- .uk-accordion-title::before { @include svg-fill($internal-accordion-close-image, "#000", $inverse-global-color); }
-
- .uk-open > .uk-accordion-title::before { @include svg-fill($internal-accordion-open-image, "#000", $inverse-global-color); }
-
-}
-@mixin hook-alert(){}
-@mixin hook-alert-close(){
- color: inherit;
- opacity: $alert-close-opacity;
-}
-@mixin hook-alert-close-hover(){
- color: inherit;
- opacity: $alert-close-hover-opacity;
-}
-@mixin hook-alert-primary(){}
-@mixin hook-alert-success(){}
-@mixin hook-alert-warning(){}
-@mixin hook-alert-danger(){}
-@mixin hook-alert-misc(){
-
- /*
- * Content
- */
-
- .uk-alert h1,
- .uk-alert h2,
- .uk-alert h3,
- .uk-alert h4,
- .uk-alert h5,
- .uk-alert h6 { color: inherit; }
-
- .uk-alert a:not([class]) {
- color: inherit;
- text-decoration: underline;
- }
-
- .uk-alert a:not([class]):hover {
- color: inherit;
- text-decoration: underline;
- }
-
-}
-@mixin hook-align-misc(){}
-@mixin hook-animation-misc(){}
-@mixin hook-article(){}
-@mixin hook-article-adjacent(){}
-@mixin hook-article-title(){}
-@mixin hook-article-meta(){
-
- a { color: $article-meta-link-color; }
-
- a:hover {
- color: $article-meta-link-hover-color;
- text-decoration: none;
- }
-
-}
-@mixin hook-article-misc(){}
-@mixin hook-inverse-article-title(){}
-@mixin hook-inverse-article-meta(){}
-@mixin hook-inverse-component-article(){
-
- .uk-article-title {
- @if(mixin-exists(hook-inverse-article-title)) {@include hook-inverse-article-title();}
- }
-
- .uk-article-meta {
- color: $inverse-article-meta-color;
- @if(mixin-exists(hook-inverse-article-meta)) {@include hook-inverse-article-meta();}
- }
-
-}
-@mixin hook-background-misc(){}
-@mixin hook-badge(){}
-@mixin hook-badge-hover(){}
-@mixin hook-badge-misc(){}
-@mixin hook-inverse-badge(){}
-@mixin hook-inverse-badge-hover(){}
-@mixin hook-inverse-component-badge(){
-
- .uk-badge {
- background-color: $inverse-badge-background;
- color: $inverse-badge-color !important;
- @if(mixin-exists(hook-inverse-badge)) {@include hook-inverse-badge();}
- }
-
- .uk-badge:hover,
- .uk-badge:focus {
- @if(mixin-exists(hook-inverse-badge-hover)) {@include hook-inverse-badge-hover();}
- }
-
-}
-@mixin hook-base-body(){}
-@mixin hook-base-link(){}
-@mixin hook-base-link-hover(){}
-@mixin hook-base-code(){
- padding: $base-code-padding-vertical $base-code-padding-horizontal;
- background: $base-code-background;
-}
-@mixin hook-base-heading(){}
-@mixin hook-base-h1(){}
-@mixin hook-base-h2(){}
-@mixin hook-base-h3(){}
-@mixin hook-base-h4(){}
-@mixin hook-base-h5(){}
-@mixin hook-base-h6(){}
-@mixin hook-base-hr(){}
-@mixin hook-base-blockquote(){
- color: $base-blockquote-color;
-}
-@mixin hook-base-blockquote-footer(){
-
- color: $base-blockquote-footer-color;
-
- &::before { content: "— "; }
-
-}
-@mixin hook-base-pre(){
- padding: $base-pre-padding;
- border: $base-pre-border-width solid $base-pre-border;
- border-radius: $base-pre-border-radius;
- background: $base-pre-background;
-}
-@mixin hook-base-misc(){}
-@mixin hook-inverse-base-link(){}
-@mixin hook-inverse-base-link-hover(){}
-@mixin hook-inverse-base-code(){
- background: $inverse-global-muted-background;
-}
-@mixin hook-inverse-base-heading(){}
-@mixin hook-inverse-base-h1(){}
-@mixin hook-inverse-base-h2(){}
-@mixin hook-inverse-base-h3(){}
-@mixin hook-inverse-base-h4(){}
-@mixin hook-inverse-base-h5(){}
-@mixin hook-inverse-base-h6(){}
-@mixin hook-inverse-base-blockquote(){ color: $inverse-base-blockquote-color; }
-@mixin hook-inverse-base-blockquote-footer(){ color: $inverse-base-blockquote-footer-color; }
-@mixin hook-inverse-base-hr(){}
-@mixin hook-inverse-component-base(){
-
- color: $inverse-base-color;
-
- // Base
- // ========================================================================
-
- //
- // Link
- //
-
- a,
- .uk-link {
- color: $inverse-base-link-color;
- @if(mixin-exists(hook-inverse-base-link)) {@include hook-inverse-base-link();}
- }
-
- a:hover,
- .uk-link:hover,
- .uk-link-toggle:hover .uk-link,
- .uk-link-toggle:focus .uk-link {
- color: $inverse-base-link-hover-color;
- @if(mixin-exists(hook-inverse-base-link-hover)) {@include hook-inverse-base-link-hover();}
- }
-
- //
- // Code
- //
-
- :not(pre) > code,
- :not(pre) > kbd,
- :not(pre) > samp {
- color: $inverse-base-code-color;
- @if(mixin-exists(hook-inverse-base-code)) {@include hook-inverse-base-code();}
- }
-
- //
- // Emphasize
- //
-
- em { color: $inverse-base-em-color; }
-
- //
- // Headings
- //
-
- h1, .uk-h1,
- h2, .uk-h2,
- h3, .uk-h3,
- h4, .uk-h4,
- h5, .uk-h5,
- h6, .uk-h6,
- .uk-heading-small,
- .uk-heading-medium,
- .uk-heading-large,
- .uk-heading-xlarge,
- .uk-heading-2xlarge {
- color: $inverse-base-heading-color;
- @if(mixin-exists(hook-inverse-base-heading)) {@include hook-inverse-base-heading();}
- }
-
- h1, .uk-h1 {
- @if(mixin-exists(hook-inverse-base-h1)) {@include hook-inverse-base-h1();}
- }
-
- h2, .uk-h2 {
- @if(mixin-exists(hook-inverse-base-h2)) {@include hook-inverse-base-h2();}
- }
-
- h3, .uk-h3 {
- @if(mixin-exists(hook-inverse-base-h3)) {@include hook-inverse-base-h3();}
- }
-
- h4, .uk-h4 {
- @if(mixin-exists(hook-inverse-base-h4)) {@include hook-inverse-base-h4();}
- }
-
- h5, .uk-h5 {
- @if(mixin-exists(hook-inverse-base-h5)) {@include hook-inverse-base-h5();}
- }
-
- h6, .uk-h6 {
- @if(mixin-exists(hook-inverse-base-h6)) {@include hook-inverse-base-h6();}
- }
-
- //
- // Blockquotes
- //
-
- blockquote {
- @if(mixin-exists(hook-inverse-base-blockquote)) {@include hook-inverse-base-blockquote();}
- }
-
- blockquote footer {
- @if(mixin-exists(hook-inverse-base-blockquote-footer)) {@include hook-inverse-base-blockquote-footer();}
- }
-
- //
- // Horizontal rules
- //
-
- hr, .uk-hr {
- border-top-color: $inverse-base-hr-border;
- @if(mixin-exists(hook-inverse-base-hr)) {@include hook-inverse-base-hr();}
- }
-
-}
-@mixin hook-breadcrumb(){}
-@mixin hook-breadcrumb-item(){}
-@mixin hook-breadcrumb-item-hover(){}
-@mixin hook-breadcrumb-item-disabled(){}
-@mixin hook-breadcrumb-item-active(){}
-@mixin hook-breadcrumb-divider(){}
-@mixin hook-breadcrumb-misc(){}
-@mixin hook-inverse-breadcrumb-item(){}
-@mixin hook-inverse-breadcrumb-item-hover(){}
-@mixin hook-inverse-breadcrumb-item-disabled(){}
-@mixin hook-inverse-breadcrumb-item-active(){}
-@mixin hook-inverse-breadcrumb-divider(){}
-@mixin hook-inverse-component-breadcrumb(){
-
- .uk-breadcrumb > * > * {
- color: $inverse-breadcrumb-item-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item)) {@include hook-inverse-breadcrumb-item();}
- }
-
- .uk-breadcrumb > * > :hover,
- .uk-breadcrumb > * > :focus {
- color: $inverse-breadcrumb-item-hover-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item-hover)) {@include hook-inverse-breadcrumb-item-hover();}
- }
-
-
- .uk-breadcrumb > .uk-disabled > * {
- @if(mixin-exists(hook-inverse-breadcrumb-item-disabled)) {@include hook-inverse-breadcrumb-item-disabled();}
- }
-
- .uk-breadcrumb > :last-child > * {
- color: $inverse-breadcrumb-item-active-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item-active)) {@include hook-inverse-breadcrumb-item-active();}
- }
-
- //
- // Divider
- //
-
- .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before {
- color: $inverse-breadcrumb-divider-color;
- @if(mixin-exists(hook-inverse-breadcrumb-divider)) {@include hook-inverse-breadcrumb-divider();}
- }
-
-}
-@mixin hook-button(){
- text-transform: $button-text-transform;
- transition: 0.1s ease-in-out;
- transition-property: color, background-color, border-color;
-}
-@mixin hook-button-hover(){}
-@mixin hook-button-focus(){}
-@mixin hook-button-active(){}
-@mixin hook-button-default(){ border: $button-border-width solid $button-default-border; }
-@mixin hook-button-default-hover(){ border-color: $button-default-hover-border; }
-@mixin hook-button-default-active(){ border-color: $button-default-active-border; }
-@mixin hook-button-primary(){ border: $button-border-width solid transparent; }
-@mixin hook-button-primary-hover(){}
-@mixin hook-button-primary-active(){}
-@mixin hook-button-secondary(){ border: $button-border-width solid transparent; }
-@mixin hook-button-secondary-hover(){}
-@mixin hook-button-secondary-active(){}
-@mixin hook-button-danger(){ border: $button-border-width solid transparent; }
-@mixin hook-button-danger-hover(){}
-@mixin hook-button-danger-active(){}
-@mixin hook-button-disabled(){ border-color: $button-disabled-border; }
-@mixin hook-button-small(){}
-@mixin hook-button-large(){}
-@mixin hook-button-text(){
-
- position: relative;
-
- &::before {
- content: "";
- position: absolute;
- bottom: 0;
- left: 0;
- right: 100%;
- border-bottom: $button-text-border-width solid $button-text-border;
- transition: right 0.3s ease-out;
- }
-
-}
-@mixin hook-button-text-hover(){
-
- &::before { right: 0; }
-
-}
-@mixin hook-button-text-disabled(){
-
- &::before { display: none; }
-
-}
-@mixin hook-button-link(){}
-@mixin hook-button-misc(){
-
- /* Group
- ========================================================================== */
-
- /*
- * Collapse border
- */
-
- .uk-button-group > .uk-button:nth-child(n+2),
- .uk-button-group > div:nth-child(n+2) .uk-button { margin-left: (-$button-border-width); }
-
- /*
- * Create position context to superimpose the successor elements border
- * Known issue: If you use an `a` element as button and an icon inside,
- * the active state will not work if you click the icon inside the button
- * Workaround: Just use a `button` or `input` element as button
- */
-
- .uk-button-group .uk-button:hover,
- .uk-button-group .uk-button:focus,
- .uk-button-group .uk-button:active,
- .uk-button-group .uk-button.uk-active {
- position: relative;
- z-index: 1;
- }
-
-}
-@mixin hook-inverse-button-default(){ border-color: $inverse-global-color; }
-@mixin hook-inverse-button-default-hover(){ border-color: $inverse-global-emphasis-color; }
-@mixin hook-inverse-button-default-active(){ border-color: $inverse-global-emphasis-color; }
-@mixin hook-inverse-button-primary(){}
-@mixin hook-inverse-button-primary-hover(){}
-@mixin hook-inverse-button-primary-active(){}
-@mixin hook-inverse-button-secondary(){}
-@mixin hook-inverse-button-secondary-hover(){}
-@mixin hook-inverse-button-secondary-active(){}
-@mixin hook-inverse-button-text(){
- &::before { border-bottom-color: $inverse-global-emphasis-color; }
-}
-@mixin hook-inverse-button-text-hover(){}
-@mixin hook-inverse-button-text-disabled(){}
-@mixin hook-inverse-button-link(){}
-@mixin hook-inverse-component-button(){
-
- //
- // Default
- //
-
- .uk-button-default {
- background-color: $inverse-button-default-background;
- color: $inverse-button-default-color;
- @if(mixin-exists(hook-inverse-button-default)) {@include hook-inverse-button-default();}
- }
-
- .uk-button-default:hover,
- .uk-button-default:focus {
- background-color: $inverse-button-default-hover-background;
- color: $inverse-button-default-hover-color;
- @if(mixin-exists(hook-inverse-button-default-hover)) {@include hook-inverse-button-default-hover();}
- }
-
- .uk-button-default:active,
- .uk-button-default.uk-active {
- background-color: $inverse-button-default-active-background;
- color: $inverse-button-default-active-color;
- @if(mixin-exists(hook-inverse-button-default-active)) {@include hook-inverse-button-default-active();}
- }
-
- //
- // Primary
- //
-
- .uk-button-primary {
- background-color: $inverse-button-primary-background;
- color: $inverse-button-primary-color;
- @if(mixin-exists(hook-inverse-button-primary)) {@include hook-inverse-button-primary();}
- }
-
- .uk-button-primary:hover,
- .uk-button-primary:focus {
- background-color: $inverse-button-primary-hover-background;
- color: $inverse-button-primary-hover-color;
- @if(mixin-exists(hook-inverse-button-primary-hover)) {@include hook-inverse-button-primary-hover();}
- }
-
- .uk-button-primary:active,
- .uk-button-primary.uk-active {
- background-color: $inverse-button-primary-active-background;
- color: $inverse-button-primary-active-color;
- @if(mixin-exists(hook-inverse-button-primary-active)) {@include hook-inverse-button-primary-active();}
- }
-
- //
- // Secondary
- //
-
- .uk-button-secondary {
- background-color: $inverse-button-secondary-background;
- color: $inverse-button-secondary-color;
- @if(mixin-exists(hook-inverse-button-secondary)) {@include hook-inverse-button-secondary();}
- }
-
- .uk-button-secondary:hover,
- .uk-button-secondary:focus {
- background-color: $inverse-button-secondary-hover-background;
- color: $inverse-button-secondary-hover-color;
- @if(mixin-exists(hook-inverse-button-secondary-hover)) {@include hook-inverse-button-secondary-hover();}
- }
-
- .uk-button-secondary:active,
- .uk-button-secondary.uk-active {
- background-color: $inverse-button-secondary-active-background;
- color: $inverse-button-secondary-active-color;
- @if(mixin-exists(hook-inverse-button-secondary-active)) {@include hook-inverse-button-secondary-active();}
- }
-
- //
- // Text
- //
-
- .uk-button-text {
- color: $inverse-button-text-color;
- @if(mixin-exists(hook-inverse-button-text)) {@include hook-inverse-button-text();}
- }
-
- .uk-button-text:hover,
- .uk-button-text:focus {
- color: $inverse-button-text-hover-color;
- @if(mixin-exists(hook-inverse-button-text-hover)) {@include hook-inverse-button-text-hover();}
- }
-
- .uk-button-text:disabled {
- color: $inverse-button-text-disabled-color;
- @if(mixin-exists(hook-inverse-button-text-disabled)) {@include hook-inverse-button-text-disabled();}
- }
-
- //
- // Link
- //
-
- .uk-button-link {
- color: $inverse-button-link-color;
- @if(mixin-exists(hook-inverse-button-link)) {@include hook-inverse-button-link();}
- }
-
- .uk-button-link:hover,
- .uk-button-link:focus { color: $inverse-button-link-hover-color; }
-
-
-}
-@mixin hook-card(){ transition: box-shadow 0.1s ease-in-out; }
-@mixin hook-card-body(){}
-@mixin hook-card-header(){}
-@mixin hook-card-footer(){}
-@mixin hook-card-media(){}
-@mixin hook-card-media-top(){}
-@mixin hook-card-media-bottom(){}
-@mixin hook-card-media-left(){}
-@mixin hook-card-media-right(){}
-@mixin hook-card-title(){}
-@mixin hook-card-badge(){
- border-radius: $card-badge-border-radius;
- text-transform: $card-badge-text-transform;
-}
-@mixin hook-card-hover(){ box-shadow: $card-hover-box-shadow; }
-@mixin hook-card-default(){ box-shadow: $card-default-box-shadow; }
-@mixin hook-card-default-title(){}
-@mixin hook-card-default-hover(){ box-shadow: $card-default-hover-box-shadow; }
-@mixin hook-card-default-header(){ border-bottom: $card-default-header-border-width solid $card-default-header-border; }
-@mixin hook-card-default-footer(){ border-top: $card-default-footer-border-width solid $card-default-footer-border; }
-@mixin hook-card-primary(){ box-shadow: $card-primary-box-shadow; }
-@mixin hook-card-primary-title(){}
-@mixin hook-card-primary-hover(){ box-shadow: $card-primary-hover-box-shadow; }
-@mixin hook-card-secondary(){ box-shadow: $card-secondary-box-shadow; }
-@mixin hook-card-secondary-title(){}
-@mixin hook-card-secondary-hover(){ box-shadow: $card-secondary-hover-box-shadow; }
-@mixin hook-card-misc(){
-
- /*
- * Default
- */
-
- .uk-card-body > .uk-nav-default {
- margin-left: (-$card-body-padding-horizontal);
- margin-right: (-$card-body-padding-horizontal);
- }
- .uk-card-body > .uk-nav-default:only-child {
- margin-top: (-$card-body-padding-vertical + 15px);
- margin-bottom: (-$card-body-padding-vertical + 15px);
- }
-
- .uk-card-body > .uk-nav-default > li > a,
- .uk-card-body > .uk-nav-default .uk-nav-header,
- .uk-card-body > .uk-nav-default .uk-nav-divider {
- padding-left: $card-body-padding-horizontal;
- padding-right: $card-body-padding-horizontal;
- }
-
- .uk-card-body > .uk-nav-default .uk-nav-sub { padding-left: $nav-sublist-deeper-padding-left + $card-body-padding-horizontal; }
-
-
- /* Desktop and bigger */
- @media (min-width: $breakpoint-large) {
-
- .uk-card-body > .uk-nav-default {
- margin-left: (-$card-body-padding-horizontal-l);
- margin-right: (-$card-body-padding-horizontal-l);
- }
- .uk-card-body > .uk-nav-default:only-child {
- margin-top: (-$card-body-padding-vertical-l + 15px);
- margin-bottom: (-$card-body-padding-vertical-l + 15px);
- }
-
- .uk-card-body > .uk-nav-default > li > a,
- .uk-card-body > .uk-nav-default .uk-nav-header,
- .uk-card-body > .uk-nav-default .uk-nav-divider {
- padding-left: $card-body-padding-horizontal-l;
- padding-right: $card-body-padding-horizontal-l;
- }
-
- .uk-card-body > .uk-nav-default .uk-nav-sub { padding-left: $nav-sublist-deeper-padding-left + $card-body-padding-horizontal-l; }
-
- }
-
- /*
- * Small
- */
-
- .uk-card-small > .uk-nav-default {
- margin-left: (-$card-small-body-padding-horizontal);
- margin-right: (-$card-small-body-padding-horizontal);
- }
- .uk-card-small > .uk-nav-default:only-child {
- margin-top: (-$card-small-body-padding-vertical + 15px);
- margin-bottom: (-$card-small-body-padding-vertical + 15px);
- }
-
- .uk-card-small > .uk-nav-default > li > a,
- .uk-card-small > .uk-nav-default .uk-nav-header,
- .uk-card-small > .uk-nav-default .uk-nav-divider {
- padding-left: $card-small-body-padding-horizontal;
- padding-right: $card-small-body-padding-horizontal;
- }
-
- .uk-card-small > .uk-nav-default .uk-nav-sub { padding-left: $nav-sublist-deeper-padding-left + $card-small-body-padding-horizontal; }
-
- /*
- * Large
- */
-
- /* Desktop and bigger */
- @media (min-width: $breakpoint-large) {
-
- .uk-card-large > .uk-nav-default { margin: 0; }
- .uk-card-large > .uk-nav-default:only-child { margin: 0; }
-
- .uk-card-large > .uk-nav-default > li > a,
- .uk-card-large > .uk-nav-default .uk-nav-header,
- .uk-card-large > .uk-nav-default .uk-nav-divider {
- padding-left: 0;
- padding-right: 0;
- }
-
- .uk-card-large > .uk-nav-default .uk-nav-sub { padding-left: $nav-sublist-deeper-padding-left; }
-
- }
-
-}
-@mixin hook-inverse-card-badge(){}
-@mixin hook-inverse-component-card(){
-
- &.uk-card-badge {
- background-color: $inverse-card-badge-background;
- color: $inverse-card-badge-color;
- @if(mixin-exists(hook-inverse-card-badge)) {@include hook-inverse-card-badge();}
- }
-
-}
-@mixin hook-close(){
- transition: 0.1s ease-in-out;
- transition-property: color, opacity;
-}
-@mixin hook-close-hover(){}
-@mixin hook-close-misc(){}
-@mixin hook-inverse-close(){}
-@mixin hook-inverse-close-hover(){}
-@mixin hook-inverse-component-close(){
-
- .uk-close {
- color: $inverse-close-color;
- @if(mixin-exists(hook-inverse-close)) {@include hook-inverse-close();}
- }
-
- .uk-close:hover,
- .uk-close:focus {
- color: $inverse-close-hover-color;
- @if(mixin-exists(hook-inverse-close-hover)) {@include hook-inverse-close-hover();}
- }
-
-}
-@mixin hook-column-misc(){}
-@mixin hook-inverse-component-column(){
-
- .uk-column-divider { column-rule-color: $inverse-column-divider-rule-color; }
-
-}
-@mixin hook-comment(){}
-@mixin hook-comment-body(){}
-@mixin hook-comment-header(){}
-@mixin hook-comment-title(){}
-@mixin hook-comment-meta(){}
-@mixin hook-comment-avatar(){}
-@mixin hook-comment-list-adjacent(){}
-@mixin hook-comment-list-sub(){}
-@mixin hook-comment-list-sub-adjacent(){}
-@mixin hook-comment-primary(){
- padding: $comment-primary-padding;
- background-color: $comment-primary-background;
-}
-@mixin hook-comment-misc(){}
-@mixin hook-container-misc(){}
-@mixin hook-countdown(){}
-@mixin hook-countdown-item(){}
-@mixin hook-countdown-number(){}
-@mixin hook-countdown-separator(){}
-@mixin hook-countdown-label(){}
-@mixin hook-countdown-misc(){}
-@mixin hook-inverse-countdown-item(){}
-@mixin hook-inverse-countdown-number(){}
-@mixin hook-inverse-countdown-separator(){}
-@mixin hook-inverse-countdown-label(){}
-@mixin hook-inverse-component-countdown(){
-
- .uk-countdown-number,
- .uk-countdown-separator {
- @if(mixin-exists(hook-inverse-countdown-item)) {@include hook-inverse-countdown-item();}
- }
-
- .uk-countdown-number {
- @if(mixin-exists(hook-inverse-countdown-number)) {@include hook-inverse-countdown-number();}
- }
-
- .uk-countdown-separator {
- @if(mixin-exists(hook-inverse-countdown-separator)) {@include hook-inverse-countdown-separator();}
- }
-
- .uk-countdown-label {
- @if(mixin-exists(hook-inverse-countdown-label)) {@include hook-inverse-countdown-label();}
- }
-
-}
-@mixin hook-cover-misc(){}
-@mixin hook-description-list-term(){
- font-size: $description-list-term-font-size;
- font-weight: $description-list-term-font-weight;
- text-transform: $description-list-term-text-transform;
-}
-@mixin hook-description-list-description(){}
-@mixin hook-description-list-divider-term(){}
-@mixin hook-description-list-misc(){}
-@mixin svg-fill($src, $color-default, $color-new, $property: background-image){
-
- $escape-color-default: escape($color-default) !default;
- $escape-color-new: escape("#{$color-new}") !default;
-
- $data-uri: data-uri('image/svg+xml;charset=UTF-8', "#{$src}") !default;
- $replace-src: replace("#{$data-uri}", "#{$escape-color-default}", "#{$escape-color-new}", "g") !default;
-
- #{$property}: unquote($replace-src);
-}
-@mixin hook-divider-icon(){}
-@mixin hook-divider-icon-line(){}
-@mixin hook-divider-icon-line-left(){}
-@mixin hook-divider-icon-line-right(){}
-@mixin hook-divider-small(){}
-@mixin hook-divider-vertical(){}
-@mixin hook-divider-misc(){}
-@mixin hook-inverse-divider-icon(){}
-@mixin hook-inverse-divider-icon-line(){}
-@mixin hook-inverse-divider-small(){}
-@mixin hook-inverse-divider-vertical(){}
-@mixin hook-inverse-component-divider(){
-
- .uk-divider-icon {
- @include svg-fill($internal-divider-icon-image, "#000", $inverse-divider-icon-color);
- @if(mixin-exists(hook-inverse-divider-icon)) {@include hook-inverse-divider-icon();}
- }
-
- .uk-divider-icon::before,
- .uk-divider-icon::after {
- border-bottom-color: $inverse-divider-icon-line-border;
- @if(mixin-exists(hook-inverse-divider-icon-line)) {@include hook-inverse-divider-icon-line();}
- }
-
- .uk-divider-small::after {
- border-top-color: $inverse-divider-small-border;
- @if(mixin-exists(hook-inverse-divider-small)) {@include hook-inverse-divider-small();}
- }
-
- .uk-divider-vertical {
- border-left-color: $inverse-divider-vertical-border;
- @if(mixin-exists(hook-inverse-divider-vertical)) {@include hook-inverse-divider-vertical();}
- }
-
-}
-@mixin hook-dotnav(){}
-@mixin hook-dotnav-item(){
- border: $dotnav-item-border-width solid $dotnav-item-border;
- transition: 0.2s ease-in-out;
- transition-property: background-color, border-color;
-}
-@mixin hook-dotnav-item-hover(){ border-color: $dotnav-item-hover-border; }
-@mixin hook-dotnav-item-onclick(){ border-color: $dotnav-item-onclick-border; }
-@mixin hook-dotnav-item-active(){ border-color: $dotnav-item-active-border; }
-@mixin hook-dotnav-misc(){}
-@mixin hook-inverse-dotnav-item(){ border-color: rgba($inverse-global-color, 0.9); }
-@mixin hook-inverse-dotnav-item-hover(){ border-color: transparent; }
-@mixin hook-inverse-dotnav-item-onclick(){ border-color: transparent; }
-@mixin hook-inverse-dotnav-item-active(){ border-color: transparent; }
-@mixin hook-inverse-component-dotnav(){
-
- .uk-dotnav > * > * {
- background-color: $inverse-dotnav-item-background;
- @if(mixin-exists(hook-inverse-dotnav-item)) {@include hook-inverse-dotnav-item();}
- }
-
- .uk-dotnav > * > :hover,
- .uk-dotnav > * > :focus {
- background-color: $inverse-dotnav-item-hover-background;
- @if(mixin-exists(hook-inverse-dotnav-item-hover)) {@include hook-inverse-dotnav-item-hover();}
- }
-
- .uk-dotnav > * > :active {
- background-color: $inverse-dotnav-item-onclick-background;
- @if(mixin-exists(hook-inverse-dotnav-item-onclick)) {@include hook-inverse-dotnav-item-onclick();}
- }
-
- .uk-dotnav > .uk-active > * {
- background-color: $inverse-dotnav-item-active-background;
- @if(mixin-exists(hook-inverse-dotnav-item-active)) {@include hook-inverse-dotnav-item-active();}
- }
-
-}
-@mixin hook-drop-misc(){}
-@mixin hook-dropdown(){ box-shadow: $dropdown-box-shadow; }
-@mixin hook-dropdown-nav(){ font-size: $dropdown-nav-font-size; }
-@mixin hook-dropdown-nav-item(){}
-@mixin hook-dropdown-nav-item-hover(){}
-@mixin hook-dropdown-nav-header(){}
-@mixin hook-dropdown-nav-divider(){}
-@mixin hook-dropdown-misc(){}
-@mixin hook-flex-misc(){}
-@mixin hook-form-range(){}
-@mixin hook-form-range-thumb(){ border: $form-range-thumb-border-width solid $form-range-thumb-border; }
-@mixin hook-form-range-track(){ border-radius: $form-range-track-border-radius; }
-@mixin hook-form-range-track-focus(){}
-@mixin hook-form-range-misc(){}
-@mixin hook-form(){
- border: $form-border-width solid $form-border;
- transition: 0.2s ease-in-out;
- transition-property: color, background-color, border;
-}
-@mixin hook-form-single-line(){}
-@mixin hook-form-multi-line(){}
-@mixin hook-form-focus(){ border-color: $form-focus-border; }
-@mixin hook-form-disabled(){ border-color: $form-disabled-border; }
-@mixin hook-form-danger(){ border-color: $form-danger-border; }
-@mixin hook-form-success(){ border-color: $form-success-border; }
-@mixin hook-form-blank(){ border-color: transparent; }
-@mixin hook-form-blank-focus(){
- border-color: $form-blank-focus-border;
- border-style: $form-blank-focus-border-style;
-}
-@mixin hook-form-radio(){
- border: $form-radio-border-width solid $form-radio-border;
- transition: 0.2s ease-in-out;
- transition-property: background-color, border;
-}
-@mixin hook-form-radio-focus(){ border-color: $form-radio-focus-border; }
-@mixin hook-form-radio-checked(){ border-color: $form-radio-checked-border; }
-@mixin hook-form-radio-checked-focus(){}
-@mixin hook-form-radio-disabled(){ border-color: $form-radio-disabled-border; }
-@mixin hook-form-legend(){}
-@mixin hook-form-label(){
- color: $form-label-color;
- font-size: $form-label-font-size;
-}
-@mixin hook-form-stacked-label(){}
-@mixin hook-form-horizontal-label(){}
-@mixin hook-form-misc(){}
-@mixin hook-inverse-form(){ border-color: $inverse-global-border; }
-@mixin hook-inverse-form-focus(){ border-color: $inverse-global-color; }
-@mixin hook-inverse-form-radio(){ border-color: $inverse-global-border; }
-@mixin hook-inverse-form-radio-focus(){ border-color: $inverse-global-color; }
-@mixin hook-inverse-form-radio-checked(){ border-color: $inverse-global-color; }
-@mixin hook-inverse-form-radio-checked-focus(){}
-@mixin hook-inverse-form-label(){ color: $inverse-form-label-color; }
-@mixin hook-inverse-component-form(){
-
- .uk-input,
- .uk-select,
- .uk-textarea {
- background-color: $inverse-form-background;
- color: $inverse-form-color;
- background-clip: padding-box;
- @if(mixin-exists(hook-inverse-form)) {@include hook-inverse-form();}
-
- &:focus {
- background-color: $inverse-form-focus-background;
- color: $inverse-form-focus-color;
- @if(mixin-exists(hook-inverse-form-focus)) {@include hook-inverse-form-focus();}
- }
- }
-
- //
- // Placeholder
- //
-
- .uk-input::-ms-input-placeholder { color: $inverse-form-placeholder-color !important; }
- .uk-input::placeholder { color: $inverse-form-placeholder-color; }
-
- .uk-textarea::-ms-input-placeholder { color: $inverse-form-placeholder-color !important; }
- .uk-textarea::placeholder { color: $inverse-form-placeholder-color; }
-
- //
- // Select
- //
-
- .uk-select:not([multiple]):not([size]) { @include svg-fill($internal-form-select-image, "#000", $inverse-form-select-icon-color); }
-
- //
- // Datalist
- //
-
- .uk-input[list]:hover,
- .uk-input[list]:focus { @include svg-fill($internal-form-datalist-image, "#000", $inverse-form-datalist-icon-color); }
-
- //
- // Radio and checkbox
- //
-
- .uk-radio,
- .uk-checkbox {
- background-color: $inverse-form-radio-background;
- @if(mixin-exists(hook-inverse-form-radio)) {@include hook-inverse-form-radio();}
- }
-
- // Focus
- .uk-radio:focus,
- .uk-checkbox:focus {
- background-color: $inverse-form-radio-focus-background;
- @if(mixin-exists(hook-inverse-form-radio-focus)) {@include hook-inverse-form-radio-focus();}
- }
-
- // Checked
- .uk-radio:checked,
- .uk-checkbox:checked,
- .uk-checkbox:indeterminate {
- background-color: $inverse-form-radio-checked-background;
- @if(mixin-exists(hook-inverse-form-radio-checked)) {@include hook-inverse-form-radio-checked();}
- }
-
- // Focus
- .uk-radio:checked:focus,
- .uk-checkbox:checked:focus,
- .uk-checkbox:indeterminate:focus {
- background-color: $inverse-form-radio-checked-focus-background;
- @if(mixin-exists(hook-inverse-form-radio-checked-focus)) {@include hook-inverse-form-radio-checked-focus();}
- }
-
- // Icon
- .uk-radio:checked { @include svg-fill($internal-form-radio-image, "#000", $inverse-form-radio-checked-icon-color); }
- .uk-checkbox:checked { @include svg-fill($internal-form-checkbox-image, "#000", $inverse-form-radio-checked-icon-color); }
- .uk-checkbox:indeterminate { @include svg-fill($internal-form-checkbox-indeterminate-image, "#000", $inverse-form-radio-checked-icon-color); }
-
- // Label
- .uk-form-label {
- @if(mixin-exists(hook-inverse-form-label)) {@include hook-inverse-form-label();}
- }
-
- // Icon
- .uk-form-icon { color: $inverse-form-icon-color; }
- .uk-form-icon:hover { color: $inverse-form-icon-hover-color; }
-
-}
-@mixin hook-grid-divider-horizontal(){}
-@mixin hook-grid-divider-vertical(){}
-@mixin hook-grid-misc(){}
-@mixin hook-inverse-grid-divider-horizontal(){}
-@mixin hook-inverse-grid-divider-vertical(){}
-@mixin hook-inverse-component-grid(){
-
- .uk-grid-divider > :not(.uk-first-column)::before {
- border-left-color: $inverse-grid-divider-border;
- @if(mixin-exists(hook-inverse-grid-divider-horizontal)) {@include hook-inverse-grid-divider-horizontal();}
- }
-
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
- border-top-color: $inverse-grid-divider-border;
- @if(mixin-exists(hook-inverse-grid-divider-vertical)) {@include hook-inverse-grid-divider-vertical();}
- }
-
-}
-@mixin hook-heading-small(){}
-@mixin hook-heading-medium(){}
-@mixin hook-heading-large(){}
-@mixin hook-heading-xlarge(){}
-@mixin hook-heading-2xlarge(){}
-@mixin hook-heading-primary(){}
-@mixin hook-heading-hero(){}
-@mixin hook-heading-divider(){}
-@mixin hook-heading-bullet(){}
-@mixin hook-heading-line(){}
-@mixin hook-heading-misc(){}
-@mixin hook-inverse-heading-small(){}
-@mixin hook-inverse-heading-medium(){}
-@mixin hook-inverse-heading-large(){}
-@mixin hook-inverse-heading-xlarge(){}
-@mixin hook-inverse-heading-2xlarge(){}
-@mixin hook-inverse-heading-primary(){}
-@mixin hook-inverse-heading-hero(){}
-@mixin hook-inverse-heading-divider(){}
-@mixin hook-inverse-heading-bullet(){}
-@mixin hook-inverse-heading-line(){}
-@mixin hook-inverse-component-heading(){
-
- .uk-heading-small {
- @if(mixin-exists(hook-inverse-heading-small)) {@include hook-inverse-heading-small();}
- }
-
- .uk-heading-medium {
- @if(mixin-exists(hook-inverse-heading-medium)) {@include hook-inverse-heading-medium();}
- }
-
- .uk-heading-large {
- @if(mixin-exists(hook-inverse-heading-large)) {@include hook-inverse-heading-large();}
- }
-
- .uk-heading-xlarge {
- @if(mixin-exists(hook-inverse-heading-xlarge)) {@include hook-inverse-heading-xlarge();}
- }
-
- .uk-heading-2xlarge {
- @if(mixin-exists(hook-inverse-heading-2xlarge)) {@include hook-inverse-heading-2xlarge();}
- }
-
- @if ($deprecated == true) { .uk-heading-primary { @if (mixin-exists(hook-inverse-heading-primary)) {@include hook-inverse-heading-primary();}}}
-
- @if ($deprecated == true) { .uk-heading-hero { @if (mixin-exists(hook-inverse-heading-hero)) {@include hook-inverse-heading-hero();}}}
-
- .uk-heading-divider {
- border-bottom-color: $inverse-heading-divider-border;
- @if(mixin-exists(hook-inverse-heading-divider)) {@include hook-inverse-heading-divider();}
- }
-
- .uk-heading-bullet::before {
- border-left-color: $inverse-heading-bullet-border;
- @if(mixin-exists(hook-inverse-heading-bullet)) {@include hook-inverse-heading-bullet();}
- }
-
- .uk-heading-line > ::before,
- .uk-heading-line > ::after {
- border-bottom-color: $inverse-heading-line-border;
- @if(mixin-exists(hook-inverse-heading-line)) {@include hook-inverse-heading-line();}
- }
-
-}
-@mixin hook-height-misc(){}
-@mixin hook-icon-link(){}
-@mixin hook-icon-link-hover(){}
-@mixin hook-icon-link-active(){}
-@mixin hook-icon-button(){
- transition: 0.1s ease-in-out;
- transition-property: color, background-color;
-}
-@mixin hook-icon-button-hover(){}
-@mixin hook-icon-button-active(){}
-@mixin hook-icon-misc(){}
-@mixin hook-inverse-icon-link(){}
-@mixin hook-inverse-icon-link-hover(){}
-@mixin hook-inverse-icon-link-active(){}
-@mixin hook-inverse-icon-button(){}
-@mixin hook-inverse-icon-button-hover(){}
-@mixin hook-inverse-icon-button-active(){}
-@mixin hook-inverse-component-icon(){
-
- //
- // Link
- //
-
- .uk-icon-link {
- color: $inverse-icon-link-color;
- @if(mixin-exists(hook-inverse-icon-link)) {@include hook-inverse-icon-link();}
- }
-
- .uk-icon-link:hover,
- .uk-icon-link:focus {
- color: $inverse-icon-link-hover-color;
- @if(mixin-exists(hook-inverse-icon-link-hover)) {@include hook-inverse-icon-link-hover();}
- }
-
- .uk-icon-link:active,
- .uk-active > .uk-icon-link {
- color: $inverse-icon-link-active-color;
- @if(mixin-exists(hook-inverse-icon-link-active)) {@include hook-inverse-icon-link-active();}
- }
-
- //
- // Button
- //
-
- .uk-icon-button {
- background-color: $inverse-icon-button-background;
- color: $inverse-icon-button-color;
- @if(mixin-exists(hook-inverse-icon-button)) {@include hook-inverse-icon-button();}
- }
-
- .uk-icon-button:hover,
- .uk-icon-button:focus {
- background-color: $inverse-icon-button-hover-background;
- color: $inverse-icon-button-hover-color;
- @if(mixin-exists(hook-inverse-icon-button-hover)) {@include hook-inverse-icon-button-hover();}
- }
-
- .uk-icon-button:active {
- background-color: $inverse-icon-button-active-background;
- color: $inverse-icon-button-active-color;
- @if(mixin-exists(hook-inverse-icon-button-active)) {@include hook-inverse-icon-button-active();}
- }
-
-}
-@mixin hook-iconnav(){}
-@mixin hook-iconnav-item(){
- font-size: $subnav-item-font-size;
- transition: 0.1s ease-in-out;
- transition-property: color, background-color;
-}
-@mixin hook-iconnav-item-hover(){}
-@mixin hook-iconnav-item-active(){}
-@mixin hook-iconnav-misc(){}
-@mixin hook-inverse-iconnav-item(){}
-@mixin hook-inverse-iconnav-item-hover(){}
-@mixin hook-inverse-iconnav-item-active(){}
-@mixin hook-inverse-component-iconnav(){
-
- .uk-iconnav > * > a {
- color: $inverse-iconnav-item-color;
- @if(mixin-exists(hook-inverse-iconnav-item)) {@include hook-inverse-iconnav-item();}
- }
-
- .uk-iconnav > * > a:hover,
- .uk-iconnav > * > a:focus {
- color: $inverse-iconnav-item-hover-color;
- @if(mixin-exists(hook-inverse-iconnav-item-hover)) {@include hook-inverse-iconnav-item-hover();}
- }
-
- .uk-iconnav > .uk-active > a {
- color: $inverse-iconnav-item-active-color;
- @if(mixin-exists(hook-inverse-iconnav-item-active)) {@include hook-inverse-iconnav-item-active();}
- }
-
-}
-@mixin hook-inverse-component-link(){
-
- a.uk-link-muted,
- .uk-link-muted a {
- color: $inverse-link-muted-color;
- @if(mixin-exists(hook-inverse-link-muted)) {@include hook-inverse-link-muted();}
- }
-
- a.uk-link-muted:hover,
- .uk-link-muted a:hover,
- .uk-link-toggle:hover .uk-link-muted,
- .uk-link-toggle:focus .uk-link-muted {
- color: $inverse-link-muted-hover-color;
- @if(mixin-exists(hook-inverse-link-muted-hover)) {@include hook-inverse-link-muted-hover();}
- }
-
- a.uk-link-text:hover,
- .uk-link-text a:hover,
- .uk-link-toggle:hover .uk-link-text,
- .uk-link-toggle:focus .uk-link-text {
- color: $inverse-link-text-hover-color;
- @if(mixin-exists(hook-inverse-link-text-hover)) {@include hook-inverse-link-text-hover();}
- }
-
- a.uk-link-heading:hover,
- .uk-link-heading a:hover,
- .uk-link-toggle:hover .uk-link-heading,
- .uk-link-toggle:focus .uk-link-heading {
- color: $inverse-link-heading-hover-color;
- @if(mixin-exists(hook-inverse-link-heading-hover)) {@include hook-inverse-link-heading-hover();}
- }
-
-}
-@mixin hook-inverse-component-list(){
-
- .uk-list-muted > ::before { color: $inverse-list-muted-color !important; }
- .uk-list-emphasis > ::before { color: $inverse-list-emphasis-color !important; }
- .uk-list-primary > ::before { color: $inverse-list-primary-color !important; }
- .uk-list-secondary > ::before { color: $inverse-list-secondary-color !important; }
-
- .uk-list-bullet > ::before {
- @include svg-fill($internal-list-bullet-image, "#000", $inverse-list-bullet-icon-color);
- }
-
- .uk-list-divider > :nth-child(n+2) {
- border-top-color: $inverse-list-divider-border;
- @if(mixin-exists(hook-inverse-list-divider)) {@include hook-inverse-list-divider();}
- }
-
- .uk-list-striped > * {
- @if(mixin-exists(hook-inverse-list-striped)) {@include hook-inverse-list-striped();}
- }
-
- .uk-list-striped > :nth-of-type(odd) { background-color: $inverse-list-striped-background; }
-
-}
-@mixin hook-inverse-component-totop(){
-
- .uk-totop {
- color: $inverse-totop-color;
- @if(mixin-exists(hook-inverse-totop)) {@include hook-inverse-totop();}
- }
-
- .uk-totop:hover,
- .uk-totop:focus {
- color: $inverse-totop-hover-color;
- @if(mixin-exists(hook-inverse-totop-hover)) {@include hook-inverse-totop-hover();}
- }
-
- .uk-totop:active {
- color: $inverse-totop-active-color;
- @if(mixin-exists(hook-inverse-totop-active)) {@include hook-inverse-totop-active();}
- }
-
-}
-@mixin hook-inverse-component-label(){
-
- .uk-label {
- background-color: $inverse-label-background;
- color: $inverse-label-color;
- @if(mixin-exists(hook-inverse-label)) {@include hook-inverse-label();}
- }
-
-}
-@mixin hook-inverse-component-search(){
-
- //
- // Input
- //
-
- .uk-search-input { color: $inverse-search-color; }
-
- .uk-search-input:-ms-input-placeholder { color: $inverse-search-placeholder-color !important; }
- .uk-search-input::placeholder { color: $inverse-search-placeholder-color; }
-
-
- //
- // Icon
- //
-
- .uk-search .uk-search-icon { color: $inverse-search-icon-color; }
- .uk-search .uk-search-icon:hover { color: $inverse-search-icon-color; }
-
- //
- // Style modifier
- //
-
- .uk-search-default .uk-search-input {
- background-color: $inverse-search-default-background;
- @if(mixin-exists(hook-inverse-search-default-input)) {@include hook-inverse-search-default-input();}
- }
-
- .uk-search-default .uk-search-input:focus {
- background-color: $inverse-search-default-focus-background;
- @if(mixin-exists(hook-inverse-search-default-input-focus)) {@include hook-inverse-search-default-input-focus();}
- }
-
- .uk-search-navbar .uk-search-input {
- background-color: $inverse-search-navbar-background;
- @if(mixin-exists(hook-inverse-search-navbar-input)) {@include hook-inverse-search-navbar-input();}
- }
-
- .uk-search-large .uk-search-input {
- background-color: $inverse-search-large-background;
- @if(mixin-exists(hook-inverse-search-large-input)) {@include hook-inverse-search-large-input();}
- }
-
- //
- // Toggle
- //
-
- .uk-search-toggle {
- color: $inverse-search-toggle-color;
- @if(mixin-exists(hook-inverse-search-toggle)) {@include hook-inverse-search-toggle();}
- }
-
- .uk-search-toggle:hover,
- .uk-search-toggle:focus {
- color: $inverse-search-toggle-hover-color;
- @if(mixin-exists(hook-inverse-search-toggle-hover)) {@include hook-inverse-search-toggle-hover();}
- }
-
-}
-@mixin hook-inverse-component-nav(){
-
- //
- // Parent icon modifier
- //
-
- .uk-nav-parent-icon > .uk-parent > a::after {
- @include svg-fill($internal-nav-parent-close-image, "#000", $inverse-nav-parent-icon-color);
- @if(mixin-exists(hook-inverse-nav-parent-icon)) {@include hook-inverse-nav-parent-icon();}
- }
-
- .uk-nav-parent-icon > .uk-parent.uk-open > a::after { @include svg-fill($internal-nav-parent-open-image, "#000", $inverse-nav-parent-icon-color); }
-
- //
- // Default
- //
-
- .uk-nav-default > li > a {
- color: $inverse-nav-default-item-color;
- @if(mixin-exists(hook-inverse-nav-default-item)) {@include hook-inverse-nav-default-item();}
- }
-
- .uk-nav-default > li > a:hover,
- .uk-nav-default > li > a:focus {
- color: $inverse-nav-default-item-hover-color;
- @if(mixin-exists(hook-inverse-nav-default-item-hover)) {@include hook-inverse-nav-default-item-hover();}
- }
-
- .uk-nav-default > li.uk-active > a {
- color: $inverse-nav-default-item-active-color;
- @if(mixin-exists(hook-inverse-nav-default-item-active)) {@include hook-inverse-nav-default-item-active();}
- }
-
- .uk-nav-default .uk-nav-header {
- color: $inverse-nav-default-header-color;
- @if(mixin-exists(hook-inverse-nav-default-header)) {@include hook-inverse-nav-default-header();}
- }
-
- .uk-nav-default .uk-nav-divider {
- border-top-color: $inverse-nav-default-divider-border;
- @if(mixin-exists(hook-inverse-nav-default-divider)) {@include hook-inverse-nav-default-divider();}
- }
-
- .uk-nav-default .uk-nav-sub a { color: $inverse-nav-default-sublist-item-color; }
-
- .uk-nav-default .uk-nav-sub a:hover,
- .uk-nav-default .uk-nav-sub a:focus { color: $inverse-nav-default-sublist-item-hover-color; }
-
- .uk-nav-default .uk-nav-sub li.uk-active > a { color: $inverse-nav-default-sublist-item-active-color; }
-
- //
- // Primary
- //
-
- .uk-nav-primary > li > a {
- color: $inverse-nav-primary-item-color;
- @if(mixin-exists(hook-inverse-nav-primary-item)) {@include hook-inverse-nav-primary-item();}
- }
-
- .uk-nav-primary > li > a:hover,
- .uk-nav-primary > li > a:focus {
- color: $inverse-nav-primary-item-hover-color;
- @if(mixin-exists(hook-inverse-nav-primary-item-hover)) {@include hook-inverse-nav-primary-item-hover();}
- }
-
- .uk-nav-primary > li.uk-active > a {
- color: $inverse-nav-primary-item-active-color;
- @if(mixin-exists(hook-inverse-nav-primary-item-active)) {@include hook-inverse-nav-primary-item-active();}
- }
-
- .uk-nav-primary .uk-nav-header {
- color: $inverse-nav-primary-header-color;
- @if(mixin-exists(hook-inverse-nav-primary-header)) {@include hook-inverse-nav-primary-header();}
- }
-
- .uk-nav-primary .uk-nav-divider {
- border-top-color: $inverse-nav-primary-divider-border;
- @if(mixin-exists(hook-inverse-nav-primary-divider)) {@include hook-inverse-nav-primary-divider();}
- }
-
- .uk-nav-primary .uk-nav-sub a { color: $inverse-nav-primary-sublist-item-color; }
-
- .uk-nav-primary .uk-nav-sub a:hover,
- .uk-nav-primary .uk-nav-sub a:focus { color: $inverse-nav-primary-sublist-item-hover-color; }
-
- .uk-nav-primary .uk-nav-sub li.uk-active > a { color: $inverse-nav-primary-sublist-item-active-color; }
-
- //
- // Dividers
- //
-
- .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
- border-top-color: $inverse-nav-dividers-border;
- @if(mixin-exists(hook-nav-dividers)) {@include hook-nav-dividers();}
- }
-
-}
-@mixin hook-inverse-component-navbar(){
-
- .uk-navbar-nav > li > a {
- color: $inverse-navbar-nav-item-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item)) {@include hook-inverse-navbar-nav-item();}
- }
-
- .uk-navbar-nav > li:hover > a,
- .uk-navbar-nav > li > a:focus,
- .uk-navbar-nav > li > a.uk-open {
- color: $inverse-navbar-nav-item-hover-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-hover)) {@include hook-inverse-navbar-nav-item-hover();}
- }
-
- .uk-navbar-nav > li > a:active {
- color: $inverse-navbar-nav-item-onclick-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-onclick)) {@include hook-inverse-navbar-nav-item-onclick();}
- }
-
- .uk-navbar-nav > li.uk-active > a {
- color: $inverse-navbar-nav-item-active-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-active)) {@include hook-inverse-navbar-nav-item-active();}
- }
-
- .uk-navbar-item {
- color: $inverse-navbar-item-color;
- @if(mixin-exists(hook-inverse-navbar-item)) {@include hook-inverse-navbar-item();}
- }
-
- .uk-navbar-toggle {
- color: $inverse-navbar-toggle-color;
- @if(mixin-exists(hook-inverse-navbar-toggle)) {@include hook-inverse-navbar-toggle();}
- }
-
- .uk-navbar-toggle:hover,
- .uk-navbar-toggle:focus,
- .uk-navbar-toggle.uk-open {
- color: $inverse-navbar-toggle-hover-color;
- @if(mixin-exists(hook-inverse-navbar-toggle-hover)) {@include hook-inverse-navbar-toggle-hover();}
- }
-
-}
-@mixin hook-inverse-component-subnav(){
-
- .uk-subnav > * > :first-child {
- color: $inverse-subnav-item-color;
- @if(mixin-exists(hook-inverse-subnav-item)) {@include hook-inverse-subnav-item();}
- }
-
- .uk-subnav > * > a:hover,
- .uk-subnav > * > a:focus {
- color: $inverse-subnav-item-hover-color;
- @if(mixin-exists(hook-inverse-subnav-item-hover)) {@include hook-inverse-subnav-item-hover();}
- }
-
- .uk-subnav > .uk-active > a {
- color: $inverse-subnav-item-active-color;
- @if(mixin-exists(hook-inverse-subnav-item-active)) {@include hook-inverse-subnav-item-active();}
- }
-
- //
- // Divider
- //
-
- .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before {
- border-left-color: $inverse-subnav-divider-border;
- @if(mixin-exists(hook-inverse-subnav-divider)) {@include hook-inverse-subnav-divider();}
- }
-
- //
- // Pill
- //
-
- .uk-subnav-pill > * > :first-child {
- background-color: $inverse-subnav-pill-item-background;
- color: $inverse-subnav-pill-item-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item)) {@include hook-inverse-subnav-pill-item();}
- }
-
- .uk-subnav-pill > * > a:hover,
- .uk-subnav-pill > * > a:focus {
- background-color: $inverse-subnav-pill-item-hover-background;
- color: $inverse-subnav-pill-item-hover-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-hover)) {@include hook-inverse-subnav-pill-item-hover();}
- }
-
- .uk-subnav-pill > * > a:active {
- background-color: $inverse-subnav-pill-item-onclick-background;
- color: $inverse-subnav-pill-item-onclick-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-onclick)) {@include hook-inverse-subnav-pill-item-onclick();}
- }
-
- .uk-subnav-pill > .uk-active > a {
- background-color: $inverse-subnav-pill-item-active-background;
- color: $inverse-subnav-pill-item-active-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-active)) {@include hook-inverse-subnav-pill-item-active();}
- }
-
- //
- // Disabled
- //
-
- .uk-subnav > .uk-disabled > a {
- color: $inverse-subnav-item-disabled-color;
- @if(mixin-exists(hook-inverse-subnav-item-disabled)) {@include hook-inverse-subnav-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-pagination(){
-
- .uk-pagination > * > * {
- color: $inverse-pagination-item-color;
- @if(mixin-exists(hook-inverse-pagination-item)) {@include hook-inverse-pagination-item();}
- }
-
- .uk-pagination > * > :hover,
- .uk-pagination > * > :focus {
- color: $inverse-pagination-item-hover-color;
- @if(mixin-exists(hook-inverse-pagination-item-hover)) {@include hook-inverse-pagination-item-hover();}
- }
-
- .uk-pagination > .uk-active > * {
- color: $inverse-pagination-item-active-color;
- @if(mixin-exists(hook-inverse-pagination-item-active)) {@include hook-inverse-pagination-item-active();}
- }
-
- .uk-pagination > .uk-disabled > * {
- color: $inverse-pagination-item-disabled-color;
- @if(mixin-exists(hook-inverse-pagination-item-disabled)) {@include hook-inverse-pagination-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-tab(){
-
- .uk-tab {
- @if(mixin-exists(hook-inverse-tab)) {@include hook-inverse-tab();}
- }
-
- .uk-tab > * > a {
- color: $inverse-tab-item-color;
- @if(mixin-exists(hook-inverse-tab-item)) {@include hook-inverse-tab-item();}
- }
-
- .uk-tab > * > a:hover,
- .uk-tab > * > a:focus{
- color: $inverse-tab-item-hover-color;
- @if(mixin-exists(hook-inverse-tab-item-hover)) {@include hook-inverse-tab-item-hover();}
- }
-
- .uk-tab > .uk-active > a {
- color: $inverse-tab-item-active-color;
- @if(mixin-exists(hook-inverse-tab-item-active)) {@include hook-inverse-tab-item-active();}
- }
-
- .uk-tab > .uk-disabled > a {
- color: $inverse-tab-item-disabled-color;
- @if(mixin-exists(hook-inverse-tab-item-disabled)) {@include hook-inverse-tab-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-slidenav(){
-
- .uk-slidenav {
- color: $inverse-slidenav-color;
- @if(mixin-exists(hook-inverse-slidenav)) {@include hook-inverse-slidenav();}
- }
-
- .uk-slidenav:hover,
- .uk-slidenav:focus {
- color: $inverse-slidenav-hover-color;
- @if(mixin-exists(hook-inverse-slidenav-hover)) {@include hook-inverse-slidenav-hover();}
- }
-
- .uk-slidenav:active {
- color: $inverse-slidenav-active-color;
- @if(mixin-exists(hook-inverse-slidenav-active)) {@include hook-inverse-slidenav-active();}
- }
-
-}
-@mixin hook-inverse-component-text(){
-
- .uk-text-lead {
- color: $inverse-text-lead-color;
- @if(mixin-exists(hook-inverse-text-lead)) {@include hook-inverse-text-lead();}
- }
-
- .uk-text-meta {
- color: $inverse-text-meta-color;
- @if(mixin-exists(hook-inverse-text-meta)) {@include hook-inverse-text-meta();}
- }
-
- .uk-text-muted { color: $inverse-text-muted-color !important; }
- .uk-text-emphasis { color: $inverse-text-emphasis-color !important; }
- .uk-text-primary { color: $inverse-text-primary-color !important; }
- .uk-text-secondary { color: $inverse-text-secondary-color !important; }
-
-}
-@mixin hook-inverse-component-utility(){
-
- .uk-dropcap::first-letter,
- .uk-dropcap p:first-of-type::first-letter {
- @if(mixin-exists(hook-inverse-dropcap)) {@include hook-inverse-dropcap();}
- }
-
- .uk-logo {
- color: $inverse-logo-color;
- @if(mixin-exists(hook-inverse-logo)) {@include hook-inverse-logo();}
- }
-
- .uk-logo:hover,
- .uk-logo:focus {
- color: $inverse-logo-hover-color;
- @if(mixin-exists(hook-inverse-logo-hover)) {@include hook-inverse-logo-hover();}
- }
-
- .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
- .uk-logo-inverse { display: inline; }
-
-}
-@mixin hook-inverse(){
- @include hook-inverse-component-base();
- @include hook-inverse-component-link();
- @include hook-inverse-component-heading();
- @include hook-inverse-component-divider();
- @include hook-inverse-component-list();
- @include hook-inverse-component-icon();
- @include hook-inverse-component-form();
- @include hook-inverse-component-button();
- @include hook-inverse-component-grid();
- @include hook-inverse-component-close();
- @include hook-inverse-component-totop();
- @include hook-inverse-component-badge();
- @include hook-inverse-component-label();
- @include hook-inverse-component-article();
- @include hook-inverse-component-search();
- @include hook-inverse-component-nav();
- @include hook-inverse-component-navbar();
- @include hook-inverse-component-subnav();
- @include hook-inverse-component-breadcrumb();
- @include hook-inverse-component-pagination();
- @include hook-inverse-component-tab();
- @include hook-inverse-component-slidenav();
- @include hook-inverse-component-dotnav();
- @include hook-inverse-component-accordion();
- @include hook-inverse-component-iconnav();
- @include hook-inverse-component-text();
- @include hook-inverse-component-column();
- @include hook-inverse-component-utility();
-}
-@mixin hook-label(){
- border-radius: $label-border-radius;
- text-transform: $label-text-transform;
-}
-@mixin hook-label-success(){}
-@mixin hook-label-warning(){}
-@mixin hook-label-danger(){}
-@mixin hook-label-misc(){}
-@mixin hook-inverse-label(){}
-@mixin hook-leader(){}
-@mixin hook-leader-misc(){}
-@mixin hook-inverse-leader(){}
-@mixin hook-inverse-component-leader(){
-
- .uk-leader-fill::after {
- @if(mixin-exists(hook-inverse-leader)) {@include hook-inverse-leader();}
- }
-
-}
-@mixin hook-lightbox(){}
-@mixin hook-lightbox-item(){}
-@mixin hook-lightbox-toolbar(){}
-@mixin hook-lightbox-toolbar-icon(){}
-@mixin hook-lightbox-toolbar-icon-hover(){}
-@mixin hook-lightbox-button(){}
-@mixin hook-lightbox-button-hover(){}
-@mixin hook-lightbox-button-active(){}
-@mixin hook-lightbox-misc(){}
-@mixin hook-link-muted(){}
-@mixin hook-link-muted-hover(){}
-@mixin hook-link-text(){}
-@mixin hook-link-text-hover(){}
-@mixin hook-link-heading(){}
-@mixin hook-link-heading-hover(){}
-@mixin hook-link-reset(){}
-@mixin hook-link-misc(){}
-@mixin hook-inverse-link-muted(){}
-@mixin hook-inverse-link-muted-hover(){}
-@mixin hook-inverse-link-text-hover(){}
-@mixin hook-inverse-link-heading-hover(){}
-@mixin hook-list-divider(){}
-@mixin hook-list-striped(){
-
- &:nth-of-type(odd) {
- border-top: $list-striped-border-width solid $list-striped-border;
- border-bottom: $list-striped-border-width solid $list-striped-border;
- }
-
-}
-@mixin hook-list-misc(){}
-@mixin hook-inverse-list-divider(){}
-@mixin hook-inverse-list-striped(){
-
- &:nth-of-type(odd) {
- border-top-color: $inverse-global-border;
- border-bottom-color: $inverse-global-border;
- }
-
-}
-@mixin hook-margin-misc(){}
-@mixin hook-marker(){
- border-radius: 500px;
-}
-@mixin hook-marker-hover(){}
-@mixin hook-marker-misc(){}
-@mixin hook-inverse-marker(){}
-@mixin hook-inverse-marker-hover(){}
-@mixin hook-inverse-component-marker(){
-
- .uk-marker {
- background: $inverse-marker-background;
- color: $inverse-marker-color;
- @if(mixin-exists(hook-inverse-marker)) {@include hook-inverse-marker();}
- }
-
- .uk-marker:hover,
- .uk-marker:focus {
- color: $inverse-marker-hover-color;
- @if(mixin-exists(hook-inverse-marker-hover)) {@include hook-inverse-marker-hover();}
- }
-
-}
-@mixin hook-modal(){}
-@mixin hook-modal-dialog(){}
-@mixin hook-modal-full(){}
-@mixin hook-modal-body(){}
-@mixin hook-modal-header(){ border-bottom: $modal-header-border-width solid $modal-header-border; }
-@mixin hook-modal-footer(){ border-top: $modal-footer-border-width solid $modal-footer-border; }
-@mixin hook-modal-title(){}
-@mixin hook-modal-close(){}
-@mixin hook-modal-close-hover(){}
-@mixin hook-modal-close-default(){}
-@mixin hook-modal-close-default-hover(){}
-@mixin hook-modal-close-outside(){}
-@mixin hook-modal-close-outside-hover(){}
-@mixin hook-modal-close-full(){
- top: 0;
- right: 0;
- padding: $modal-close-full-padding;
- background: $modal-close-full-background;
-}
-@mixin hook-modal-close-full-hover(){}
-@mixin hook-modal-misc(){}
-@mixin hook-nav-sub(){}
-@mixin hook-nav-parent-icon(){}
-@mixin hook-nav-header(){}
-@mixin hook-nav-divider(){}
-@mixin hook-nav-default(){ font-size: $nav-default-font-size; }
-@mixin hook-nav-default-item(){}
-@mixin hook-nav-default-item-hover(){}
-@mixin hook-nav-default-item-active(){}
-@mixin hook-nav-default-header(){}
-@mixin hook-nav-default-divider(){}
-@mixin hook-nav-primary(){}
-@mixin hook-nav-primary-item(){}
-@mixin hook-nav-primary-item-hover(){}
-@mixin hook-nav-primary-item-active(){}
-@mixin hook-nav-primary-header(){}
-@mixin hook-nav-primary-divider(){}
-@mixin hook-nav-dividers(){}
-@mixin hook-nav-misc(){}
-@mixin hook-inverse-nav-parent-icon(){}
-@mixin hook-inverse-nav-default-item(){}
-@mixin hook-inverse-nav-default-item-hover(){}
-@mixin hook-inverse-nav-default-item-active(){}
-@mixin hook-inverse-nav-default-header(){}
-@mixin hook-inverse-nav-default-divider(){}
-@mixin hook-inverse-nav-primary-item(){}
-@mixin hook-inverse-nav-primary-item-hover(){}
-@mixin hook-inverse-nav-primary-item-active(){}
-@mixin hook-inverse-nav-primary-header(){}
-@mixin hook-inverse-nav-primary-divider(){}
-@mixin hook-navbar(){}
-@mixin hook-navbar-container(){}
-@mixin hook-navbar-nav-item(){
- text-transform: $navbar-nav-item-text-transform;
- transition: 0.1s ease-in-out;
- transition-property: color, background-color;
-}
-@mixin hook-navbar-nav-item-hover(){}
-@mixin hook-navbar-nav-item-onclick(){}
-@mixin hook-navbar-nav-item-active(){}
-@mixin hook-navbar-item(){}
-@mixin hook-navbar-toggle(){}
-@mixin hook-navbar-toggle-hover(){}
-@mixin hook-navbar-toggle-icon(){}
-@mixin hook-navbar-toggle-icon-hover(){}
-@mixin hook-navbar-subtitle(){}
-@mixin hook-navbar-primary(){}
-@mixin hook-navbar-transparent(){}
-@mixin hook-navbar-sticky(){}
-@mixin hook-navbar-dropdown(){ box-shadow: $navbar-dropdown-box-shadow; }
-@mixin hook-navbar-dropdown-dropbar(){ box-shadow: none; }
-@mixin hook-navbar-dropdown-nav(){ font-size: $navbar-dropdown-nav-font-size; }
-@mixin hook-navbar-dropdown-nav-item(){}
-@mixin hook-navbar-dropdown-nav-item-hover(){}
-@mixin hook-navbar-dropdown-nav-item-active(){}
-@mixin hook-navbar-dropdown-nav-header(){}
-@mixin hook-navbar-dropdown-nav-divider(){}
-@mixin hook-navbar-dropbar(){}
-@mixin hook-navbar-dropbar-slide(){ box-shadow: $navbar-dropbar-box-shadow; }
-@mixin hook-navbar-misc(){
-
- /*
- * Navbar
- */
-
- .uk-navbar-container > .uk-container .uk-navbar-left {
- margin-left: (-$navbar-nav-item-padding-horizontal);
- margin-right: (-$navbar-nav-item-padding-horizontal);
- }
- .uk-navbar-container > .uk-container .uk-navbar-right { margin-right: (-$navbar-nav-item-padding-horizontal); }
-
- /*
- * Grid Divider
- */
-
- .uk-navbar-dropdown-grid > * { position: relative; }
-
- .uk-navbar-dropdown-grid > :not(.uk-first-column)::before {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: ($navbar-dropdown-grid-gutter-horizontal / 2);
- border-left: $navbar-dropdown-grid-divider-border-width solid $navbar-dropdown-grid-divider-border;
- }
-
- /* Vertical */
- .uk-navbar-dropdown-grid.uk-grid-stack > .uk-grid-margin::before {
- content: "";
- position: absolute;
- top: -($navbar-dropdown-grid-gutter-vertical / 2);
- left: $navbar-dropdown-grid-gutter-horizontal;
- right: 0;
- border-top: $navbar-dropdown-grid-divider-border-width solid $navbar-dropdown-grid-divider-border;
- }
-
-}
-@mixin hook-inverse-navbar-nav-item(){}
-@mixin hook-inverse-navbar-nav-item-hover(){}
-@mixin hook-inverse-navbar-nav-item-onclick(){}
-@mixin hook-inverse-navbar-nav-item-active(){}
-@mixin hook-inverse-navbar-item(){}
-@mixin hook-inverse-navbar-toggle(){}
-@mixin hook-inverse-navbar-toggle-hover(){}
-@mixin hook-notification(){}
-@mixin hook-notification-message(){}
-@mixin hook-notification-close(){}
-@mixin hook-notification-message-primary(){}
-@mixin hook-notification-message-success(){}
-@mixin hook-notification-message-warning(){}
-@mixin hook-notification-message-danger(){}
-@mixin hook-notification-misc(){}
-@mixin hook-offcanvas-bar(){}
-@mixin hook-offcanvas-close(){}
-@mixin hook-offcanvas-overlay(){}
-@mixin hook-offcanvas-misc(){}
-@mixin hook-overlay(){}
-@mixin hook-overlay-icon(){}
-@mixin hook-overlay-default(){}
-@mixin hook-overlay-primary(){}
-@mixin hook-overlay-misc(){}
-@mixin hook-padding-misc(){}
-@mixin hook-pagination(){}
-@mixin hook-pagination-item(){ transition: color 0.1s ease-in-out; }
-@mixin hook-pagination-item-hover(){}
-@mixin hook-pagination-item-active(){}
-@mixin hook-pagination-item-disabled(){}
-@mixin hook-pagination-misc(){}
-@mixin hook-inverse-pagination-item(){}
-@mixin hook-inverse-pagination-item-hover(){}
-@mixin hook-inverse-pagination-item-active(){}
-@mixin hook-inverse-pagination-item-disabled(){}
-@mixin hook-placeholder(){ border: $placeholder-border-width dashed $placeholder-border; }
-@mixin hook-placeholder-misc(){}
-@mixin hook-position-misc(){}
-@mixin hook-print(){}
-@mixin hook-progress(){
- border-radius: $progress-border-radius;
- overflow: hidden;
-}
-@mixin hook-progress-bar(){}
-@mixin hook-progress-misc(){}
-@mixin hook-search-input(){}
-@mixin hook-search-default-input(){ border: $search-default-border-width solid $search-default-border; }
-@mixin hook-search-default-input-focus(){ border-color: $search-default-focus-border; }
-@mixin hook-search-navbar-input(){}
-@mixin hook-search-large-input(){}
-@mixin hook-search-toggle(){}
-@mixin hook-search-toggle-hover(){}
-@mixin hook-search-misc(){}
-@mixin hook-inverse-search-default-input(){ border-color: $inverse-global-border; }
-@mixin hook-inverse-search-default-input-focus(){}
-@mixin hook-inverse-search-navbar-input(){}
-@mixin hook-inverse-search-large-input(){}
-@mixin hook-inverse-search-toggle(){}
-@mixin hook-inverse-search-toggle-hover(){}
-@mixin hook-section(){}
-@mixin hook-section-default(){}
-@mixin hook-section-muted(){}
-@mixin hook-section-primary(){}
-@mixin hook-section-secondary(){}
-@mixin hook-section-overlap(){}
-@mixin hook-section-misc(){}
-@mixin hook-slidenav(){ transition: color 0.1s ease-in-out; }
-@mixin hook-slidenav-hover(){}
-@mixin hook-slidenav-active(){}
-@mixin hook-slidenav-previous(){}
-@mixin hook-slidenav-next(){}
-@mixin hook-slidenav-large(){}
-@mixin hook-slidenav-container(){}
-@mixin hook-slidenav-misc(){}
-@mixin hook-inverse-slidenav(){}
-@mixin hook-inverse-slidenav-hover(){}
-@mixin hook-inverse-slidenav-active(){}
-@mixin hook-slider(){}
-@mixin hook-slider-misc(){}
-@mixin hook-slideshow(){}
-@mixin hook-slideshow-misc(){}
-@mixin hook-sortable(){}
-@mixin hook-sortable-drag(){}
-@mixin hook-sortable-placeholder(){}
-@mixin hook-sortable-empty(){}
-@mixin hook-sortable-misc(){}
-@mixin hook-spinner(){}
-@mixin hook-spinner-misc(){}
-@mixin hook-sticky-misc(){}
-@mixin hook-subnav(){}
-@mixin hook-subnav-item(){
- font-size: $subnav-item-font-size;
- text-transform: $subnav-item-text-transform;
- transition: 0.1s ease-in-out;
- transition-property: color, background-color;
-}
-@mixin hook-subnav-item-hover(){}
-@mixin hook-subnav-item-active(){}
-@mixin hook-subnav-divider(){}
-@mixin hook-subnav-pill-item(){}
-@mixin hook-subnav-pill-item-hover(){}
-@mixin hook-subnav-pill-item-onclick(){}
-@mixin hook-subnav-pill-item-active(){}
-@mixin hook-subnav-item-disabled(){}
-@mixin hook-subnav-misc(){}
-@mixin hook-inverse-subnav-item(){}
-@mixin hook-inverse-subnav-item-hover(){}
-@mixin hook-inverse-subnav-item-active(){}
-@mixin hook-inverse-subnav-divider(){}
-@mixin hook-inverse-subnav-pill-item(){}
-@mixin hook-inverse-subnav-pill-item-hover(){}
-@mixin hook-inverse-subnav-pill-item-onclick(){}
-@mixin hook-inverse-subnav-pill-item-active(){}
-@mixin hook-inverse-subnav-item-disabled(){}
-@mixin hook-svg-misc(){}
-@mixin hook-switcher-misc(){}
-@mixin hook-tab(){
-
- position: relative;
-
- &::before {
- content: "";
- position: absolute;
- bottom: 0;
- left: $tab-margin-horizontal;
- right: 0;
- border-bottom: $tab-border-width solid $tab-border;
- }
-
-}
-@mixin hook-tab-item(){
- border-bottom: $tab-item-border-width solid transparent;
- font-size: $tab-item-font-size;
- text-transform: $tab-item-text-transform;
- transition: color 0.1s ease-in-out;
-}
-@mixin hook-tab-item-hover(){}
-@mixin hook-tab-item-active(){ border-color: $tab-item-active-border; }
-@mixin hook-tab-item-disabled(){}
-@mixin hook-tab-bottom(){
-
- &::before {
- top: 0;
- bottom: auto;
- }
-
-}
-@mixin hook-tab-bottom-item(){
- border-top: $tab-item-border-width solid transparent;
- border-bottom: none;
-}
-@mixin hook-tab-left(){
-
- &::before {
- top: 0;
- bottom: 0;
- left: auto;
- right: 0;
- border-left: $tab-border-width solid $tab-border;
- border-bottom: none;
- }
-
-}
-@mixin hook-tab-right(){
-
- &::before {
- top: 0;
- bottom: 0;
- left: 0;
- right: auto;
- border-left: $tab-border-width solid $tab-border;
- border-bottom: none;
- }
-
-}
-@mixin hook-tab-left-item(){
- border-right: $tab-item-border-width solid transparent;
- border-bottom: none;
-}
-@mixin hook-tab-right-item(){
- border-left: $tab-item-border-width solid transparent;
- border-bottom: none;
-}
-@mixin hook-tab-misc(){
-
- .uk-tab .uk-dropdown { margin-left: ($tab-margin-horizontal + $tab-item-padding-horizontal) }
-
-}
-@mixin hook-inverse-tab(){
-
- &::before { border-color: $inverse-tab-border; }
-
-}
-@mixin hook-inverse-tab-item(){}
-@mixin hook-inverse-tab-item-hover(){}
-@mixin hook-inverse-tab-item-active(){ border-color: $inverse-global-primary-background; }
-@mixin hook-inverse-tab-item-disabled(){}
-@mixin hook-table(){}
-@mixin hook-table-header-cell(){ text-transform: uppercase; }
-@mixin hook-table-cell(){}
-@mixin hook-table-footer(){}
-@mixin hook-table-caption(){}
-@mixin hook-table-divider(){}
-@mixin hook-table-striped(){
- border-top: $table-striped-border-width solid $table-striped-border;
- border-bottom: $table-striped-border-width solid $table-striped-border;
-}
-@mixin hook-table-hover(){}
-@mixin hook-table-row-active(){}
-@mixin hook-table-small(){}
-@mixin hook-table-large(){}
-@mixin hook-table-misc(){
-
- .uk-table tbody tr { transition: background-color 0.1s linear; }
-
-}
-@mixin hook-inverse-table-header-cell(){}
-@mixin hook-inverse-table-caption(){}
-@mixin hook-inverse-table-row-active(){}
-@mixin hook-inverse-table-divider(){}
-@mixin hook-inverse-table-striped(){
- border-top-color: $inverse-global-border;
- border-bottom-color: $inverse-global-border;
-}
-@mixin hook-inverse-table-hover(){}
-@mixin hook-inverse-component-table(){
-
- .uk-table th {
- color: $inverse-table-header-cell-color;
- @if(mixin-exists(hook-inverse-table-header-cell)) {@include hook-inverse-table-header-cell();}
- }
-
- .uk-table caption {
- color: $inverse-table-caption-color;
- @if(mixin-exists(hook-inverse-table-caption)) {@include hook-inverse-table-caption();}
- }
-
- .uk-table > tr.uk-active,
- .uk-table tbody tr.uk-active {
- background: $inverse-table-row-active-background;
- @if(mixin-exists(hook-inverse-table-row-active)) {@include hook-inverse-table-row-active();}
- }
-
- .uk-table-divider > tr:not(:first-child),
- .uk-table-divider > :not(:first-child) > tr,
- .uk-table-divider > :first-child > tr:not(:first-child) {
- border-top-color: $inverse-table-divider-border;
- @if(mixin-exists(hook-inverse-table-divider)) {@include hook-inverse-table-divider();}
- }
-
- .uk-table-striped > tr:nth-of-type(odd),
- .uk-table-striped tbody tr:nth-of-type(odd) {
- background: $inverse-table-striped-row-background;
- @if(mixin-exists(hook-inverse-table-striped)) {@include hook-inverse-table-striped();}
- }
-
- .uk-table-hover > tr:hover,
- .uk-table-hover tbody tr:hover {
- background: $inverse-table-hover-row-background;
- @if(mixin-exists(hook-inverse-table-hover)) {@include hook-inverse-table-hover();}
- }
-
-}
-@mixin hook-text-lead(){}
-@mixin hook-text-meta(){
-
- a { color: $text-meta-link-color; }
-
- a:hover {
- color: $text-meta-link-hover-color;
- text-decoration: none;
- }
-
-}
-@mixin hook-text-small(){}
-@mixin hook-text-large(){}
-@mixin hook-text-background(){}
-@mixin hook-text-misc(){}
-@mixin hook-inverse-text-lead(){}
-@mixin hook-inverse-text-meta(){}
-@mixin hook-thumbnav(){}
-@mixin hook-thumbnav-item(){
-
- position: relative;
-
- &::after {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: $thumbnav-item-background;
- transition: background-color 0.1s ease-in-out;
- }
-
-}
-@mixin hook-thumbnav-item-hover(){
- &::after { background-color: $thumbnav-item-hover-background; }
-}
-@mixin hook-thumbnav-item-active(){
- &::after { background-color: $thumbnav-item-active-background; }
-}
-@mixin hook-thumbnav-misc(){}
-@mixin hook-inverse-thumbnav-item(){}
-@mixin hook-inverse-thumbnav-item-hover(){}
-@mixin hook-inverse-thumbnav-item-active(){}
-@mixin hook-inverse-component-thumbnav(){
-
- .uk-thumbnav > * > * {
- @if(mixin-exists(hook-inverse-thumbnav-item)) {@include hook-inverse-thumbnav-item();}
- }
-
- .uk-thumbnav > * > :hover,
- .uk-thumbnav > * > :focus {
- @if(mixin-exists(hook-inverse-thumbnav-item-hover)) {@include hook-inverse-thumbnav-item-hover();}
- }
-
- .uk-thumbnav > .uk-active > * {
- @if(mixin-exists(hook-inverse-thumbnav-item-active)) {@include hook-inverse-thumbnav-item-active();}
- }
-
-}
-@mixin hook-tile(){}
-@mixin hook-tile-default(){}
-@mixin hook-tile-muted(){}
-@mixin hook-tile-primary(){}
-@mixin hook-tile-secondary(){}
-@mixin hook-tile-misc(){}
-@mixin hook-tooltip(){}
-@mixin hook-tooltip-misc(){}
-@mixin hook-totop(){ transition: color 0.1s ease-in-out; }
-@mixin hook-totop-hover(){}
-@mixin hook-totop-active(){}
-@mixin hook-totop-misc(){}
-@mixin hook-inverse-totop(){}
-@mixin hook-inverse-totop-hover(){}
-@mixin hook-inverse-totop-active(){}
-@mixin hook-transition-misc(){}
-@mixin hook-panel-scrollable(){}
-@mixin hook-box-shadow-bottom(){}
-@mixin hook-dropcap(){
- // Prevent line wrap
- margin-bottom: -2px;
-}
-@mixin hook-logo(){}
-@mixin hook-logo-hover(){}
-@mixin hook-utility-misc(){}
-@mixin hook-inverse-dropcap(){}
-@mixin hook-inverse-logo(){}
-@mixin hook-inverse-logo-hover(){}
-@mixin hook-visibility-misc(){}
-@mixin hook-width-misc(){}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/_sass/uikit/mixins.scss b/docs/_sass/uikit/mixins.scss
deleted file mode 100644
index 61bae21e37..0000000000
--- a/docs/_sass/uikit/mixins.scss
+++ /dev/null
@@ -1,1748 +0,0 @@
-@mixin hook-accordion(){}
-@mixin hook-accordion-item(){}
-@mixin hook-accordion-title(){}
-@mixin hook-accordion-title-hover(){}
-@mixin hook-accordion-content(){}
-@mixin hook-accordion-misc(){}
-@mixin hook-inverse-accordion-item(){}
-@mixin hook-inverse-accordion-title(){}
-@mixin hook-inverse-accordion-title-hover(){}
-@mixin hook-inverse-component-accordion(){
-
- .uk-accordion > :nth-child(n+2) {
- @if(mixin-exists(hook-inverse-accordion-item)) {@include hook-inverse-accordion-item();}
- }
-
- .uk-accordion-title {
- color: $inverse-accordion-title-color;
- @if(mixin-exists(hook-inverse-accordion-title)) {@include hook-inverse-accordion-title();}
- }
-
- .uk-accordion-title:hover,
- .uk-accordion-title:focus {
- color: $inverse-accordion-title-hover-color;
- @if(mixin-exists(hook-inverse-accordion-title-hover)) {@include hook-inverse-accordion-title-hover();}
- }
-
-}
-@mixin hook-alert(){}
-@mixin hook-alert-close(){}
-@mixin hook-alert-close-hover(){}
-@mixin hook-alert-primary(){}
-@mixin hook-alert-success(){}
-@mixin hook-alert-warning(){}
-@mixin hook-alert-danger(){}
-@mixin hook-alert-misc(){}
-@mixin hook-align-misc(){}
-@mixin hook-animation-misc(){}
-@mixin hook-article(){}
-@mixin hook-article-adjacent(){}
-@mixin hook-article-title(){}
-@mixin hook-article-meta(){}
-@mixin hook-article-misc(){}
-@mixin hook-inverse-article-title(){}
-@mixin hook-inverse-article-meta(){}
-@mixin hook-inverse-component-article(){
-
- .uk-article-title {
- @if(mixin-exists(hook-inverse-article-title)) {@include hook-inverse-article-title();}
- }
-
- .uk-article-meta {
- color: $inverse-article-meta-color;
- @if(mixin-exists(hook-inverse-article-meta)) {@include hook-inverse-article-meta();}
- }
-
-}
-@mixin hook-background-misc(){}
-@mixin hook-badge(){}
-@mixin hook-badge-hover(){}
-@mixin hook-badge-misc(){}
-@mixin hook-inverse-badge(){}
-@mixin hook-inverse-badge-hover(){}
-@mixin hook-inverse-component-badge(){
-
- .uk-badge {
- background-color: $inverse-badge-background;
- color: $inverse-badge-color !important;
- @if(mixin-exists(hook-inverse-badge)) {@include hook-inverse-badge();}
- }
-
- .uk-badge:hover,
- .uk-badge:focus {
- @if(mixin-exists(hook-inverse-badge-hover)) {@include hook-inverse-badge-hover();}
- }
-
-}
-@mixin hook-base-body(){}
-@mixin hook-base-link(){}
-@mixin hook-base-link-hover(){}
-@mixin hook-base-code(){}
-@mixin hook-base-heading(){}
-@mixin hook-base-h1(){}
-@mixin hook-base-h2(){}
-@mixin hook-base-h3(){}
-@mixin hook-base-h4(){}
-@mixin hook-base-h5(){}
-@mixin hook-base-h6(){}
-@mixin hook-base-hr(){}
-@mixin hook-base-blockquote(){}
-@mixin hook-base-blockquote-footer(){}
-@mixin hook-base-pre(){}
-@mixin hook-base-misc(){}
-@mixin hook-inverse-base-link(){}
-@mixin hook-inverse-base-link-hover(){}
-@mixin hook-inverse-base-code(){}
-@mixin hook-inverse-base-heading(){}
-@mixin hook-inverse-base-h1(){}
-@mixin hook-inverse-base-h2(){}
-@mixin hook-inverse-base-h3(){}
-@mixin hook-inverse-base-h4(){}
-@mixin hook-inverse-base-h5(){}
-@mixin hook-inverse-base-h6(){}
-@mixin hook-inverse-base-blockquote(){}
-@mixin hook-inverse-base-blockquote-footer(){}
-@mixin hook-inverse-base-hr(){}
-@mixin hook-inverse-component-base(){
-
- color: $inverse-base-color;
-
- // Base
- // ========================================================================
-
- //
- // Link
- //
-
- a,
- .uk-link {
- color: $inverse-base-link-color;
- @if(mixin-exists(hook-inverse-base-link)) {@include hook-inverse-base-link();}
- }
-
- a:hover,
- .uk-link:hover,
- .uk-link-toggle:hover .uk-link,
- .uk-link-toggle:focus .uk-link {
- color: $inverse-base-link-hover-color;
- @if(mixin-exists(hook-inverse-base-link-hover)) {@include hook-inverse-base-link-hover();}
- }
-
- //
- // Code
- //
-
- :not(pre) > code,
- :not(pre) > kbd,
- :not(pre) > samp {
- color: $inverse-base-code-color;
- @if(mixin-exists(hook-inverse-base-code)) {@include hook-inverse-base-code();}
- }
-
- //
- // Emphasize
- //
-
- em { color: $inverse-base-em-color; }
-
- //
- // Headings
- //
-
- h1, .uk-h1,
- h2, .uk-h2,
- h3, .uk-h3,
- h4, .uk-h4,
- h5, .uk-h5,
- h6, .uk-h6,
- .uk-heading-small,
- .uk-heading-medium,
- .uk-heading-large,
- .uk-heading-xlarge,
- .uk-heading-2xlarge {
- color: $inverse-base-heading-color;
- @if(mixin-exists(hook-inverse-base-heading)) {@include hook-inverse-base-heading();}
- }
-
- h1, .uk-h1 {
- @if(mixin-exists(hook-inverse-base-h1)) {@include hook-inverse-base-h1();}
- }
-
- h2, .uk-h2 {
- @if(mixin-exists(hook-inverse-base-h2)) {@include hook-inverse-base-h2();}
- }
-
- h3, .uk-h3 {
- @if(mixin-exists(hook-inverse-base-h3)) {@include hook-inverse-base-h3();}
- }
-
- h4, .uk-h4 {
- @if(mixin-exists(hook-inverse-base-h4)) {@include hook-inverse-base-h4();}
- }
-
- h5, .uk-h5 {
- @if(mixin-exists(hook-inverse-base-h5)) {@include hook-inverse-base-h5();}
- }
-
- h6, .uk-h6 {
- @if(mixin-exists(hook-inverse-base-h6)) {@include hook-inverse-base-h6();}
- }
-
- //
- // Blockquotes
- //
-
- blockquote {
- @if(mixin-exists(hook-inverse-base-blockquote)) {@include hook-inverse-base-blockquote();}
- }
-
- blockquote footer {
- @if(mixin-exists(hook-inverse-base-blockquote-footer)) {@include hook-inverse-base-blockquote-footer();}
- }
-
- //
- // Horizontal rules
- //
-
- hr, .uk-hr {
- border-top-color: $inverse-base-hr-border;
- @if(mixin-exists(hook-inverse-base-hr)) {@include hook-inverse-base-hr();}
- }
-
-}
-@mixin hook-breadcrumb(){}
-@mixin hook-breadcrumb-item(){}
-@mixin hook-breadcrumb-item-hover(){}
-@mixin hook-breadcrumb-item-disabled(){}
-@mixin hook-breadcrumb-item-active(){}
-@mixin hook-breadcrumb-divider(){}
-@mixin hook-breadcrumb-misc(){}
-@mixin hook-inverse-breadcrumb-item(){}
-@mixin hook-inverse-breadcrumb-item-hover(){}
-@mixin hook-inverse-breadcrumb-item-disabled(){}
-@mixin hook-inverse-breadcrumb-item-active(){}
-@mixin hook-inverse-breadcrumb-divider(){}
-@mixin hook-inverse-component-breadcrumb(){
-
- .uk-breadcrumb > * > * {
- color: $inverse-breadcrumb-item-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item)) {@include hook-inverse-breadcrumb-item();}
- }
-
- .uk-breadcrumb > * > :hover,
- .uk-breadcrumb > * > :focus {
- color: $inverse-breadcrumb-item-hover-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item-hover)) {@include hook-inverse-breadcrumb-item-hover();}
- }
-
-
- .uk-breadcrumb > .uk-disabled > * {
- @if(mixin-exists(hook-inverse-breadcrumb-item-disabled)) {@include hook-inverse-breadcrumb-item-disabled();}
- }
-
- .uk-breadcrumb > :last-child > * {
- color: $inverse-breadcrumb-item-active-color;
- @if(mixin-exists(hook-inverse-breadcrumb-item-active)) {@include hook-inverse-breadcrumb-item-active();}
- }
-
- //
- // Divider
- //
-
- .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before {
- color: $inverse-breadcrumb-divider-color;
- @if(mixin-exists(hook-inverse-breadcrumb-divider)) {@include hook-inverse-breadcrumb-divider();}
- }
-
-}
-@mixin hook-button(){}
-@mixin hook-button-hover(){}
-@mixin hook-button-focus(){}
-@mixin hook-button-active(){}
-@mixin hook-button-default(){}
-@mixin hook-button-default-hover(){}
-@mixin hook-button-default-active(){}
-@mixin hook-button-primary(){}
-@mixin hook-button-primary-hover(){}
-@mixin hook-button-primary-active(){}
-@mixin hook-button-secondary(){}
-@mixin hook-button-secondary-hover(){}
-@mixin hook-button-secondary-active(){}
-@mixin hook-button-danger(){}
-@mixin hook-button-danger-hover(){}
-@mixin hook-button-danger-active(){}
-@mixin hook-button-disabled(){}
-@mixin hook-button-small(){}
-@mixin hook-button-large(){}
-@mixin hook-button-text(){}
-@mixin hook-button-text-hover(){}
-@mixin hook-button-text-disabled(){}
-@mixin hook-button-link(){}
-@mixin hook-button-misc(){}
-@mixin hook-inverse-button-default(){}
-@mixin hook-inverse-button-default-hover(){}
-@mixin hook-inverse-button-default-active(){}
-@mixin hook-inverse-button-primary(){}
-@mixin hook-inverse-button-primary-hover(){}
-@mixin hook-inverse-button-primary-active(){}
-@mixin hook-inverse-button-secondary(){}
-@mixin hook-inverse-button-secondary-hover(){}
-@mixin hook-inverse-button-secondary-active(){}
-@mixin hook-inverse-button-text(){}
-@mixin hook-inverse-button-text-hover(){}
-@mixin hook-inverse-button-text-disabled(){}
-@mixin hook-inverse-button-link(){}
-@mixin hook-inverse-component-button(){
-
- //
- // Default
- //
-
- .uk-button-default {
- background-color: $inverse-button-default-background;
- color: $inverse-button-default-color;
- @if(mixin-exists(hook-inverse-button-default)) {@include hook-inverse-button-default();}
- }
-
- .uk-button-default:hover,
- .uk-button-default:focus {
- background-color: $inverse-button-default-hover-background;
- color: $inverse-button-default-hover-color;
- @if(mixin-exists(hook-inverse-button-default-hover)) {@include hook-inverse-button-default-hover();}
- }
-
- .uk-button-default:active,
- .uk-button-default.uk-active {
- background-color: $inverse-button-default-active-background;
- color: $inverse-button-default-active-color;
- @if(mixin-exists(hook-inverse-button-default-active)) {@include hook-inverse-button-default-active();}
- }
-
- //
- // Primary
- //
-
- .uk-button-primary {
- background-color: $inverse-button-primary-background;
- color: $inverse-button-primary-color;
- @if(mixin-exists(hook-inverse-button-primary)) {@include hook-inverse-button-primary();}
- }
-
- .uk-button-primary:hover,
- .uk-button-primary:focus {
- background-color: $inverse-button-primary-hover-background;
- color: $inverse-button-primary-hover-color;
- @if(mixin-exists(hook-inverse-button-primary-hover)) {@include hook-inverse-button-primary-hover();}
- }
-
- .uk-button-primary:active,
- .uk-button-primary.uk-active {
- background-color: $inverse-button-primary-active-background;
- color: $inverse-button-primary-active-color;
- @if(mixin-exists(hook-inverse-button-primary-active)) {@include hook-inverse-button-primary-active();}
- }
-
- //
- // Secondary
- //
-
- .uk-button-secondary {
- background-color: $inverse-button-secondary-background;
- color: $inverse-button-secondary-color;
- @if(mixin-exists(hook-inverse-button-secondary)) {@include hook-inverse-button-secondary();}
- }
-
- .uk-button-secondary:hover,
- .uk-button-secondary:focus {
- background-color: $inverse-button-secondary-hover-background;
- color: $inverse-button-secondary-hover-color;
- @if(mixin-exists(hook-inverse-button-secondary-hover)) {@include hook-inverse-button-secondary-hover();}
- }
-
- .uk-button-secondary:active,
- .uk-button-secondary.uk-active {
- background-color: $inverse-button-secondary-active-background;
- color: $inverse-button-secondary-active-color;
- @if(mixin-exists(hook-inverse-button-secondary-active)) {@include hook-inverse-button-secondary-active();}
- }
-
- //
- // Text
- //
-
- .uk-button-text {
- color: $inverse-button-text-color;
- @if(mixin-exists(hook-inverse-button-text)) {@include hook-inverse-button-text();}
- }
-
- .uk-button-text:hover,
- .uk-button-text:focus {
- color: $inverse-button-text-hover-color;
- @if(mixin-exists(hook-inverse-button-text-hover)) {@include hook-inverse-button-text-hover();}
- }
-
- .uk-button-text:disabled {
- color: $inverse-button-text-disabled-color;
- @if(mixin-exists(hook-inverse-button-text-disabled)) {@include hook-inverse-button-text-disabled();}
- }
-
- //
- // Link
- //
-
- .uk-button-link {
- color: $inverse-button-link-color;
- @if(mixin-exists(hook-inverse-button-link)) {@include hook-inverse-button-link();}
- }
-
- .uk-button-link:hover,
- .uk-button-link:focus { color: $inverse-button-link-hover-color; }
-
-
-}
-@mixin hook-card(){}
-@mixin hook-card-body(){}
-@mixin hook-card-header(){}
-@mixin hook-card-footer(){}
-@mixin hook-card-media(){}
-@mixin hook-card-media-top(){}
-@mixin hook-card-media-bottom(){}
-@mixin hook-card-media-left(){}
-@mixin hook-card-media-right(){}
-@mixin hook-card-title(){}
-@mixin hook-card-badge(){}
-@mixin hook-card-hover(){}
-@mixin hook-card-default(){}
-@mixin hook-card-default-title(){}
-@mixin hook-card-default-hover(){}
-@mixin hook-card-default-header(){}
-@mixin hook-card-default-footer(){}
-@mixin hook-card-primary(){}
-@mixin hook-card-primary-title(){}
-@mixin hook-card-primary-hover(){}
-@mixin hook-card-secondary(){}
-@mixin hook-card-secondary-title(){}
-@mixin hook-card-secondary-hover(){}
-@mixin hook-card-misc(){}
-@mixin hook-inverse-card-badge(){}
-@mixin hook-inverse-component-card(){
-
- &.uk-card-badge {
- background-color: $inverse-card-badge-background;
- color: $inverse-card-badge-color;
- @if(mixin-exists(hook-inverse-card-badge)) {@include hook-inverse-card-badge();}
- }
-
-}
-@mixin hook-close(){}
-@mixin hook-close-hover(){}
-@mixin hook-close-misc(){}
-@mixin hook-inverse-close(){}
-@mixin hook-inverse-close-hover(){}
-@mixin hook-inverse-component-close(){
-
- .uk-close {
- color: $inverse-close-color;
- @if(mixin-exists(hook-inverse-close)) {@include hook-inverse-close();}
- }
-
- .uk-close:hover,
- .uk-close:focus {
- color: $inverse-close-hover-color;
- @if(mixin-exists(hook-inverse-close-hover)) {@include hook-inverse-close-hover();}
- }
-
-}
-@mixin hook-column-misc(){}
-@mixin hook-inverse-component-column(){
-
- .uk-column-divider { column-rule-color: $inverse-column-divider-rule-color; }
-
-}
-@mixin hook-comment(){}
-@mixin hook-comment-body(){}
-@mixin hook-comment-header(){}
-@mixin hook-comment-title(){}
-@mixin hook-comment-meta(){}
-@mixin hook-comment-avatar(){}
-@mixin hook-comment-list-adjacent(){}
-@mixin hook-comment-list-sub(){}
-@mixin hook-comment-list-sub-adjacent(){}
-@mixin hook-comment-primary(){}
-@mixin hook-comment-misc(){}
-@mixin hook-container-misc(){}
-@mixin hook-countdown(){}
-@mixin hook-countdown-item(){}
-@mixin hook-countdown-number(){}
-@mixin hook-countdown-separator(){}
-@mixin hook-countdown-label(){}
-@mixin hook-countdown-misc(){}
-@mixin hook-inverse-countdown-item(){}
-@mixin hook-inverse-countdown-number(){}
-@mixin hook-inverse-countdown-separator(){}
-@mixin hook-inverse-countdown-label(){}
-@mixin hook-inverse-component-countdown(){
-
- .uk-countdown-number,
- .uk-countdown-separator {
- @if(mixin-exists(hook-inverse-countdown-item)) {@include hook-inverse-countdown-item();}
- }
-
- .uk-countdown-number {
- @if(mixin-exists(hook-inverse-countdown-number)) {@include hook-inverse-countdown-number();}
- }
-
- .uk-countdown-separator {
- @if(mixin-exists(hook-inverse-countdown-separator)) {@include hook-inverse-countdown-separator();}
- }
-
- .uk-countdown-label {
- @if(mixin-exists(hook-inverse-countdown-label)) {@include hook-inverse-countdown-label();}
- }
-
-}
-@mixin hook-cover-misc(){}
-@mixin hook-description-list-term(){}
-@mixin hook-description-list-description(){}
-@mixin hook-description-list-divider-term(){}
-@mixin hook-description-list-misc(){}
-@mixin svg-fill($src, $color-default, $color-new, $property: background-image){
-
- $escape-color-default: escape($color-default) !default;
- $escape-color-new: escape("#{$color-new}") !default;
-
- $data-uri: data-uri('image/svg+xml;charset=UTF-8', "#{$src}") !default;
- $replace-src: replace("#{$data-uri}", "#{$escape-color-default}", "#{$escape-color-new}", "g") !default;
-
- #{$property}: unquote($replace-src);
-}
-@mixin hook-divider-icon(){}
-@mixin hook-divider-icon-line(){}
-@mixin hook-divider-icon-line-left(){}
-@mixin hook-divider-icon-line-right(){}
-@mixin hook-divider-small(){}
-@mixin hook-divider-vertical(){}
-@mixin hook-divider-misc(){}
-@mixin hook-inverse-divider-icon(){}
-@mixin hook-inverse-divider-icon-line(){}
-@mixin hook-inverse-divider-small(){}
-@mixin hook-inverse-divider-vertical(){}
-@mixin hook-inverse-component-divider(){
-
- .uk-divider-icon {
- @include svg-fill($internal-divider-icon-image, "#000", $inverse-divider-icon-color);
- @if(mixin-exists(hook-inverse-divider-icon)) {@include hook-inverse-divider-icon();}
- }
-
- .uk-divider-icon::before,
- .uk-divider-icon::after {
- border-bottom-color: $inverse-divider-icon-line-border;
- @if(mixin-exists(hook-inverse-divider-icon-line)) {@include hook-inverse-divider-icon-line();}
- }
-
- .uk-divider-small::after {
- border-top-color: $inverse-divider-small-border;
- @if(mixin-exists(hook-inverse-divider-small)) {@include hook-inverse-divider-small();}
- }
-
- .uk-divider-vertical {
- border-left-color: $inverse-divider-vertical-border;
- @if(mixin-exists(hook-inverse-divider-vertical)) {@include hook-inverse-divider-vertical();}
- }
-
-}
-@mixin hook-dotnav(){}
-@mixin hook-dotnav-item(){}
-@mixin hook-dotnav-item-hover(){}
-@mixin hook-dotnav-item-onclick(){}
-@mixin hook-dotnav-item-active(){}
-@mixin hook-dotnav-misc(){}
-@mixin hook-inverse-dotnav-item(){}
-@mixin hook-inverse-dotnav-item-hover(){}
-@mixin hook-inverse-dotnav-item-onclick(){}
-@mixin hook-inverse-dotnav-item-active(){}
-@mixin hook-inverse-component-dotnav(){
-
- .uk-dotnav > * > * {
- background-color: $inverse-dotnav-item-background;
- @if(mixin-exists(hook-inverse-dotnav-item)) {@include hook-inverse-dotnav-item();}
- }
-
- .uk-dotnav > * > :hover,
- .uk-dotnav > * > :focus {
- background-color: $inverse-dotnav-item-hover-background;
- @if(mixin-exists(hook-inverse-dotnav-item-hover)) {@include hook-inverse-dotnav-item-hover();}
- }
-
- .uk-dotnav > * > :active {
- background-color: $inverse-dotnav-item-onclick-background;
- @if(mixin-exists(hook-inverse-dotnav-item-onclick)) {@include hook-inverse-dotnav-item-onclick();}
- }
-
- .uk-dotnav > .uk-active > * {
- background-color: $inverse-dotnav-item-active-background;
- @if(mixin-exists(hook-inverse-dotnav-item-active)) {@include hook-inverse-dotnav-item-active();}
- }
-
-}
-@mixin hook-drop-misc(){}
-@mixin hook-dropdown(){}
-@mixin hook-dropdown-nav(){}
-@mixin hook-dropdown-nav-item(){}
-@mixin hook-dropdown-nav-item-hover(){}
-@mixin hook-dropdown-nav-header(){}
-@mixin hook-dropdown-nav-divider(){}
-@mixin hook-dropdown-misc(){}
-@mixin hook-flex-misc(){}
-@mixin hook-form-range(){}
-@mixin hook-form-range-thumb(){}
-@mixin hook-form-range-track(){}
-@mixin hook-form-range-track-focus(){}
-@mixin hook-form-range-misc(){}
-@mixin hook-form(){}
-@mixin hook-form-single-line(){}
-@mixin hook-form-multi-line(){}
-@mixin hook-form-focus(){}
-@mixin hook-form-disabled(){}
-@mixin hook-form-danger(){}
-@mixin hook-form-success(){}
-@mixin hook-form-blank(){}
-@mixin hook-form-blank-focus(){}
-@mixin hook-form-radio(){}
-@mixin hook-form-radio-focus(){}
-@mixin hook-form-radio-checked(){}
-@mixin hook-form-radio-checked-focus(){}
-@mixin hook-form-radio-disabled(){}
-@mixin hook-form-legend(){}
-@mixin hook-form-label(){}
-@mixin hook-form-stacked-label(){}
-@mixin hook-form-horizontal-label(){}
-@mixin hook-form-misc(){}
-@mixin hook-inverse-form(){}
-@mixin hook-inverse-form-focus(){}
-@mixin hook-inverse-form-radio(){}
-@mixin hook-inverse-form-radio-focus(){}
-@mixin hook-inverse-form-radio-checked(){}
-@mixin hook-inverse-form-radio-checked-focus(){}
-@mixin hook-inverse-form-label(){}
-@mixin hook-inverse-component-form(){
-
- .uk-input,
- .uk-select,
- .uk-textarea {
- background-color: $inverse-form-background;
- color: $inverse-form-color;
- background-clip: padding-box;
- @if(mixin-exists(hook-inverse-form)) {@include hook-inverse-form();}
-
- &:focus {
- background-color: $inverse-form-focus-background;
- color: $inverse-form-focus-color;
- @if(mixin-exists(hook-inverse-form-focus)) {@include hook-inverse-form-focus();}
- }
- }
-
- //
- // Placeholder
- //
-
- .uk-input::-ms-input-placeholder { color: $inverse-form-placeholder-color !important; }
- .uk-input::placeholder { color: $inverse-form-placeholder-color; }
-
- .uk-textarea::-ms-input-placeholder { color: $inverse-form-placeholder-color !important; }
- .uk-textarea::placeholder { color: $inverse-form-placeholder-color; }
-
- //
- // Select
- //
-
- .uk-select:not([multiple]):not([size]) { @include svg-fill($internal-form-select-image, "#000", $inverse-form-select-icon-color); }
-
- //
- // Datalist
- //
-
- .uk-input[list]:hover,
- .uk-input[list]:focus { @include svg-fill($internal-form-datalist-image, "#000", $inverse-form-datalist-icon-color); }
-
- //
- // Radio and checkbox
- //
-
- .uk-radio,
- .uk-checkbox {
- background-color: $inverse-form-radio-background;
- @if(mixin-exists(hook-inverse-form-radio)) {@include hook-inverse-form-radio();}
- }
-
- // Focus
- .uk-radio:focus,
- .uk-checkbox:focus {
- background-color: $inverse-form-radio-focus-background;
- @if(mixin-exists(hook-inverse-form-radio-focus)) {@include hook-inverse-form-radio-focus();}
- }
-
- // Checked
- .uk-radio:checked,
- .uk-checkbox:checked,
- .uk-checkbox:indeterminate {
- background-color: $inverse-form-radio-checked-background;
- @if(mixin-exists(hook-inverse-form-radio-checked)) {@include hook-inverse-form-radio-checked();}
- }
-
- // Focus
- .uk-radio:checked:focus,
- .uk-checkbox:checked:focus,
- .uk-checkbox:indeterminate:focus {
- background-color: $inverse-form-radio-checked-focus-background;
- @if(mixin-exists(hook-inverse-form-radio-checked-focus)) {@include hook-inverse-form-radio-checked-focus();}
- }
-
- // Icon
- .uk-radio:checked { @include svg-fill($internal-form-radio-image, "#000", $inverse-form-radio-checked-icon-color); }
- .uk-checkbox:checked { @include svg-fill($internal-form-checkbox-image, "#000", $inverse-form-radio-checked-icon-color); }
- .uk-checkbox:indeterminate { @include svg-fill($internal-form-checkbox-indeterminate-image, "#000", $inverse-form-radio-checked-icon-color); }
-
- // Label
- .uk-form-label {
- @if(mixin-exists(hook-inverse-form-label)) {@include hook-inverse-form-label();}
- }
-
- // Icon
- .uk-form-icon { color: $inverse-form-icon-color; }
- .uk-form-icon:hover { color: $inverse-form-icon-hover-color; }
-
-}
-@mixin hook-grid-divider-horizontal(){}
-@mixin hook-grid-divider-vertical(){}
-@mixin hook-grid-misc(){}
-@mixin hook-inverse-grid-divider-horizontal(){}
-@mixin hook-inverse-grid-divider-vertical(){}
-@mixin hook-inverse-component-grid(){
-
- .uk-grid-divider > :not(.uk-first-column)::before {
- border-left-color: $inverse-grid-divider-border;
- @if(mixin-exists(hook-inverse-grid-divider-horizontal)) {@include hook-inverse-grid-divider-horizontal();}
- }
-
- .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
- border-top-color: $inverse-grid-divider-border;
- @if(mixin-exists(hook-inverse-grid-divider-vertical)) {@include hook-inverse-grid-divider-vertical();}
- }
-
-}
-@mixin hook-heading-small(){}
-@mixin hook-heading-medium(){}
-@mixin hook-heading-large(){}
-@mixin hook-heading-xlarge(){}
-@mixin hook-heading-2xlarge(){}
-@mixin hook-heading-primary(){}
-@mixin hook-heading-hero(){}
-@mixin hook-heading-divider(){}
-@mixin hook-heading-bullet(){}
-@mixin hook-heading-line(){}
-@mixin hook-heading-misc(){}
-@mixin hook-inverse-heading-small(){}
-@mixin hook-inverse-heading-medium(){}
-@mixin hook-inverse-heading-large(){}
-@mixin hook-inverse-heading-xlarge(){}
-@mixin hook-inverse-heading-2xlarge(){}
-@mixin hook-inverse-heading-primary(){}
-@mixin hook-inverse-heading-hero(){}
-@mixin hook-inverse-heading-divider(){}
-@mixin hook-inverse-heading-bullet(){}
-@mixin hook-inverse-heading-line(){}
-@mixin hook-inverse-component-heading(){
-
- .uk-heading-small {
- @if(mixin-exists(hook-inverse-heading-small)) {@include hook-inverse-heading-small();}
- }
-
- .uk-heading-medium {
- @if(mixin-exists(hook-inverse-heading-medium)) {@include hook-inverse-heading-medium();}
- }
-
- .uk-heading-large {
- @if(mixin-exists(hook-inverse-heading-large)) {@include hook-inverse-heading-large();}
- }
-
- .uk-heading-xlarge {
- @if(mixin-exists(hook-inverse-heading-xlarge)) {@include hook-inverse-heading-xlarge();}
- }
-
- .uk-heading-2xlarge {
- @if(mixin-exists(hook-inverse-heading-2xlarge)) {@include hook-inverse-heading-2xlarge();}
- }
-
- @if ($deprecated == true) { .uk-heading-primary { @if (mixin-exists(hook-inverse-heading-primary)) {@include hook-inverse-heading-primary();}}}
-
- @if ($deprecated == true) { .uk-heading-hero { @if (mixin-exists(hook-inverse-heading-hero)) {@include hook-inverse-heading-hero();}}}
-
- .uk-heading-divider {
- border-bottom-color: $inverse-heading-divider-border;
- @if(mixin-exists(hook-inverse-heading-divider)) {@include hook-inverse-heading-divider();}
- }
-
- .uk-heading-bullet::before {
- border-left-color: $inverse-heading-bullet-border;
- @if(mixin-exists(hook-inverse-heading-bullet)) {@include hook-inverse-heading-bullet();}
- }
-
- .uk-heading-line > ::before,
- .uk-heading-line > ::after {
- border-bottom-color: $inverse-heading-line-border;
- @if(mixin-exists(hook-inverse-heading-line)) {@include hook-inverse-heading-line();}
- }
-
-}
-@mixin hook-height-misc(){}
-@mixin hook-icon-link(){}
-@mixin hook-icon-link-hover(){}
-@mixin hook-icon-link-active(){}
-@mixin hook-icon-button(){}
-@mixin hook-icon-button-hover(){}
-@mixin hook-icon-button-active(){}
-@mixin hook-icon-misc(){}
-@mixin hook-inverse-icon-link(){}
-@mixin hook-inverse-icon-link-hover(){}
-@mixin hook-inverse-icon-link-active(){}
-@mixin hook-inverse-icon-button(){}
-@mixin hook-inverse-icon-button-hover(){}
-@mixin hook-inverse-icon-button-active(){}
-@mixin hook-inverse-component-icon(){
-
- //
- // Link
- //
-
- .uk-icon-link {
- color: $inverse-icon-link-color;
- @if(mixin-exists(hook-inverse-icon-link)) {@include hook-inverse-icon-link();}
- }
-
- .uk-icon-link:hover,
- .uk-icon-link:focus {
- color: $inverse-icon-link-hover-color;
- @if(mixin-exists(hook-inverse-icon-link-hover)) {@include hook-inverse-icon-link-hover();}
- }
-
- .uk-icon-link:active,
- .uk-active > .uk-icon-link {
- color: $inverse-icon-link-active-color;
- @if(mixin-exists(hook-inverse-icon-link-active)) {@include hook-inverse-icon-link-active();}
- }
-
- //
- // Button
- //
-
- .uk-icon-button {
- background-color: $inverse-icon-button-background;
- color: $inverse-icon-button-color;
- @if(mixin-exists(hook-inverse-icon-button)) {@include hook-inverse-icon-button();}
- }
-
- .uk-icon-button:hover,
- .uk-icon-button:focus {
- background-color: $inverse-icon-button-hover-background;
- color: $inverse-icon-button-hover-color;
- @if(mixin-exists(hook-inverse-icon-button-hover)) {@include hook-inverse-icon-button-hover();}
- }
-
- .uk-icon-button:active {
- background-color: $inverse-icon-button-active-background;
- color: $inverse-icon-button-active-color;
- @if(mixin-exists(hook-inverse-icon-button-active)) {@include hook-inverse-icon-button-active();}
- }
-
-}
-@mixin hook-iconnav(){}
-@mixin hook-iconnav-item(){}
-@mixin hook-iconnav-item-hover(){}
-@mixin hook-iconnav-item-active(){}
-@mixin hook-iconnav-misc(){}
-@mixin hook-inverse-iconnav-item(){}
-@mixin hook-inverse-iconnav-item-hover(){}
-@mixin hook-inverse-iconnav-item-active(){}
-@mixin hook-inverse-component-iconnav(){
-
- .uk-iconnav > * > a {
- color: $inverse-iconnav-item-color;
- @if(mixin-exists(hook-inverse-iconnav-item)) {@include hook-inverse-iconnav-item();}
- }
-
- .uk-iconnav > * > a:hover,
- .uk-iconnav > * > a:focus {
- color: $inverse-iconnav-item-hover-color;
- @if(mixin-exists(hook-inverse-iconnav-item-hover)) {@include hook-inverse-iconnav-item-hover();}
- }
-
- .uk-iconnav > .uk-active > a {
- color: $inverse-iconnav-item-active-color;
- @if(mixin-exists(hook-inverse-iconnav-item-active)) {@include hook-inverse-iconnav-item-active();}
- }
-
-}
-@mixin hook-inverse-component-link(){
-
- a.uk-link-muted,
- .uk-link-muted a {
- color: $inverse-link-muted-color;
- @if(mixin-exists(hook-inverse-link-muted)) {@include hook-inverse-link-muted();}
- }
-
- a.uk-link-muted:hover,
- .uk-link-muted a:hover,
- .uk-link-toggle:hover .uk-link-muted,
- .uk-link-toggle:focus .uk-link-muted {
- color: $inverse-link-muted-hover-color;
- @if(mixin-exists(hook-inverse-link-muted-hover)) {@include hook-inverse-link-muted-hover();}
- }
-
- a.uk-link-text:hover,
- .uk-link-text a:hover,
- .uk-link-toggle:hover .uk-link-text,
- .uk-link-toggle:focus .uk-link-text {
- color: $inverse-link-text-hover-color;
- @if(mixin-exists(hook-inverse-link-text-hover)) {@include hook-inverse-link-text-hover();}
- }
-
- a.uk-link-heading:hover,
- .uk-link-heading a:hover,
- .uk-link-toggle:hover .uk-link-heading,
- .uk-link-toggle:focus .uk-link-heading {
- color: $inverse-link-heading-hover-color;
- @if(mixin-exists(hook-inverse-link-heading-hover)) {@include hook-inverse-link-heading-hover();}
- }
-
-}
-@mixin hook-inverse-component-list(){
-
- .uk-list-muted > ::before { color: $inverse-list-muted-color !important; }
- .uk-list-emphasis > ::before { color: $inverse-list-emphasis-color !important; }
- .uk-list-primary > ::before { color: $inverse-list-primary-color !important; }
- .uk-list-secondary > ::before { color: $inverse-list-secondary-color !important; }
-
- .uk-list-bullet > ::before {
- @include svg-fill($internal-list-bullet-image, "#000", $inverse-list-bullet-icon-color);
- }
-
- .uk-list-divider > :nth-child(n+2) {
- border-top-color: $inverse-list-divider-border;
- @if(mixin-exists(hook-inverse-list-divider)) {@include hook-inverse-list-divider();}
- }
-
- .uk-list-striped > * {
- @if(mixin-exists(hook-inverse-list-striped)) {@include hook-inverse-list-striped();}
- }
-
- .uk-list-striped > :nth-of-type(odd) { background-color: $inverse-list-striped-background; }
-
-}
-@mixin hook-inverse-component-totop(){
-
- .uk-totop {
- color: $inverse-totop-color;
- @if(mixin-exists(hook-inverse-totop)) {@include hook-inverse-totop();}
- }
-
- .uk-totop:hover,
- .uk-totop:focus {
- color: $inverse-totop-hover-color;
- @if(mixin-exists(hook-inverse-totop-hover)) {@include hook-inverse-totop-hover();}
- }
-
- .uk-totop:active {
- color: $inverse-totop-active-color;
- @if(mixin-exists(hook-inverse-totop-active)) {@include hook-inverse-totop-active();}
- }
-
-}
-@mixin hook-inverse-component-label(){
-
- .uk-label {
- background-color: $inverse-label-background;
- color: $inverse-label-color;
- @if(mixin-exists(hook-inverse-label)) {@include hook-inverse-label();}
- }
-
-}
-@mixin hook-inverse-component-search(){
-
- //
- // Input
- //
-
- .uk-search-input { color: $inverse-search-color; }
-
- .uk-search-input:-ms-input-placeholder { color: $inverse-search-placeholder-color !important; }
- .uk-search-input::placeholder { color: $inverse-search-placeholder-color; }
-
-
- //
- // Icon
- //
-
- .uk-search .uk-search-icon { color: $inverse-search-icon-color; }
- .uk-search .uk-search-icon:hover { color: $inverse-search-icon-color; }
-
- //
- // Style modifier
- //
-
- .uk-search-default .uk-search-input {
- background-color: $inverse-search-default-background;
- @if(mixin-exists(hook-inverse-search-default-input)) {@include hook-inverse-search-default-input();}
- }
-
- .uk-search-default .uk-search-input:focus {
- background-color: $inverse-search-default-focus-background;
- @if(mixin-exists(hook-inverse-search-default-input-focus)) {@include hook-inverse-search-default-input-focus();}
- }
-
- .uk-search-navbar .uk-search-input {
- background-color: $inverse-search-navbar-background;
- @if(mixin-exists(hook-inverse-search-navbar-input)) {@include hook-inverse-search-navbar-input();}
- }
-
- .uk-search-large .uk-search-input {
- background-color: $inverse-search-large-background;
- @if(mixin-exists(hook-inverse-search-large-input)) {@include hook-inverse-search-large-input();}
- }
-
- //
- // Toggle
- //
-
- .uk-search-toggle {
- color: $inverse-search-toggle-color;
- @if(mixin-exists(hook-inverse-search-toggle)) {@include hook-inverse-search-toggle();}
- }
-
- .uk-search-toggle:hover,
- .uk-search-toggle:focus {
- color: $inverse-search-toggle-hover-color;
- @if(mixin-exists(hook-inverse-search-toggle-hover)) {@include hook-inverse-search-toggle-hover();}
- }
-
-}
-@mixin hook-inverse-component-nav(){
-
- //
- // Parent icon modifier
- //
-
- .uk-nav-parent-icon > .uk-parent > a::after {
- @include svg-fill($internal-nav-parent-close-image, "#000", $inverse-nav-parent-icon-color);
- @if(mixin-exists(hook-inverse-nav-parent-icon)) {@include hook-inverse-nav-parent-icon();}
- }
-
- .uk-nav-parent-icon > .uk-parent.uk-open > a::after { @include svg-fill($internal-nav-parent-open-image, "#000", $inverse-nav-parent-icon-color); }
-
- //
- // Default
- //
-
- .uk-nav-default > li > a {
- color: $inverse-nav-default-item-color;
- @if(mixin-exists(hook-inverse-nav-default-item)) {@include hook-inverse-nav-default-item();}
- }
-
- .uk-nav-default > li > a:hover,
- .uk-nav-default > li > a:focus {
- color: $inverse-nav-default-item-hover-color;
- @if(mixin-exists(hook-inverse-nav-default-item-hover)) {@include hook-inverse-nav-default-item-hover();}
- }
-
- .uk-nav-default > li.uk-active > a {
- color: $inverse-nav-default-item-active-color;
- @if(mixin-exists(hook-inverse-nav-default-item-active)) {@include hook-inverse-nav-default-item-active();}
- }
-
- .uk-nav-default .uk-nav-header {
- color: $inverse-nav-default-header-color;
- @if(mixin-exists(hook-inverse-nav-default-header)) {@include hook-inverse-nav-default-header();}
- }
-
- .uk-nav-default .uk-nav-divider {
- border-top-color: $inverse-nav-default-divider-border;
- @if(mixin-exists(hook-inverse-nav-default-divider)) {@include hook-inverse-nav-default-divider();}
- }
-
- .uk-nav-default .uk-nav-sub a { color: $inverse-nav-default-sublist-item-color; }
-
- .uk-nav-default .uk-nav-sub a:hover,
- .uk-nav-default .uk-nav-sub a:focus { color: $inverse-nav-default-sublist-item-hover-color; }
-
- .uk-nav-default .uk-nav-sub li.uk-active > a { color: $inverse-nav-default-sublist-item-active-color; }
-
- //
- // Primary
- //
-
- .uk-nav-primary > li > a {
- color: $inverse-nav-primary-item-color;
- @if(mixin-exists(hook-inverse-nav-primary-item)) {@include hook-inverse-nav-primary-item();}
- }
-
- .uk-nav-primary > li > a:hover,
- .uk-nav-primary > li > a:focus {
- color: $inverse-nav-primary-item-hover-color;
- @if(mixin-exists(hook-inverse-nav-primary-item-hover)) {@include hook-inverse-nav-primary-item-hover();}
- }
-
- .uk-nav-primary > li.uk-active > a {
- color: $inverse-nav-primary-item-active-color;
- @if(mixin-exists(hook-inverse-nav-primary-item-active)) {@include hook-inverse-nav-primary-item-active();}
- }
-
- .uk-nav-primary .uk-nav-header {
- color: $inverse-nav-primary-header-color;
- @if(mixin-exists(hook-inverse-nav-primary-header)) {@include hook-inverse-nav-primary-header();}
- }
-
- .uk-nav-primary .uk-nav-divider {
- border-top-color: $inverse-nav-primary-divider-border;
- @if(mixin-exists(hook-inverse-nav-primary-divider)) {@include hook-inverse-nav-primary-divider();}
- }
-
- .uk-nav-primary .uk-nav-sub a { color: $inverse-nav-primary-sublist-item-color; }
-
- .uk-nav-primary .uk-nav-sub a:hover,
- .uk-nav-primary .uk-nav-sub a:focus { color: $inverse-nav-primary-sublist-item-hover-color; }
-
- .uk-nav-primary .uk-nav-sub li.uk-active > a { color: $inverse-nav-primary-sublist-item-active-color; }
-
- //
- // Dividers
- //
-
- .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
- border-top-color: $inverse-nav-dividers-border;
- @if(mixin-exists(hook-nav-dividers)) {@include hook-nav-dividers();}
- }
-
-}
-@mixin hook-inverse-component-navbar(){
-
- .uk-navbar-nav > li > a {
- color: $inverse-navbar-nav-item-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item)) {@include hook-inverse-navbar-nav-item();}
- }
-
- .uk-navbar-nav > li:hover > a,
- .uk-navbar-nav > li > a:focus,
- .uk-navbar-nav > li > a.uk-open {
- color: $inverse-navbar-nav-item-hover-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-hover)) {@include hook-inverse-navbar-nav-item-hover();}
- }
-
- .uk-navbar-nav > li > a:active {
- color: $inverse-navbar-nav-item-onclick-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-onclick)) {@include hook-inverse-navbar-nav-item-onclick();}
- }
-
- .uk-navbar-nav > li.uk-active > a {
- color: $inverse-navbar-nav-item-active-color;
- @if(mixin-exists(hook-inverse-navbar-nav-item-active)) {@include hook-inverse-navbar-nav-item-active();}
- }
-
- .uk-navbar-item {
- color: $inverse-navbar-item-color;
- @if(mixin-exists(hook-inverse-navbar-item)) {@include hook-inverse-navbar-item();}
- }
-
- .uk-navbar-toggle {
- color: $inverse-navbar-toggle-color;
- @if(mixin-exists(hook-inverse-navbar-toggle)) {@include hook-inverse-navbar-toggle();}
- }
-
- .uk-navbar-toggle:hover,
- .uk-navbar-toggle:focus,
- .uk-navbar-toggle.uk-open {
- color: $inverse-navbar-toggle-hover-color;
- @if(mixin-exists(hook-inverse-navbar-toggle-hover)) {@include hook-inverse-navbar-toggle-hover();}
- }
-
-}
-@mixin hook-inverse-component-subnav(){
-
- .uk-subnav > * > :first-child {
- color: $inverse-subnav-item-color;
- @if(mixin-exists(hook-inverse-subnav-item)) {@include hook-inverse-subnav-item();}
- }
-
- .uk-subnav > * > a:hover,
- .uk-subnav > * > a:focus {
- color: $inverse-subnav-item-hover-color;
- @if(mixin-exists(hook-inverse-subnav-item-hover)) {@include hook-inverse-subnav-item-hover();}
- }
-
- .uk-subnav > .uk-active > a {
- color: $inverse-subnav-item-active-color;
- @if(mixin-exists(hook-inverse-subnav-item-active)) {@include hook-inverse-subnav-item-active();}
- }
-
- //
- // Divider
- //
-
- .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before {
- border-left-color: $inverse-subnav-divider-border;
- @if(mixin-exists(hook-inverse-subnav-divider)) {@include hook-inverse-subnav-divider();}
- }
-
- //
- // Pill
- //
-
- .uk-subnav-pill > * > :first-child {
- background-color: $inverse-subnav-pill-item-background;
- color: $inverse-subnav-pill-item-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item)) {@include hook-inverse-subnav-pill-item();}
- }
-
- .uk-subnav-pill > * > a:hover,
- .uk-subnav-pill > * > a:focus {
- background-color: $inverse-subnav-pill-item-hover-background;
- color: $inverse-subnav-pill-item-hover-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-hover)) {@include hook-inverse-subnav-pill-item-hover();}
- }
-
- .uk-subnav-pill > * > a:active {
- background-color: $inverse-subnav-pill-item-onclick-background;
- color: $inverse-subnav-pill-item-onclick-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-onclick)) {@include hook-inverse-subnav-pill-item-onclick();}
- }
-
- .uk-subnav-pill > .uk-active > a {
- background-color: $inverse-subnav-pill-item-active-background;
- color: $inverse-subnav-pill-item-active-color;
- @if(mixin-exists(hook-inverse-subnav-pill-item-active)) {@include hook-inverse-subnav-pill-item-active();}
- }
-
- //
- // Disabled
- //
-
- .uk-subnav > .uk-disabled > a {
- color: $inverse-subnav-item-disabled-color;
- @if(mixin-exists(hook-inverse-subnav-item-disabled)) {@include hook-inverse-subnav-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-pagination(){
-
- .uk-pagination > * > * {
- color: $inverse-pagination-item-color;
- @if(mixin-exists(hook-inverse-pagination-item)) {@include hook-inverse-pagination-item();}
- }
-
- .uk-pagination > * > :hover,
- .uk-pagination > * > :focus {
- color: $inverse-pagination-item-hover-color;
- @if(mixin-exists(hook-inverse-pagination-item-hover)) {@include hook-inverse-pagination-item-hover();}
- }
-
- .uk-pagination > .uk-active > * {
- color: $inverse-pagination-item-active-color;
- @if(mixin-exists(hook-inverse-pagination-item-active)) {@include hook-inverse-pagination-item-active();}
- }
-
- .uk-pagination > .uk-disabled > * {
- color: $inverse-pagination-item-disabled-color;
- @if(mixin-exists(hook-inverse-pagination-item-disabled)) {@include hook-inverse-pagination-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-tab(){
-
- .uk-tab {
- @if(mixin-exists(hook-inverse-tab)) {@include hook-inverse-tab();}
- }
-
- .uk-tab > * > a {
- color: $inverse-tab-item-color;
- @if(mixin-exists(hook-inverse-tab-item)) {@include hook-inverse-tab-item();}
- }
-
- .uk-tab > * > a:hover,
- .uk-tab > * > a:focus{
- color: $inverse-tab-item-hover-color;
- @if(mixin-exists(hook-inverse-tab-item-hover)) {@include hook-inverse-tab-item-hover();}
- }
-
- .uk-tab > .uk-active > a {
- color: $inverse-tab-item-active-color;
- @if(mixin-exists(hook-inverse-tab-item-active)) {@include hook-inverse-tab-item-active();}
- }
-
- .uk-tab > .uk-disabled > a {
- color: $inverse-tab-item-disabled-color;
- @if(mixin-exists(hook-inverse-tab-item-disabled)) {@include hook-inverse-tab-item-disabled();}
- }
-
-}
-@mixin hook-inverse-component-slidenav(){
-
- .uk-slidenav {
- color: $inverse-slidenav-color;
- @if(mixin-exists(hook-inverse-slidenav)) {@include hook-inverse-slidenav();}
- }
-
- .uk-slidenav:hover,
- .uk-slidenav:focus {
- color: $inverse-slidenav-hover-color;
- @if(mixin-exists(hook-inverse-slidenav-hover)) {@include hook-inverse-slidenav-hover();}
- }
-
- .uk-slidenav:active {
- color: $inverse-slidenav-active-color;
- @if(mixin-exists(hook-inverse-slidenav-active)) {@include hook-inverse-slidenav-active();}
- }
-
-}
-@mixin hook-inverse-component-text(){
-
- .uk-text-lead {
- color: $inverse-text-lead-color;
- @if(mixin-exists(hook-inverse-text-lead)) {@include hook-inverse-text-lead();}
- }
-
- .uk-text-meta {
- color: $inverse-text-meta-color;
- @if(mixin-exists(hook-inverse-text-meta)) {@include hook-inverse-text-meta();}
- }
-
- .uk-text-muted { color: $inverse-text-muted-color !important; }
- .uk-text-emphasis { color: $inverse-text-emphasis-color !important; }
- .uk-text-primary { color: $inverse-text-primary-color !important; }
- .uk-text-secondary { color: $inverse-text-secondary-color !important; }
-
-}
-@mixin hook-inverse-component-utility(){
-
- .uk-dropcap::first-letter,
- .uk-dropcap p:first-of-type::first-letter {
- @if(mixin-exists(hook-inverse-dropcap)) {@include hook-inverse-dropcap();}
- }
-
- .uk-logo {
- color: $inverse-logo-color;
- @if(mixin-exists(hook-inverse-logo)) {@include hook-inverse-logo();}
- }
-
- .uk-logo:hover,
- .uk-logo:focus {
- color: $inverse-logo-hover-color;
- @if(mixin-exists(hook-inverse-logo-hover)) {@include hook-inverse-logo-hover();}
- }
-
- .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
- .uk-logo-inverse { display: inline; }
-
-}
-@mixin hook-inverse(){
- @include hook-inverse-component-base();
- @include hook-inverse-component-link();
- @include hook-inverse-component-heading();
- @include hook-inverse-component-divider();
- @include hook-inverse-component-list();
- @include hook-inverse-component-icon();
- @include hook-inverse-component-form();
- @include hook-inverse-component-button();
- @include hook-inverse-component-grid();
- @include hook-inverse-component-close();
- @include hook-inverse-component-totop();
- @include hook-inverse-component-badge();
- @include hook-inverse-component-label();
- @include hook-inverse-component-article();
- @include hook-inverse-component-search();
- @include hook-inverse-component-nav();
- @include hook-inverse-component-navbar();
- @include hook-inverse-component-subnav();
- @include hook-inverse-component-breadcrumb();
- @include hook-inverse-component-pagination();
- @include hook-inverse-component-tab();
- @include hook-inverse-component-slidenav();
- @include hook-inverse-component-dotnav();
- @include hook-inverse-component-accordion();
- @include hook-inverse-component-iconnav();
- @include hook-inverse-component-text();
- @include hook-inverse-component-column();
- @include hook-inverse-component-utility();
-}
-@mixin hook-label(){}
-@mixin hook-label-success(){}
-@mixin hook-label-warning(){}
-@mixin hook-label-danger(){}
-@mixin hook-label-misc(){}
-@mixin hook-inverse-label(){}
-@mixin hook-leader(){}
-@mixin hook-leader-misc(){}
-@mixin hook-inverse-leader(){}
-@mixin hook-inverse-component-leader(){
-
- .uk-leader-fill::after {
- @if(mixin-exists(hook-inverse-leader)) {@include hook-inverse-leader();}
- }
-
-}
-@mixin hook-lightbox(){}
-@mixin hook-lightbox-item(){}
-@mixin hook-lightbox-toolbar(){}
-@mixin hook-lightbox-toolbar-icon(){}
-@mixin hook-lightbox-toolbar-icon-hover(){}
-@mixin hook-lightbox-button(){}
-@mixin hook-lightbox-button-hover(){}
-@mixin hook-lightbox-button-active(){}
-@mixin hook-lightbox-misc(){}
-@mixin hook-link-muted(){}
-@mixin hook-link-muted-hover(){}
-@mixin hook-link-text(){}
-@mixin hook-link-text-hover(){}
-@mixin hook-link-heading(){}
-@mixin hook-link-heading-hover(){}
-@mixin hook-link-reset(){}
-@mixin hook-link-misc(){}
-@mixin hook-inverse-link-muted(){}
-@mixin hook-inverse-link-muted-hover(){}
-@mixin hook-inverse-link-text-hover(){}
-@mixin hook-inverse-link-heading-hover(){}
-@mixin hook-list-divider(){}
-@mixin hook-list-striped(){}
-@mixin hook-list-misc(){}
-@mixin hook-inverse-list-divider(){}
-@mixin hook-inverse-list-striped(){}
-@mixin hook-margin-misc(){}
-@mixin hook-marker(){}
-@mixin hook-marker-hover(){}
-@mixin hook-marker-misc(){}
-@mixin hook-inverse-marker(){}
-@mixin hook-inverse-marker-hover(){}
-@mixin hook-inverse-component-marker(){
-
- .uk-marker {
- background: $inverse-marker-background;
- color: $inverse-marker-color;
- @if(mixin-exists(hook-inverse-marker)) {@include hook-inverse-marker();}
- }
-
- .uk-marker:hover,
- .uk-marker:focus {
- color: $inverse-marker-hover-color;
- @if(mixin-exists(hook-inverse-marker-hover)) {@include hook-inverse-marker-hover();}
- }
-
-}
-@mixin hook-modal(){}
-@mixin hook-modal-dialog(){}
-@mixin hook-modal-full(){}
-@mixin hook-modal-body(){}
-@mixin hook-modal-header(){}
-@mixin hook-modal-footer(){}
-@mixin hook-modal-title(){}
-@mixin hook-modal-close(){}
-@mixin hook-modal-close-hover(){}
-@mixin hook-modal-close-default(){}
-@mixin hook-modal-close-default-hover(){}
-@mixin hook-modal-close-outside(){}
-@mixin hook-modal-close-outside-hover(){}
-@mixin hook-modal-close-full(){}
-@mixin hook-modal-close-full-hover(){}
-@mixin hook-modal-misc(){}
-@mixin hook-nav-sub(){}
-@mixin hook-nav-parent-icon(){}
-@mixin hook-nav-header(){}
-@mixin hook-nav-divider(){}
-@mixin hook-nav-default(){}
-@mixin hook-nav-default-item(){}
-@mixin hook-nav-default-item-hover(){}
-@mixin hook-nav-default-item-active(){}
-@mixin hook-nav-default-header(){}
-@mixin hook-nav-default-divider(){}
-@mixin hook-nav-primary(){}
-@mixin hook-nav-primary-item(){}
-@mixin hook-nav-primary-item-hover(){}
-@mixin hook-nav-primary-item-active(){}
-@mixin hook-nav-primary-header(){}
-@mixin hook-nav-primary-divider(){}
-@mixin hook-nav-dividers(){}
-@mixin hook-nav-misc(){}
-@mixin hook-inverse-nav-parent-icon(){}
-@mixin hook-inverse-nav-default-item(){}
-@mixin hook-inverse-nav-default-item-hover(){}
-@mixin hook-inverse-nav-default-item-active(){}
-@mixin hook-inverse-nav-default-header(){}
-@mixin hook-inverse-nav-default-divider(){}
-@mixin hook-inverse-nav-primary-item(){}
-@mixin hook-inverse-nav-primary-item-hover(){}
-@mixin hook-inverse-nav-primary-item-active(){}
-@mixin hook-inverse-nav-primary-header(){}
-@mixin hook-inverse-nav-primary-divider(){}
-@mixin hook-navbar(){}
-@mixin hook-navbar-container(){}
-@mixin hook-navbar-nav-item(){}
-@mixin hook-navbar-nav-item-hover(){}
-@mixin hook-navbar-nav-item-onclick(){}
-@mixin hook-navbar-nav-item-active(){}
-@mixin hook-navbar-item(){}
-@mixin hook-navbar-toggle(){}
-@mixin hook-navbar-toggle-hover(){}
-@mixin hook-navbar-toggle-icon(){}
-@mixin hook-navbar-toggle-icon-hover(){}
-@mixin hook-navbar-subtitle(){}
-@mixin hook-navbar-primary(){}
-@mixin hook-navbar-transparent(){}
-@mixin hook-navbar-sticky(){}
-@mixin hook-navbar-dropdown(){}
-@mixin hook-navbar-dropdown-dropbar(){}
-@mixin hook-navbar-dropdown-nav(){}
-@mixin hook-navbar-dropdown-nav-item(){}
-@mixin hook-navbar-dropdown-nav-item-hover(){}
-@mixin hook-navbar-dropdown-nav-item-active(){}
-@mixin hook-navbar-dropdown-nav-header(){}
-@mixin hook-navbar-dropdown-nav-divider(){}
-@mixin hook-navbar-dropbar(){}
-@mixin hook-navbar-dropbar-slide(){}
-@mixin hook-navbar-misc(){}
-@mixin hook-inverse-navbar-nav-item(){}
-@mixin hook-inverse-navbar-nav-item-hover(){}
-@mixin hook-inverse-navbar-nav-item-onclick(){}
-@mixin hook-inverse-navbar-nav-item-active(){}
-@mixin hook-inverse-navbar-item(){}
-@mixin hook-inverse-navbar-toggle(){}
-@mixin hook-inverse-navbar-toggle-hover(){}
-@mixin hook-notification(){}
-@mixin hook-notification-message(){}
-@mixin hook-notification-close(){}
-@mixin hook-notification-message-primary(){}
-@mixin hook-notification-message-success(){}
-@mixin hook-notification-message-warning(){}
-@mixin hook-notification-message-danger(){}
-@mixin hook-notification-misc(){}
-@mixin hook-offcanvas-bar(){}
-@mixin hook-offcanvas-close(){}
-@mixin hook-offcanvas-overlay(){}
-@mixin hook-offcanvas-misc(){}
-@mixin hook-overlay(){}
-@mixin hook-overlay-icon(){}
-@mixin hook-overlay-default(){}
-@mixin hook-overlay-primary(){}
-@mixin hook-overlay-misc(){}
-@mixin hook-padding-misc(){}
-@mixin hook-pagination(){}
-@mixin hook-pagination-item(){}
-@mixin hook-pagination-item-hover(){}
-@mixin hook-pagination-item-active(){}
-@mixin hook-pagination-item-disabled(){}
-@mixin hook-pagination-misc(){}
-@mixin hook-inverse-pagination-item(){}
-@mixin hook-inverse-pagination-item-hover(){}
-@mixin hook-inverse-pagination-item-active(){}
-@mixin hook-inverse-pagination-item-disabled(){}
-@mixin hook-placeholder(){}
-@mixin hook-placeholder-misc(){}
-@mixin hook-position-misc(){}
-@mixin hook-print(){}
-@mixin hook-progress(){}
-@mixin hook-progress-bar(){}
-@mixin hook-progress-misc(){}
-@mixin hook-search-input(){}
-@mixin hook-search-default-input(){}
-@mixin hook-search-default-input-focus(){}
-@mixin hook-search-navbar-input(){}
-@mixin hook-search-large-input(){}
-@mixin hook-search-toggle(){}
-@mixin hook-search-toggle-hover(){}
-@mixin hook-search-misc(){}
-@mixin hook-inverse-search-default-input(){}
-@mixin hook-inverse-search-default-input-focus(){}
-@mixin hook-inverse-search-navbar-input(){}
-@mixin hook-inverse-search-large-input(){}
-@mixin hook-inverse-search-toggle(){}
-@mixin hook-inverse-search-toggle-hover(){}
-@mixin hook-section(){}
-@mixin hook-section-default(){}
-@mixin hook-section-muted(){}
-@mixin hook-section-primary(){}
-@mixin hook-section-secondary(){}
-@mixin hook-section-overlap(){}
-@mixin hook-section-misc(){}
-@mixin hook-slidenav(){}
-@mixin hook-slidenav-hover(){}
-@mixin hook-slidenav-active(){}
-@mixin hook-slidenav-previous(){}
-@mixin hook-slidenav-next(){}
-@mixin hook-slidenav-large(){}
-@mixin hook-slidenav-container(){}
-@mixin hook-slidenav-misc(){}
-@mixin hook-inverse-slidenav(){}
-@mixin hook-inverse-slidenav-hover(){}
-@mixin hook-inverse-slidenav-active(){}
-@mixin hook-slider(){}
-@mixin hook-slider-misc(){}
-@mixin hook-slideshow(){}
-@mixin hook-slideshow-misc(){}
-@mixin hook-sortable(){}
-@mixin hook-sortable-drag(){}
-@mixin hook-sortable-placeholder(){}
-@mixin hook-sortable-empty(){}
-@mixin hook-sortable-misc(){}
-@mixin hook-spinner(){}
-@mixin hook-spinner-misc(){}
-@mixin hook-sticky-misc(){}
-@mixin hook-subnav(){}
-@mixin hook-subnav-item(){}
-@mixin hook-subnav-item-hover(){}
-@mixin hook-subnav-item-active(){}
-@mixin hook-subnav-divider(){}
-@mixin hook-subnav-pill-item(){}
-@mixin hook-subnav-pill-item-hover(){}
-@mixin hook-subnav-pill-item-onclick(){}
-@mixin hook-subnav-pill-item-active(){}
-@mixin hook-subnav-item-disabled(){}
-@mixin hook-subnav-misc(){}
-@mixin hook-inverse-subnav-item(){}
-@mixin hook-inverse-subnav-item-hover(){}
-@mixin hook-inverse-subnav-item-active(){}
-@mixin hook-inverse-subnav-divider(){}
-@mixin hook-inverse-subnav-pill-item(){}
-@mixin hook-inverse-subnav-pill-item-hover(){}
-@mixin hook-inverse-subnav-pill-item-onclick(){}
-@mixin hook-inverse-subnav-pill-item-active(){}
-@mixin hook-inverse-subnav-item-disabled(){}
-@mixin hook-svg-misc(){}
-@mixin hook-switcher-misc(){}
-@mixin hook-tab(){}
-@mixin hook-tab-item(){}
-@mixin hook-tab-item-hover(){}
-@mixin hook-tab-item-active(){}
-@mixin hook-tab-item-disabled(){}
-@mixin hook-tab-bottom(){}
-@mixin hook-tab-bottom-item(){}
-@mixin hook-tab-left(){}
-@mixin hook-tab-right(){}
-@mixin hook-tab-left-item(){}
-@mixin hook-tab-right-item(){}
-@mixin hook-tab-misc(){}
-@mixin hook-inverse-tab(){}
-@mixin hook-inverse-tab-item(){}
-@mixin hook-inverse-tab-item-hover(){}
-@mixin hook-inverse-tab-item-active(){}
-@mixin hook-inverse-tab-item-disabled(){}
-@mixin hook-table(){}
-@mixin hook-table-header-cell(){}
-@mixin hook-table-cell(){}
-@mixin hook-table-footer(){}
-@mixin hook-table-caption(){}
-@mixin hook-table-divider(){}
-@mixin hook-table-striped(){}
-@mixin hook-table-hover(){}
-@mixin hook-table-row-active(){}
-@mixin hook-table-small(){}
-@mixin hook-table-large(){}
-@mixin hook-table-misc(){}
-@mixin hook-inverse-table-header-cell(){}
-@mixin hook-inverse-table-caption(){}
-@mixin hook-inverse-table-row-active(){}
-@mixin hook-inverse-table-divider(){}
-@mixin hook-inverse-table-striped(){}
-@mixin hook-inverse-table-hover(){}
-@mixin hook-inverse-component-table(){
-
- .uk-table th {
- color: $inverse-table-header-cell-color;
- @if(mixin-exists(hook-inverse-table-header-cell)) {@include hook-inverse-table-header-cell();}
- }
-
- .uk-table caption {
- color: $inverse-table-caption-color;
- @if(mixin-exists(hook-inverse-table-caption)) {@include hook-inverse-table-caption();}
- }
-
- .uk-table > tr.uk-active,
- .uk-table tbody tr.uk-active {
- background: $inverse-table-row-active-background;
- @if(mixin-exists(hook-inverse-table-row-active)) {@include hook-inverse-table-row-active();}
- }
-
- .uk-table-divider > tr:not(:first-child),
- .uk-table-divider > :not(:first-child) > tr,
- .uk-table-divider > :first-child > tr:not(:first-child) {
- border-top-color: $inverse-table-divider-border;
- @if(mixin-exists(hook-inverse-table-divider)) {@include hook-inverse-table-divider();}
- }
-
- .uk-table-striped > tr:nth-of-type(odd),
- .uk-table-striped tbody tr:nth-of-type(odd) {
- background: $inverse-table-striped-row-background;
- @if(mixin-exists(hook-inverse-table-striped)) {@include hook-inverse-table-striped();}
- }
-
- .uk-table-hover > tr:hover,
- .uk-table-hover tbody tr:hover {
- background: $inverse-table-hover-row-background;
- @if(mixin-exists(hook-inverse-table-hover)) {@include hook-inverse-table-hover();}
- }
-
-}
-@mixin hook-text-lead(){}
-@mixin hook-text-meta(){}
-@mixin hook-text-small(){}
-@mixin hook-text-large(){}
-@mixin hook-text-background(){}
-@mixin hook-text-misc(){}
-@mixin hook-inverse-text-lead(){}
-@mixin hook-inverse-text-meta(){}
-@mixin hook-thumbnav(){}
-@mixin hook-thumbnav-item(){}
-@mixin hook-thumbnav-item-hover(){}
-@mixin hook-thumbnav-item-active(){}
-@mixin hook-thumbnav-misc(){}
-@mixin hook-inverse-thumbnav-item(){}
-@mixin hook-inverse-thumbnav-item-hover(){}
-@mixin hook-inverse-thumbnav-item-active(){}
-@mixin hook-inverse-component-thumbnav(){
-
- .uk-thumbnav > * > * {
- @if(mixin-exists(hook-inverse-thumbnav-item)) {@include hook-inverse-thumbnav-item();}
- }
-
- .uk-thumbnav > * > :hover,
- .uk-thumbnav > * > :focus {
- @if(mixin-exists(hook-inverse-thumbnav-item-hover)) {@include hook-inverse-thumbnav-item-hover();}
- }
-
- .uk-thumbnav > .uk-active > * {
- @if(mixin-exists(hook-inverse-thumbnav-item-active)) {@include hook-inverse-thumbnav-item-active();}
- }
-
-}
-@mixin hook-tile(){}
-@mixin hook-tile-default(){}
-@mixin hook-tile-muted(){}
-@mixin hook-tile-primary(){}
-@mixin hook-tile-secondary(){}
-@mixin hook-tile-misc(){}
-@mixin hook-tooltip(){}
-@mixin hook-tooltip-misc(){}
-@mixin hook-totop(){}
-@mixin hook-totop-hover(){}
-@mixin hook-totop-active(){}
-@mixin hook-totop-misc(){}
-@mixin hook-inverse-totop(){}
-@mixin hook-inverse-totop-hover(){}
-@mixin hook-inverse-totop-active(){}
-@mixin hook-transition-misc(){}
-@mixin hook-panel-scrollable(){}
-@mixin hook-box-shadow-bottom(){}
-@mixin hook-dropcap(){}
-@mixin hook-logo(){}
-@mixin hook-logo-hover(){}
-@mixin hook-utility-misc(){}
-@mixin hook-inverse-dropcap(){}
-@mixin hook-inverse-logo(){}
-@mixin hook-inverse-logo-hover(){}
-@mixin hook-visibility-misc(){}
-@mixin hook-width-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/_import.scss b/docs/_sass/uikit/theme/_import.scss
deleted file mode 100644
index ab4a71d491..0000000000
--- a/docs/_sass/uikit/theme/_import.scss
+++ /dev/null
@@ -1,81 +0,0 @@
-// Base
-@import "https://github.com/variables";
-@import "https://github.com/base";
-
-// Elements
-@import "https://github.com/link";
-@import "https://github.com/heading";
-@import "https://github.com/divider";
-@import "https://github.com/list";
-@import "https://github.com/description-list";
-@import "https://github.com/table";
-@import "https://github.com/icon";
-@import "https://github.com/form-range";
-@import "https://github.com/form";
-@import "https://github.com/button";
-@import "https://github.com/progress";
-
-// Layout
-@import "https://github.com/section";
-@import "https://github.com/container";
-@import "https://github.com/tile";
-@import "https://github.com/card";
-
-// Common
-@import "https://github.com/close";
-@import "https://github.com/spinner";
-@import "https://github.com/marker";
-@import "https://github.com/totop";
-@import "https://github.com/alert";
-@import "https://github.com/placeholder";
-@import "https://github.com/badge";
-@import "https://github.com/label";
-@import "https://github.com/overlay";
-@import "https://github.com/article";
-@import "https://github.com/comment";
-@import "https://github.com/search";
-
-// JavaScript
-@import "https://github.com/accordion";
-@import "https://github.com/drop";
-@import "https://github.com/dropdown";
-@import "https://github.com/modal";
-@import "https://github.com/slider";
-@import "https://github.com/sticky";
-@import "https://github.com/offcanvas";
-@import "https://github.com/leader";
-@import "https://github.com/notification";
-@import "https://github.com/tooltip";
-@import "https://github.com/sortable";
-@import "https://github.com/countdown";
-
-@import "https://github.com/grid";
-
-// Navs
-@import "https://github.com/nav";
-@import "https://github.com/navbar";
-@import "https://github.com/subnav";
-@import "https://github.com/breadcrumb";
-@import "https://github.com/pagination";
-@import "https://github.com/tab";
-@import "https://github.com/slidenav";
-@import "https://github.com/dotnav";
-@import "https://github.com/thumbnav";
-@import "https://github.com/iconnav";
-
-@import "https://github.com/lightbox";
-
-// Utilities
-@import "https://github.com/animation";
-@import "https://github.com/width";
-@import "https://github.com/height";
-@import "https://github.com/text";
-@import "https://github.com/column";
-@import "https://github.com/background";
-@import "https://github.com/align";
-@import "https://github.com/utility";
-@import "https://github.com/margin";
-@import "https://github.com/padding";
-@import "https://github.com/position";
-@import "https://github.com/transition";
-@import "https://github.com/inverse";
diff --git a/docs/_sass/uikit/theme/accordion.scss b/docs/_sass/uikit/theme/accordion.scss
deleted file mode 100644
index ae25a64afe..0000000000
--- a/docs/_sass/uikit/theme/accordion.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Component: Accordion
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$accordion-icon-margin-left: 10px !default;
-$accordion-icon-color: $global-color !default;
-$internal-accordion-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-accordion-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-accordion(){}
-
-
-// Item
-// ========================================================================
-
-// @mixin hook-accordion-item(){}
-
-
-// Title
-// ========================================================================
-
-
-
-// @mixin hook-accordion-title-hover(){}
-
-
-// Content
-// ========================================================================
-
-// @mixin hook-accordion-content(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-accordion-misc(){}
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-accordion-item(){}
-
-// @mixin hook-inverse-accordion-title(){}
-// @mixin hook-inverse-accordion-title-hover(){}
-
-
diff --git a/docs/_sass/uikit/theme/alert.scss b/docs/_sass/uikit/theme/alert.scss
deleted file mode 100644
index c4baa7ca90..0000000000
--- a/docs/_sass/uikit/theme/alert.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Component: Alert
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$alert-close-opacity: 0.4 !default;
-$alert-close-hover-opacity: 0.8 !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-alert(){}
-
-
-// Close
-// ========================================================================
-
-
-
-
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-alert-primary(){}
-
-// @mixin hook-alert-success(){}
-
-// @mixin hook-alert-warning(){}
-
-// @mixin hook-alert-danger(){}
-
-
-// Miscellaneous
-// ========================================================================
-
diff --git a/docs/_sass/uikit/theme/align.scss b/docs/_sass/uikit/theme/align.scss
deleted file mode 100644
index 290abd4115..0000000000
--- a/docs/_sass/uikit/theme/align.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Align
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-align-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/animation.scss b/docs/_sass/uikit/theme/animation.scss
deleted file mode 100644
index 03ebbc6eae..0000000000
--- a/docs/_sass/uikit/theme/animation.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Animation
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-animation-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/article.scss b/docs/_sass/uikit/theme/article.scss
deleted file mode 100644
index a698e3ed18..0000000000
--- a/docs/_sass/uikit/theme/article.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Component: Article
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$article-meta-link-color: $article-meta-color !default;
-$article-meta-link-hover-color: $global-color !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-article(){}
-
-
-// Adjacent sibling
-// ========================================================================
-
-// @mixin hook-article-adjacent(){}
-
-
-// Title
-// ========================================================================
-
-// @mixin hook-article-title(){}
-
-
-// Meta
-// ========================================================================
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-article-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-article-meta(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/background.scss b/docs/_sass/uikit/theme/background.scss
deleted file mode 100644
index 29e062e9d2..0000000000
--- a/docs/_sass/uikit/theme/background.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Background
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-background-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/badge.scss b/docs/_sass/uikit/theme/badge.scss
deleted file mode 100644
index 22ae937122..0000000000
--- a/docs/_sass/uikit/theme/badge.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Component: Badge
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-badge(){}
-
-// @mixin hook-badge-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-badge-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-badge(){}
-// @mixin hook-inverse-badge-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/base.scss b/docs/_sass/uikit/theme/base.scss
deleted file mode 100644
index 2c1c33569e..0000000000
--- a/docs/_sass/uikit/theme/base.scss
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// Component: Base
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$base-code-padding-horizontal: 6px !default;
-$base-code-padding-vertical: 2px !default;
-$base-code-background: $global-muted-background !default;
-
-$base-blockquote-color: $global-emphasis-color !default;
-
-$base-blockquote-footer-color: $global-color !default;
-
-$base-pre-padding: 10px !default;
-$base-pre-background: $global-background !default;
-$base-pre-border-width: $global-border-width !default;
-$base-pre-border: $global-border !default;
-$base-pre-border-radius: 3px !default;
-
-
-// Body
-// ========================================================================
-
-// @mixin hook-base-body(){}
-
-
-// Links
-// ========================================================================
-
-// @mixin hook-base-link(){}
-
-// @mixin hook-base-link-hover(){}
-
-
-// Text-level semantics
-// ========================================================================
-
-
-
-
-// Headings
-// ========================================================================
-
-// @mixin hook-base-heading(){}
-
-// @mixin hook-base-h1(){}
-
-// @mixin hook-base-h2(){}
-
-// @mixin hook-base-h3(){}
-
-// @mixin hook-base-h4(){}
-
-// @mixin hook-base-h5(){}
-
-// @mixin hook-base-h6(){}
-
-
-// Horizontal rules
-// ========================================================================
-
-// @mixin hook-base-hr(){}
-
-
-// Blockquotes
-// ========================================================================
-
-
-
-
-
-
-// Preformatted text
-// ========================================================================
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-base-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-base-blockquote-color: $inverse-global-emphasis-color !default;
-$inverse-base-blockquote-footer-color: $inverse-global-color !default;
-
-// @mixin hook-inverse-base-link(){}
-// @mixin hook-inverse-base-link-hover(){}
-
-
-
-// @mixin hook-inverse-base-heading(){}
-
-// @mixin hook-inverse-base-h1(){}
-// @mixin hook-inverse-base-h2(){}
-// @mixin hook-inverse-base-h3(){}
-// @mixin hook-inverse-base-h4(){}
-// @mixin hook-inverse-base-h5(){}
-// @mixin hook-inverse-base-h6(){}
-
-
-
-
-// @mixin hook-inverse-base-hr(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/breadcrumb.scss b/docs/_sass/uikit/theme/breadcrumb.scss
deleted file mode 100644
index 40c04e5d9e..0000000000
--- a/docs/_sass/uikit/theme/breadcrumb.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Component: Breadcrumb
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-breadcrumb(){}
-
-
-// Items
-// ========================================================================
-
-// @mixin hook-breadcrumb-item(){}
-
-// @mixin hook-breadcrumb-item-hover(){}
-
-// @mixin hook-breadcrumb-item-disabled(){}
-
-// @mixin hook-breadcrumb-item-active(){}
-
-// @mixin hook-breadcrumb-divider(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-breadcrumb-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-breadcrumb-item(){}
-// @mixin hook-inverse-breadcrumb-item-hover(){}
-// @mixin hook-inverse-breadcrumb-item-disabled(){}
-// @mixin hook-inverse-breadcrumb-item-active(){}
-
-// @mixin hook-inverse-breadcrumb-divider(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/button.scss b/docs/_sass/uikit/theme/button.scss
deleted file mode 100644
index d78c38933f..0000000000
--- a/docs/_sass/uikit/theme/button.scss
+++ /dev/null
@@ -1,159 +0,0 @@
-//
-// Component: Button
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$button-line-height: $global-control-height - ($button-border-width * 2) !default;
-$button-small-line-height: $global-control-small-height - ($button-border-width * 2) !default;
-$button-large-line-height: $global-control-large-height - ($button-border-width * 2) !default;
-
-$button-font-size: $global-small-font-size !default;
-$button-large-font-size: $global-small-font-size !default;
-
-$button-default-background: transparent !default;
-$button-default-hover-background: transparent !default;
-$button-default-active-background: transparent !default;
-
-$button-disabled-background: transparent !default;
-
-$button-text-hover-color: $global-emphasis-color !default;
-
-//
-// New
-//
-
-$button-text-transform: uppercase !default;
-
-$button-border-width: $global-border-width !default;
-
-$button-default-border: $global-border !default;
-$button-default-hover-border: darken($global-border, 20%) !default;
-$button-default-active-border: darken($global-border, 30%) !default;
-
-$button-disabled-border: $global-border !default;
-
-$button-text-border-width: $global-border-width !default;
-$button-text-border: $button-text-hover-color !default;
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-button-hover(){}
-
-// @mixin hook-button-focus(){}
-
-// @mixin hook-button-active(){}
-
-
-// Style modifiers
-// ========================================================================
-
-
-
-
-
-
-
-//
-// Primary
-//
-
-
-
-// @mixin hook-button-primary-hover(){}
-
-// @mixin hook-button-primary-active(){}
-
-//
-// Secondary
-//
-
-
-
-// @mixin hook-button-secondary-hover(){}
-
-// @mixin hook-button-secondary-active(){}
-
-//
-// Danger
-//
-
-
-
-// @mixin hook-button-danger-hover(){}
-
-// @mixin hook-button-danger-active(){}
-
-
-// Disabled
-// ========================================================================
-
-
-
-
-// Size modifiers
-// ========================================================================
-
-// @mixin hook-button-small(){}
-
-// @mixin hook-button-large(){}
-
-
-// Text modifier
-// ========================================================================
-
-
-
-
-
-
-
-
-// Link modifier
-// ========================================================================
-
-// @mixin hook-button-link(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-
-
-
-// Inverse
-// ========================================================================
-
-$inverse-button-default-background: transparent !default;
-$inverse-button-default-color: $inverse-global-emphasis-color !default;
-$inverse-button-default-hover-background: transparent !default;
-$inverse-button-default-hover-color: $inverse-global-emphasis-color !default;
-$inverse-button-default-active-background: transparent !default;
-$inverse-button-default-active-color: $inverse-global-emphasis-color !default;
-
-$inverse-button-text-hover-color: $inverse-global-emphasis-color !default;
-
-
-
-
-
-// @mixin hook-inverse-button-primary(){}
-// @mixin hook-inverse-button-primary-hover(){}
-// @mixin hook-inverse-button-primary-active(){}
-
-// @mixin hook-inverse-button-secondary(){}
-// @mixin hook-inverse-button-secondary-hover(){}
-// @mixin hook-inverse-button-secondary-active(){}
-
-
-// @mixin hook-inverse-button-text-hover(){}
-// @mixin hook-inverse-button-text-disabled(){}
-
-// @mixin hook-inverse-button-link(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/card.scss b/docs/_sass/uikit/theme/card.scss
deleted file mode 100644
index 7eb4deee98..0000000000
--- a/docs/_sass/uikit/theme/card.scss
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-// Component: Card
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$card-hover-background: $global-background !default;
-
-$card-default-background: $global-background !default;
-$card-default-hover-background: $card-default-background !default;
-
-$card-primary-hover-background: $card-primary-background !default;
-
-$card-secondary-hover-background: $card-secondary-background !default;
-
-//
-// New
-//
-
-$card-badge-border-radius: 2px !default;
-$card-badge-text-transform: uppercase !default;
-
-$card-hover-box-shadow: $global-large-box-shadow !default;
-
-$card-default-box-shadow: $global-medium-box-shadow !default;
-$card-default-hover-box-shadow: $global-large-box-shadow !default;
-
-$card-default-header-border-width: $global-border-width !default;
-$card-default-header-border: $global-border !default;
-
-$card-default-footer-border-width: $global-border-width !default;
-$card-default-footer-border: $global-border !default;
-
-$card-primary-box-shadow: $global-medium-box-shadow !default;
-$card-primary-hover-box-shadow: $global-large-box-shadow !default;
-
-$card-secondary-box-shadow: $global-medium-box-shadow !default;
-$card-secondary-hover-box-shadow: $global-large-box-shadow !default;
-
-
-// Component
-// ========================================================================
-
-
-
-
-// Sections
-// ========================================================================
-
-// @mixin hook-card-body(){}
-
-// @mixin hook-card-header(){}
-
-// @mixin hook-card-footer(){}
-
-
-// Media
-// ========================================================================
-
-// @mixin hook-card-media(){}
-
-// @mixin hook-card-media-top(){}
-
-// @mixin hook-card-media-bottom(){}
-
-// @mixin hook-card-media-left(){}
-
-// @mixin hook-card-media-right(){}
-
-
-// Title
-// ========================================================================
-
-// @mixin hook-card-title(){}
-
-
-// Badge
-// ========================================================================
-
-
-
-
-// Hover modifier
-// ========================================================================
-
-
-
-
-// Style modifiers
-// ========================================================================
-
-
-
-// @mixin hook-card-default-title(){}
-
-
-
-
-
-
-
-//
-// Primary
-//
-
-
-
-// @mixin hook-card-primary-title(){}
-
-
-
-//
-// Secondary
-//
-
-
-
-// @mixin hook-card-secondary-title(){}
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
diff --git a/docs/_sass/uikit/theme/close.scss b/docs/_sass/uikit/theme/close.scss
deleted file mode 100644
index f0762942f8..0000000000
--- a/docs/_sass/uikit/theme/close.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Component: Close
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-close-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-close-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-close(){}
-// @mixin hook-inverse-close-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/column.scss b/docs/_sass/uikit/theme/column.scss
deleted file mode 100644
index 80be850572..0000000000
--- a/docs/_sass/uikit/theme/column.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Column
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-column-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/comment.scss b/docs/_sass/uikit/theme/comment.scss
deleted file mode 100644
index a486c59142..0000000000
--- a/docs/_sass/uikit/theme/comment.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// Component: Comment
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$comment-primary-padding: $global-gutter !default;
-$comment-primary-background: $global-muted-background !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-comment(){}
-
-
-// Sections
-// ========================================================================
-
-// @mixin hook-comment-body(){}
-
-// @mixin hook-comment-header(){}
-
-
-// Title
-// ========================================================================
-
-// @mixin hook-comment-title(){}
-
-
-// Meta
-// ========================================================================
-
-// @mixin hook-comment-meta(){}
-
-
-// Avatar
-// ========================================================================
-
-// @mixin hook-comment-avatar(){}
-
-
-// List
-// ========================================================================
-
-// @mixin hook-comment-list-adjacent(){}
-
-// @mixin hook-comment-list-sub(){}
-
-// @mixin hook-comment-list-sub-adjacent(){}
-
-
-// Style modifier
-// ========================================================================
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-comment-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/container.scss b/docs/_sass/uikit/theme/container.scss
deleted file mode 100644
index ba77ded72e..0000000000
--- a/docs/_sass/uikit/theme/container.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Container
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-container-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/countdown.scss b/docs/_sass/uikit/theme/countdown.scss
deleted file mode 100644
index 01f1761ca3..0000000000
--- a/docs/_sass/uikit/theme/countdown.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Component: Countdown
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-countdown(){}
-
-
-// Item
-// ========================================================================
-
-// @mixin hook-countdown-item(){}
-
-
-// Number
-// ========================================================================
-
-// @mixin hook-countdown-number(){}
-
-
-// Separator
-// ========================================================================
-
-// @mixin hook-countdown-separator(){}
-
-
-// Label
-// ========================================================================
-
-// @mixin hook-countdown-label(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-countdown-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-countdown-item(){}
-// @mixin hook-inverse-countdown-number(){}
-// @mixin hook-inverse-countdown-separator(){}
-// @mixin hook-inverse-countdown-label(){}
diff --git a/docs/_sass/uikit/theme/description-list.scss b/docs/_sass/uikit/theme/description-list.scss
deleted file mode 100644
index 8f836d6321..0000000000
--- a/docs/_sass/uikit/theme/description-list.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Description list
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$description-list-term-font-size: $global-small-font-size !default;
-$description-list-term-font-weight: normal !default;
-$description-list-term-text-transform: uppercase !default;
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-description-list-description(){}
-
-
-// Style modifier
-// ========================================================================
-
-// @mixin hook-description-list-divider-term(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-description-list-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/divider.scss b/docs/_sass/uikit/theme/divider.scss
deleted file mode 100644
index 1273b2a9ec..0000000000
--- a/docs/_sass/uikit/theme/divider.scss
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Component: Divider
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Icon
-// ========================================================================
-
-// @mixin hook-divider-icon(){}
-
-// @mixin hook-divider-icon-line(){}
-
-// @mixin hook-divider-icon-line-left(){}
-
-// @mixin hook-divider-icon-line-right(){}
-
-
-// Small
-// ========================================================================
-
-// @mixin hook-divider-small(){}
-
-
-// Vertical
-// ========================================================================
-
-// @mixin hook-divider-vertical(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-divider-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-divider-icon(){}
-// @mixin hook-inverse-divider-icon-line(){}
-
-// @mixin hook-inverse-divider-small(){}
-
-// @mixin hook-inverse-divider-vertical(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/dotnav.scss b/docs/_sass/uikit/theme/dotnav.scss
deleted file mode 100644
index 1bc835970f..0000000000
--- a/docs/_sass/uikit/theme/dotnav.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Component: Dotnav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$dotnav-item-background: transparent !default;
-
-//
-// New
-//
-
-$dotnav-item-border-width: 1px !default;
-
-$dotnav-item-border: rgba($global-color, 0.4) !default;
-$dotnav-item-hover-border: transparent !default;
-$dotnav-item-onclick-border: transparent !default;
-$dotnav-item-active-border: transparent !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-dotnav(){}
-
-
-
-
-
-
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-dotnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-dotnav-item-background: transparent !default;
-
-// @mixin hook-inverse-dotnav(){}
-
-
-
diff --git a/docs/_sass/uikit/theme/drop.scss b/docs/_sass/uikit/theme/drop.scss
deleted file mode 100644
index 6940984871..0000000000
--- a/docs/_sass/uikit/theme/drop.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Drop
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-drop-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/dropdown.scss b/docs/_sass/uikit/theme/dropdown.scss
deleted file mode 100644
index c5aa02ef44..0000000000
--- a/docs/_sass/uikit/theme/dropdown.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Component: Dropdown
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$dropdown-padding: 25px !default;
-$dropdown-background: $global-background !default;
-
-//
-// New
-//
-
-$dropdown-nav-font-size: $global-small-font-size !default;
-
-$dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15) !default;
-
-
-// Component
-// ========================================================================
-
-
-
-
-// Nav
-// ========================================================================
-
-
-
-// @mixin hook-dropdown-nav-item(){}
-
-// @mixin hook-dropdown-nav-item-hover(){}
-
-// @mixin hook-dropdown-nav-header(){}
-
-// @mixin hook-dropdown-nav-divider(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-dropdown-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/form-range.scss b/docs/_sass/uikit/theme/form-range.scss
deleted file mode 100644
index ca424f30e3..0000000000
--- a/docs/_sass/uikit/theme/form-range.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Component: Form Range
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$form-range-thumb-background: $global-background !default;
-
-//
-// New
-//
-
-$form-range-thumb-border-width: $global-border-width !default;
-$form-range-thumb-border: darken($global-border, 10%) !default;
-
-$form-range-track-border-radius: 500px !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-form-range(){}
-
-
-// Thumb
-// ========================================================================
-
-
-
-
-// Track
-// ========================================================================
-
-
-
-// @mixin hook-form-range-track-focus(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-form-range-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/form.scss b/docs/_sass/uikit/theme/form.scss
deleted file mode 100644
index ef80695839..0000000000
--- a/docs/_sass/uikit/theme/form.scss
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Component: Form
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$form-line-height: $form-height - (2* $form-border-width) !default;
-
-$form-background: $global-background !default;
-$form-focus-background: $global-background !default;
-
-$form-small-line-height: $form-small-height - (2* $form-border-width) !default;
-$form-large-line-height: $form-large-height - (2* $form-border-width) !default;
-
-$form-radio-background: transparent !default;
-
-$form-stacked-margin-bottom: 5px !default;
-
-//
-// New
-//
-
-$form-border-width: $global-border-width !default;
-$form-border: $global-border !default;
-
-$form-focus-border: $global-primary-background !default;
-
-$form-disabled-border: $global-border !default;
-
-$form-danger-border: $global-danger-background !default;
-$form-success-border: $global-success-background !default;
-
-$form-blank-focus-border: $global-border !default;
-$form-blank-focus-border-style: dashed !default;
-
-$form-radio-border-width: $global-border-width !default;
-$form-radio-border: darken($global-border, 10%) !default;
-
-$form-radio-focus-border: $global-primary-background !default;
-
-$form-radio-checked-border: transparent !default;
-
-$form-radio-disabled-border: $global-border !default;
-
-$form-label-color: $global-emphasis-color !default;
-$form-label-font-size: $global-small-font-size !default;
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-form-single-line(){}
-
-// @mixin hook-form-multi-line(){}
-
-
-
-
-
-
-// Style modifiers
-// ========================================================================
-
-
-
-
-
-
-
-
-
-
-// Radio and checkbox
-// ========================================================================
-
-
-
-
-
-
-
-// @mixin hook-form-radio-checked-focus(){}
-
-
-
-
-// Legend
-// ========================================================================
-
-// @mixin hook-form-legend(){}
-
-
-// Label
-// ========================================================================
-
-
-
-
-// Layout
-// ========================================================================
-
-// @mixin hook-form-stacked-label(){}
-
-// @mixin hook-form-horizontal-label(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-form-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-form-label-color: $inverse-global-emphasis-color !default;
-
-
-
-
-
-
-
-
-// @mixin hook-inverse-form-radio-checked-focus(){}
-
diff --git a/docs/_sass/uikit/theme/grid.scss b/docs/_sass/uikit/theme/grid.scss
deleted file mode 100644
index 1b3779f809..0000000000
--- a/docs/_sass/uikit/theme/grid.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Component: Grid
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Divider
-// ========================================================================
-
-// @mixin hook-grid-divider-horizontal(){}
-// @mixin hook-grid-divider-vertical(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-grid-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-grid-divider-horizontal(){}
-// @mixin hook-inverse-grid-divider-vertical(){}
diff --git a/docs/_sass/uikit/theme/heading.scss b/docs/_sass/uikit/theme/heading.scss
deleted file mode 100644
index 9ec067428a..0000000000
--- a/docs/_sass/uikit/theme/heading.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// Component: Heading
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-heading-small(){}
-
-// @mixin hook-heading-medium(){}
-
-// @mixin hook-heading-large(){}
-
-// @mixin hook-heading-xlarge(){}
-
-// @mixin hook-heading-2xlarge(){}
-
-
-// Divider
-// ========================================================================
-
-// @mixin hook-heading-divider(){}
-
-
-// Bullet
-// ========================================================================
-
-// @mixin hook-heading-bullet(){}
-
-
-// Line
-// ========================================================================
-
-// @mixin hook-heading-line(){}
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-heading-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-heading-small(){}
-
-// @mixin hook-inverse-heading-medium(){}
-
-// @mixin hook-inverse-heading-large(){}
-
-// @mixin hook-inverse-heading-xlarge(){}
-
-// @mixin hook-inverse-heading-2xlarge(){}
-
-// @mixin hook-inverse-heading-divider(){}
-
-// @mixin hook-inverse-heading-bullet(){}
-
-// @mixin hook-inverse-heading-line(){}
diff --git a/docs/_sass/uikit/theme/height.scss b/docs/_sass/uikit/theme/height.scss
deleted file mode 100644
index 37f2c2f84b..0000000000
--- a/docs/_sass/uikit/theme/height.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Height
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-height-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/icon.scss b/docs/_sass/uikit/theme/icon.scss
deleted file mode 100644
index b81c79abd8..0000000000
--- a/docs/_sass/uikit/theme/icon.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Component: Icon
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Style modifiers
-// ========================================================================
-
-//
-// Link
-//
-
-// @mixin hook-icon-link(){}
-
-// @mixin hook-icon-link-hover(){}
-
-// @mixin hook-icon-link-active(){}
-
-//
-// Button
-//
-
-
-
-// @mixin hook-icon-button-hover(){}
-
-// @mixin hook-icon-button-active(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-icon-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-icon-link(){}
-// @mixin hook-inverse-icon-link-hover(){}
-// @mixin hook-inverse-icon-link-active(){}
-
-// @mixin hook-inverse-icon-button(){}
-// @mixin hook-inverse-icon-button-hover(){}
-// @mixin hook-inverse-icon-button-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/iconnav.scss b/docs/_sass/uikit/theme/iconnav.scss
deleted file mode 100644
index 376a0afabf..0000000000
--- a/docs/_sass/uikit/theme/iconnav.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Component: Iconnav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$subnav-item-font-size: $global-small-font-size !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-iconnav(){}
-
-
-
-// @mixin hook-iconnav-item-hover(){}
-
-// @mixin hook-iconnav-item-active(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-iconnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-iconnav-item(){}
-// @mixin hook-inverse-iconnav-item-hover(){}
-// @mixin hook-inverse-iconnav-item-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/inverse.scss b/docs/_sass/uikit/theme/inverse.scss
deleted file mode 100644
index 75a5a3b168..0000000000
--- a/docs/_sass/uikit/theme/inverse.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Inverse
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-inverse(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/label.scss b/docs/_sass/uikit/theme/label.scss
deleted file mode 100644
index ff09ac92cf..0000000000
--- a/docs/_sass/uikit/theme/label.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Component: Label
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$label-border-radius: 2px !default;
-$label-text-transform: uppercase !default;
-
-
-// Component
-// ========================================================================
-
-
-
-
-// Color modifiers
-// ========================================================================
-
-// @mixin hook-label-success(){}
-
-// @mixin hook-label-warning(){}
-
-// @mixin hook-label-danger(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-label-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-label(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/leader.scss b/docs/_sass/uikit/theme/leader.scss
deleted file mode 100644
index 6618325e82..0000000000
--- a/docs/_sass/uikit/theme/leader.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Component: Leader
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-leader(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-leader-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-leader(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/lightbox.scss b/docs/_sass/uikit/theme/lightbox.scss
deleted file mode 100644
index 6c9d115ab1..0000000000
--- a/docs/_sass/uikit/theme/lightbox.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Component: Lightbox
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-lightbox(){}
-
-
-// Item
-// ========================================================================
-
-// @mixin hook-lightbox-item(){}
-
-
-// Toolbar
-// ========================================================================
-
-// @mixin hook-lightbox-toolbar(){}
-
-
-// Toolbar Icon
-// ========================================================================
-
-// @mixin hook-lightbox-toolbar-icon(){}
-
-// @mixin hook-lightbox-toolbar-icon-hover(){}
-
-
-// Button
-// ========================================================================
-
-// @mixin hook-lightbox-button(){}
-
-// @mixin hook-lightbox-button-hover(){}
-
-// @mixin hook-lightbox-button-active(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-lightbox-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/link.scss b/docs/_sass/uikit/theme/link.scss
deleted file mode 100644
index 0658b58a6d..0000000000
--- a/docs/_sass/uikit/theme/link.scss
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Component: Link
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Muted
-// ========================================================================
-
-// @mixin hook-link-muted(){}
-
-// @mixin hook-link-muted-hover(){}
-
-
-// Text
-// ========================================================================
-
-// @mixin hook-link-text(){}
-
-// @mixin hook-link-text-hover(){}
-
-
-// Heading
-// ========================================================================
-
-// @mixin hook-link-heading(){}
-
-// @mixin hook-link-heading-hover(){}
-
-
-// Reset
-// ========================================================================
-
-// @mixin hook-link-reset(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-link-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-link-muted(){}
-// @mixin hook-inverse-link-muted-hover(){}
-
-// @mixin hook-inverse-link-text-hover(){}
-
-// @mixin hook-inverse-link-heading-hover(){}
diff --git a/docs/_sass/uikit/theme/list.scss b/docs/_sass/uikit/theme/list.scss
deleted file mode 100644
index 33804fa0eb..0000000000
--- a/docs/_sass/uikit/theme/list.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Component: List
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$list-striped-border-width: $global-border-width !default;
-$list-striped-border: $global-border !default;
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-list-divider(){}
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-list-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-list-divider(){}
-
diff --git a/docs/_sass/uikit/theme/margin.scss b/docs/_sass/uikit/theme/margin.scss
deleted file mode 100644
index a2cdb5ec99..0000000000
--- a/docs/_sass/uikit/theme/margin.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Margin
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-margin-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/marker.scss b/docs/_sass/uikit/theme/marker.scss
deleted file mode 100644
index 1e4fd5f379..0000000000
--- a/docs/_sass/uikit/theme/marker.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Component: Marker
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-marker-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-marker-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-marker(){}
-// @mixin hook-inverse-marker-hover(){}
diff --git a/docs/_sass/uikit/theme/modal.scss b/docs/_sass/uikit/theme/modal.scss
deleted file mode 100644
index adc2135808..0000000000
--- a/docs/_sass/uikit/theme/modal.scss
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Component: Modal
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$modal-header-background: $modal-dialog-background !default;
-$modal-footer-background: $modal-dialog-background !default;
-
-//
-// New
-//
-
-$modal-header-border-width: $global-border-width !default;
-$modal-header-border: $global-border !default;
-
-$modal-footer-border-width: $global-border-width !default;
-$modal-footer-border: $global-border !default;
-
-$modal-close-full-padding: $global-margin !default;
-$modal-close-full-background: $modal-dialog-background !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-modal(){}
-
-
-// Dialog
-// ========================================================================
-
-// @mixin hook-modal-dialog(){}
-
-
-// Full
-// ========================================================================
-
-// @mixin hook-modal-full(){}
-
-
-// Sections
-// ========================================================================
-
-
-
-// @mixin hook-modal-body(){}
-
-
-
-
-// Title
-// ========================================================================
-
-// @mixin hook-modal-title(){}
-
-
-// Close
-// ========================================================================
-
-// @mixin hook-modal-close(){}
-
-// @mixin hook-modal-close-hover(){}
-
-// @mixin hook-modal-close-default(){}
-
-// @mixin hook-modal-close-default-hover(){}
-
-// @mixin hook-modal-close-outside(){}
-
-// @mixin hook-modal-close-outside-hover(){}
-
-
-
-// @mixin hook-modal-close-full-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-modal-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/nav.scss b/docs/_sass/uikit/theme/nav.scss
deleted file mode 100644
index 191a539458..0000000000
--- a/docs/_sass/uikit/theme/nav.scss
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// Component: Nav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$nav-default-font-size: $global-small-font-size !default;
-
-
-// Sublists
-// ========================================================================
-
-// @mixin hook-nav-sub(){}
-
-
-// Parent icon modifier
-// ========================================================================
-
-// @mixin hook-nav-parent-icon(){}
-
-
-// Header
-// ========================================================================
-
-// @mixin hook-nav-header(){}
-
-
-// Divider
-// ========================================================================
-
-// @mixin hook-nav-divider(){}
-
-
-// Default style modifier
-// ========================================================================
-
-
-
-// @mixin hook-nav-default-item(){}
-
-// @mixin hook-nav-default-item-hover(){}
-
-// @mixin hook-nav-default-item-active(){}
-
-// @mixin hook-nav-default-header(){}
-
-// @mixin hook-nav-default-divider(){}
-
-
-// Primary style modifier
-// ========================================================================
-
-// @mixin hook-nav-primary(){}
-
-// @mixin hook-nav-primary-item(){}
-
-// @mixin hook-nav-primary-item-hover(){}
-
-// @mixin hook-nav-primary-item-active(){}
-
-// @mixin hook-nav-primary-header(){}
-
-// @mixin hook-nav-primary-divider(){}
-
-
-// Style modifier
-// ========================================================================
-
-// @mixin hook-nav-dividers(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-nav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-nav-parent-icon(){}
-
-// @mixin hook-inverse-nav-default-item(){}
-// @mixin hook-inverse-nav-default-item-hover(){}
-// @mixin hook-inverse-nav-default-item-active(){}
-// @mixin hook-inverse-nav-default-header(){}
-// @mixin hook-inverse-nav-default-divider(){}
-
-// @mixin hook-inverse-nav-primary-item(){}
-// @mixin hook-inverse-nav-primary-item-hover(){}
-// @mixin hook-inverse-nav-primary-item-active(){}
-// @mixin hook-inverse-nav-primary-header(){}
-// @mixin hook-inverse-nav-primary-divider(){}
-
-// @mixin hook-inverse-nav-dividers(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/navbar.scss b/docs/_sass/uikit/theme/navbar.scss
deleted file mode 100644
index 43aa119f5a..0000000000
--- a/docs/_sass/uikit/theme/navbar.scss
+++ /dev/null
@@ -1,138 +0,0 @@
-//
-// Component: Navbar
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$navbar-nav-item-font-size: $global-small-font-size !default;
-
-$navbar-dropdown-margin: 15px !default;
-$navbar-dropdown-padding: 25px !default;
-$navbar-dropdown-background: $global-background !default;
-$navbar-dropdown-grid-gutter-horizontal: ($navbar-dropdown-padding * 2) !default;
-
-//
-// New
-//
-
-$navbar-nav-item-text-transform: uppercase !default;
-
-$navbar-dropdown-nav-font-size: $global-small-font-size !default;
-
-$navbar-dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15) !default;
-
-$navbar-dropbar-box-shadow: 0 5px 7px rgba(0, 0, 0, 0.05) !default;
-
-$navbar-dropdown-grid-divider-border-width: $global-border-width !default;
-$navbar-dropdown-grid-divider-border: $navbar-dropdown-nav-divider-border !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-navbar(){}
-
-
-// Container
-// ========================================================================
-
-// @mixin hook-navbar-container(){}
-
-
-// Nav
-// ========================================================================
-
-
-
-// @mixin hook-navbar-nav-item-hover(){}
-
-// @mixin hook-navbar-nav-item-onclick(){}
-
-// @mixin hook-navbar-nav-item-active(){}
-
-
-// Item
-// ========================================================================
-
-// @mixin hook-navbar-item(){}
-
-
-// Toggle
-// ========================================================================
-
-// @mixin hook-navbar-toggle(){}
-
-// @mixin hook-navbar-toggle-hover(){}
-
-// @mixin hook-navbar-toggle-icon(){}
-
-// @mixin hook-navbar-toggle-icon-hover(){}
-
-
-// Subtitle
-// ========================================================================
-
-// @mixin hook-navbar-subtitle(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-navbar-primary(){}
-
-// @mixin hook-navbar-transparent(){}
-
-// @mixin hook-navbar-sticky(){}
-
-
-// Dropdown
-// ========================================================================
-
-
-
-
-
-
-// Dropdown nav
-// ========================================================================
-
-
-
-// @mixin hook-navbar-dropdown-nav-item(){}
-
-// @mixin hook-navbar-dropdown-nav-item-hover(){}
-
-// @mixin hook-navbar-dropdown-nav-header(){}
-
-// @mixin hook-navbar-dropdown-nav-divider(){}
-
-
-// Dropbar
-// ========================================================================
-
-// @mixin hook-navbar-dropbar(){}
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-navbar-nav-item(){}
-// @mixin hook-inverse-navbar-nav-item-hover(){}
-// @mixin hook-inverse-navbar-nav-item-onclick(){}
-// @mixin hook-inverse-navbar-nav-item-active(){}
-
-// @mixin hook-inverse-navbar-item(){}
-
-// @mixin hook-inverse-navbar-toggle(){}
-// @mixin hook-inverse-navbar-toggle-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/notification.scss b/docs/_sass/uikit/theme/notification.scss
deleted file mode 100644
index 71c793dbe4..0000000000
--- a/docs/_sass/uikit/theme/notification.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Component: Notification
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-notification(){}
-
-
-// Message
-// ========================================================================
-
-// @mixin hook-notification-message(){}
-
-
-// Close
-// ========================================================================
-
-// @mixin hook-notification-close(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-notification-message-primary(){}
-
-// @mixin hook-notification-message-success(){}
-
-// @mixin hook-notification-message-warning(){}
-
-// @mixin hook-notification-message-danger(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-notification-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/offcanvas.scss b/docs/_sass/uikit/theme/offcanvas.scss
deleted file mode 100644
index 283078ef36..0000000000
--- a/docs/_sass/uikit/theme/offcanvas.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Off-canvas
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Bar
-// ========================================================================
-
-// @mixin hook-offcanvas-bar(){}
-
-
-// Close
-// ========================================================================
-
-// @mixin hook-offcanvas-close(){}
-
-
-// Overlay
-// ========================================================================
-
-// @mixin hook-offcanvas-overlay(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-offcanvas-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/overlay.scss b/docs/_sass/uikit/theme/overlay.scss
deleted file mode 100644
index 68cda45259..0000000000
--- a/docs/_sass/uikit/theme/overlay.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Component: Overlay
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-overlay(){}
-
-// Icon
-// ========================================================================
-
-// @mixin hook-overlay-icon(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-overlay-default(){}
-
-// @mixin hook-overlay-primary(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-overlay-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/padding.scss b/docs/_sass/uikit/theme/padding.scss
deleted file mode 100644
index f0737b873a..0000000000
--- a/docs/_sass/uikit/theme/padding.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Padding
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-padding-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/pagination.scss b/docs/_sass/uikit/theme/pagination.scss
deleted file mode 100644
index a777e0c900..0000000000
--- a/docs/_sass/uikit/theme/pagination.scss
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Component: Pagination
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-pagination(){}
-
-
-// Items
-// ========================================================================
-
-
-
-// @mixin hook-pagination-item-hover(){}
-
-// @mixin hook-pagination-item-active(){}
-
-// @mixin hook-pagination-item-disabled(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-pagination-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-pagination-item(){}
-// @mixin hook-inverse-pagination-item-hover(){}
-// @mixin hook-inverse-pagination-item-active(){}
-// @mixin hook-inverse-pagination-item-disabled(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/placeholder.scss b/docs/_sass/uikit/theme/placeholder.scss
deleted file mode 100644
index 4ab662cb67..0000000000
--- a/docs/_sass/uikit/theme/placeholder.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Component: Placeholder
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$placeholder-background: transparent !default;
-
-//
-// New
-//
-
-$placeholder-border-width: $global-border-width !default;
-$placeholder-border: $global-border !default;
-
-
-// Component
-// ========================================================================
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-placeholder-misc(){}
diff --git a/docs/_sass/uikit/theme/position.scss b/docs/_sass/uikit/theme/position.scss
deleted file mode 100644
index fc69520898..0000000000
--- a/docs/_sass/uikit/theme/position.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Position
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-position-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/progress.scss b/docs/_sass/uikit/theme/progress.scss
deleted file mode 100644
index 9ca100a3e6..0000000000
--- a/docs/_sass/uikit/theme/progress.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Component: Progress
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$progress-border-radius: 500px !default;
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-progress-bar(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-progress-misc(){}
diff --git a/docs/_sass/uikit/theme/search.scss b/docs/_sass/uikit/theme/search.scss
deleted file mode 100644
index 1cd2103d8a..0000000000
--- a/docs/_sass/uikit/theme/search.scss
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// Component: Search
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$search-default-background: transparent !default;
-
-//
-// New
-//
-
-$search-default-border-width: $global-border-width !default;
-$search-default-border: $global-border !default;
-
-$search-default-focus-border: $global-primary-background !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-search-input(){}
-
-
-// Default modifiers
-// ========================================================================
-
-
-
-
-
-
-// Navbar modifiers
-// ========================================================================
-
-// @mixin hook-search-navbar-input(){}
-
-
-// Large modifiers
-// ========================================================================
-
-// @mixin hook-search-large-input(){}
-
-
-// Toggle
-// ========================================================================
-
-// @mixin hook-search-toggle(){}
-
-// @mixin hook-search-toggle-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-search-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-$inverse-search-default-background: transparent !default;
-
-
-// @mixin hook-inverse-search-default-input-focus(){}
-
-// @mixin hook-inverse-search-navbar-input(){}
-
-// @mixin hook-inverse-search-large-input(){}
-
-// @mixin hook-inverse-search-toggle(){}
-// @mixin hook-inverse-search-toggle-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/section.scss b/docs/_sass/uikit/theme/section.scss
deleted file mode 100644
index 6d7f761b6e..0000000000
--- a/docs/_sass/uikit/theme/section.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Section
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-section(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-section-default(){}
-
-// @mixin hook-section-muted(){}
-
-// @mixin hook-section-primary(){}
-
-// @mixin hook-section-secondary(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-section-misc(){}
diff --git a/docs/_sass/uikit/theme/slidenav.scss b/docs/_sass/uikit/theme/slidenav.scss
deleted file mode 100644
index 60dcb22249..0000000000
--- a/docs/_sass/uikit/theme/slidenav.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Component: Slidenav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-slidenav-hover(){}
-
-// @mixin hook-slidenav-active(){}
-
-
-// Icon modifier
-// ========================================================================
-
-// @mixin hook-slidenav-previous(){}
-
-// @mixin hook-slidenav-next(){}
-
-
-// Size modifier
-// ========================================================================
-
-// @mixin hook-slidenav-large(){}
-
-
-// Container
-// ========================================================================
-
-// @mixin hook-slidenav-container(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-slidenav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-slidenav(){}
-// @mixin hook-inverse-slidenav-hover(){}
-// @mixin hook-inverse-slidenav-active(){}
diff --git a/docs/_sass/uikit/theme/slider.scss b/docs/_sass/uikit/theme/slider.scss
deleted file mode 100644
index b8d40fa124..0000000000
--- a/docs/_sass/uikit/theme/slider.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Slider
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-slider-misc(){}
diff --git a/docs/_sass/uikit/theme/sortable.scss b/docs/_sass/uikit/theme/sortable.scss
deleted file mode 100644
index 3ab18c3db1..0000000000
--- a/docs/_sass/uikit/theme/sortable.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// Component: Sortable
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-sortable(){}
-
-
-// Drag
-// ========================================================================
-
-// @mixin hook-sortable-drag(){}
-
-
-// Placeholder
-// ========================================================================
-
-// @mixin hook-sortable-placeholder(){}
-
-
-// Empty
-// ========================================================================
-
-// @mixin hook-sortable-empty(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-sortable-misc(){}
diff --git a/docs/_sass/uikit/theme/spinner.scss b/docs/_sass/uikit/theme/spinner.scss
deleted file mode 100644
index d70e10fa81..0000000000
--- a/docs/_sass/uikit/theme/spinner.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Spinner
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-spinner-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/sticky.scss b/docs/_sass/uikit/theme/sticky.scss
deleted file mode 100644
index 94e5ee69ee..0000000000
--- a/docs/_sass/uikit/theme/sticky.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Sticky
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-sticky-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/subnav.scss b/docs/_sass/uikit/theme/subnav.scss
deleted file mode 100644
index f4d1c7fd06..0000000000
--- a/docs/_sass/uikit/theme/subnav.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Component: Subnav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$subnav-item-font-size: $global-small-font-size !default;
-$subnav-item-text-transform: uppercase !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-subnav(){}
-
-
-
-// @mixin hook-subnav-item-hover(){}
-
-// @mixin hook-subnav-item-active(){}
-
-
-// Divider modifier
-// ========================================================================
-
-// @mixin hook-subnav-divider(){}
-
-
-// Pill modifier
-// ========================================================================
-
-// @mixin hook-subnav-pill-item(){}
-
-// @mixin hook-subnav-pill-item-hover(){}
-
-// @mixin hook-subnav-pill-item-onclick(){}
-
-// @mixin hook-subnav-pill-item-active(){}
-
-
-// Disabled
-// ========================================================================
-
-// @mixin hook-subnav-item-disabled(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-subnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-subnav-item(){}
-// @mixin hook-inverse-subnav-item-hover(){}
-// @mixin hook-inverse-subnav-item-active(){}
-
-// @mixin hook-inverse-subnav-divider(){}
-
-// @mixin hook-inverse-subnav-pill-item(){}
-// @mixin hook-inverse-subnav-pill-item-hover(){}
-// @mixin hook-inverse-subnav-pill-item-onclick(){}
-// @mixin hook-inverse-subnav-pill-item-active(){}
-
-// @mixin hook-inverse-subnav-item-disabled(){}
diff --git a/docs/_sass/uikit/theme/tab.scss b/docs/_sass/uikit/theme/tab.scss
deleted file mode 100644
index 51c4ba2866..0000000000
--- a/docs/_sass/uikit/theme/tab.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Component: Tab
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$tab-border-width: $global-border-width !default;
-$tab-border: $global-border !default;
-
-$tab-item-border-width: $global-border-width !default;
-$tab-item-font-size: $global-small-font-size !default;
-$tab-item-text-transform: uppercase !default;
-
-$tab-item-active-border: $global-primary-background !default;
-
-
-// Component
-// ========================================================================
-
-
-
-
-// Items
-// ========================================================================
-
-
-
-// @mixin hook-tab-item-hover(){}
-
-
-
-// @mixin hook-tab-item-disabled(){}
-
-
-// Position modifiers
-// ========================================================================
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-
-
-
-// Inverse
-// ========================================================================
-
-$inverse-tab-border: $inverse-global-border !default;
-
-
-
-// @mixin hook-inverse-tab-item(){}
-// @mixin hook-inverse-tab-item-hover(){}
-
-// @mixin hook-inverse-tab-item-disabled(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/table.scss b/docs/_sass/uikit/theme/table.scss
deleted file mode 100644
index d6a660793b..0000000000
--- a/docs/_sass/uikit/theme/table.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Component: Table
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-$table-header-cell-font-size: $global-small-font-size !default;
-$table-header-cell-font-weight: normal !default;
-$table-header-cell-color: $global-muted-color !default;
-
-//
-// New
-//
-
-$table-striped-border-width: $global-border-width !default;
-$table-striped-border: $global-border !default;
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-table-cell(){}
-
-// @mixin hook-table-footer(){}
-
-// @mixin hook-table-caption(){}
-
-// @mixin hook-table-row-active(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-table-divider(){}
-
-
-
-// @mixin hook-table-hover(){}
-
-
-// Size modifier
-// ========================================================================
-
-// @mixin hook-table-small(){}
-
-// @mixin hook-table-large(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-table-header-cell(){}
-// @mixin hook-inverse-table-caption(){}
-// @mixin hook-inverse-table-row-active(){}
-// @mixin hook-inverse-table-divider(){}
-
-// @mixin hook-inverse-table-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/text.scss b/docs/_sass/uikit/theme/text.scss
deleted file mode 100644
index b6e35c431f..0000000000
--- a/docs/_sass/uikit/theme/text.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Component: Text
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$text-meta-link-color: $text-meta-color !default;
-$text-meta-link-hover-color: $global-color !default;
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-text-lead(){}
-
-
-
-
-// Size modifiers
-// ========================================================================
-
-// @mixin hook-text-small(){}
-
-// @mixin hook-text-large(){}
-
-
-// Background modifier
-// ========================================================================
-
-// @mixin hook-text-background(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-text-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-text-lead(){}
-// @mixin hook-inverse-text-meta(){}
diff --git a/docs/_sass/uikit/theme/thumbnav.scss b/docs/_sass/uikit/theme/thumbnav.scss
deleted file mode 100644
index 7f26c38aa8..0000000000
--- a/docs/_sass/uikit/theme/thumbnav.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Component: Thumbnav
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-//
-// New
-//
-
-$thumbnav-item-background: rgba($global-background, 0.4) !default;
-$thumbnav-item-hover-background: transparent !default;
-$thumbnav-item-active-background: transparent !default;
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-thumbnav(){}
-
-
-
-
-
-
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-thumbnav-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-thumbnav-item(){}
-// @mixin hook-inverse-thumbnav-item-hover(){}
-// @mixin hook-inverse-thumbnav-item-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/tile.scss b/docs/_sass/uikit/theme/tile.scss
deleted file mode 100644
index 2d043a6338..0000000000
--- a/docs/_sass/uikit/theme/tile.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Tile
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-tile(){}
-
-
-// Style modifiers
-// ========================================================================
-
-// @mixin hook-tile-default(){}
-
-// @mixin hook-tile-muted(){}
-
-// @mixin hook-tile-primary(){}
-
-// @mixin hook-tile-secondary(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-tile-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/tooltip.scss b/docs/_sass/uikit/theme/tooltip.scss
deleted file mode 100644
index 5115139c31..0000000000
--- a/docs/_sass/uikit/theme/tooltip.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Component: Tooltip
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-// @mixin hook-tooltip(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-tooltip-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/totop.scss b/docs/_sass/uikit/theme/totop.scss
deleted file mode 100644
index feb7165a1d..0000000000
--- a/docs/_sass/uikit/theme/totop.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Component: Totop
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Component
-// ========================================================================
-
-
-
-// @mixin hook-totop-hover(){}
-
-// @mixin hook-totop-active(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-icon-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-totop(){}
-// @mixin hook-inverse-totop-hover(){}
-// @mixin hook-inverse-totop-active(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/transition.scss b/docs/_sass/uikit/theme/transition.scss
deleted file mode 100644
index fd7bdede45..0000000000
--- a/docs/_sass/uikit/theme/transition.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Transition
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-transition-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/utility.scss b/docs/_sass/uikit/theme/utility.scss
deleted file mode 100644
index 69094998a0..0000000000
--- a/docs/_sass/uikit/theme/utility.scss
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Component: Utility
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Panel
-// ========================================================================
-
-// @mixin hook-panel-scrollable(){}
-
-
-// Box-shadow bottom
-// ========================================================================
-
-// @mixin hook-box-shadow-bottom(){}
-
-
-// Drop cap
-// ========================================================================
-
-
-
-
-// Logo
-// ========================================================================
-
-// @mixin hook-logo(){}
-
-// @mixin hook-logo-hover(){}
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-utility-misc(){}
-
-
-// Inverse
-// ========================================================================
-
-// @mixin hook-inverse-dropcap(){}
-
-// @mixin hook-inverse-logo(){}
-// @mixin hook-inverse-logo-hover(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/variables.scss b/docs/_sass/uikit/theme/variables.scss
deleted file mode 100644
index d74b3a9971..0000000000
--- a/docs/_sass/uikit/theme/variables.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Component: Variables
-//
-// ========================================================================
-
-
-// Global variables
-// ========================================================================
-
-//
-// Typography
-//
-
-//
-// Colors
-//
-
-//
-// Backgrounds
-//
-
-//
-// Borders
-//
-
-//
-// Spacings
-//
-
-//
-// Controls
-//
-
-//
-// Z-index
-//
\ No newline at end of file
diff --git a/docs/_sass/uikit/theme/width.scss b/docs/_sass/uikit/theme/width.scss
deleted file mode 100644
index b67a7954ed..0000000000
--- a/docs/_sass/uikit/theme/width.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Component: Width
-//
-// ========================================================================
-
-
-// Variables
-// ========================================================================
-
-
-// Miscellaneous
-// ========================================================================
-
-// @mixin hook-width-misc(){}
\ No newline at end of file
diff --git a/docs/_sass/uikit/uikit-theme.scss b/docs/_sass/uikit/uikit-theme.scss
deleted file mode 100644
index d114210fba..0000000000
--- a/docs/_sass/uikit/uikit-theme.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-//
-// Theme
-//
-
-@import "https://github.com/uikit/theme/import";
-
-@import "https://github.com/uikit/components/import";
-
-
diff --git a/docs/_sass/uikit/uikit.scss b/docs/_sass/uikit/uikit.scss
deleted file mode 100644
index d4a737e989..0000000000
--- a/docs/_sass/uikit/uikit.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-// Core
-//
-
-@import "https://github.com/uikit/components/import";
\ No newline at end of file
diff --git a/docs/_sass/uikit/variables-theme.scss b/docs/_sass/uikit/variables-theme.scss
deleted file mode 100644
index 2f0f90ef51..0000000000
--- a/docs/_sass/uikit/variables-theme.scss
+++ /dev/null
@@ -1,1172 +0,0 @@
-$global-margin: 20px !default;
-$accordion-item-margin-top: $global-margin !default;
-$global-medium-font-size: 1.25rem !default;
-$accordion-title-font-size: $global-medium-font-size !default;
-$accordion-title-line-height: 1.4 !default;
-$global-emphasis-color: #333 !default;
-$accordion-title-color: $global-emphasis-color !default;
-$global-color: #666 !default;
-$accordion-title-hover-color: $global-color !default;
-$accordion-content-margin-top: $global-margin !default;
-$global-inverse-color: #fff !default;
-$inverse-global-emphasis-color: $global-inverse-color !default;
-$inverse-accordion-title-color: $inverse-global-emphasis-color !default;
-$inverse-global-color: rgba($global-inverse-color, 0.7) !default;
-$inverse-accordion-title-hover-color: $inverse-global-color !default;
-$alert-margin-vertical: $global-margin !default;
-$alert-padding: 15px !default;
-$alert-padding-right: $alert-padding + 14px !default;
-$global-muted-background: #f8f8f8 !default;
-$alert-background: $global-muted-background !default;
-$alert-color: $global-color !default;
-$alert-close-top: $alert-padding + 5px !default;
-$alert-close-right: $alert-padding !default;
-$global-primary-background: #1e87f0 !default;
-$alert-primary-background: lighten(mix(white, $global-primary-background, 40%), 20%) !default;
-$alert-primary-color: $global-primary-background !default;
-$global-success-background: #32d296 !default;
-$alert-success-background: lighten(mix(white, $global-success-background, 40%), 25%) !default;
-$alert-success-color: $global-success-background !default;
-$global-warning-background: #faa05a !default;
-$alert-warning-background: lighten(mix(white, $global-warning-background, 45%), 15%) !default;
-$alert-warning-color: $global-warning-background !default;
-$global-danger-background: #f0506e !default;
-$alert-danger-background: lighten(mix(white, $global-danger-background, 40%), 20%) !default;
-$alert-danger-color: $global-danger-background !default;
-$global-gutter: 30px !default;
-$align-margin-horizontal: $global-gutter !default;
-$align-margin-vertical: $global-gutter !default;
-$global-medium-gutter: 40px !default;
-$align-margin-horizontal-l: $global-medium-gutter !default;
-$animation-duration: 0.5s !default;
-$animation-fade-duration: 0.8s !default;
-$animation-stroke-duration: 2s !default;
-$animation-kenburns-duration: 15s !default;
-$animation-fast-duration: 0.1s !default;
-$animation-slide-small-translate: 10px !default;
-$animation-slide-medium-translate: 50px !default;
-$global-large-margin: 70px !default;
-$article-margin-top: $global-large-margin !default;
-$global-2xlarge-font-size: 2.625rem !default;
-$article-title-font-size-m: $global-2xlarge-font-size !default;
-$article-title-font-size: $article-title-font-size-m * 0.85 !default;
-$article-title-line-height: 1.2 !default;
-$global-small-font-size: 0.875rem !default;
-$article-meta-font-size: $global-small-font-size !default;
-$article-meta-line-height: 1.4 !default;
-$global-muted-color: #999 !default;
-$article-meta-color: $global-muted-color !default;
-$inverse-global-muted-color: rgba($global-inverse-color, 0.5) !default;
-$inverse-article-meta-color: $inverse-global-muted-color !default;
-$global-background: #fff !default;
-$background-default-background: $global-background !default;
-$background-muted-background: $global-muted-background !default;
-$background-primary-background: $global-primary-background !default;
-$global-secondary-background: #222 !default;
-$background-secondary-background: $global-secondary-background !default;
-$badge-size: 18px !default;
-$badge-padding-vertical: 0 !default;
-$badge-padding-horizontal: 5px !default;
-$badge-border-radius: 500px !default;
-$badge-background: $global-primary-background !default;
-$badge-color: $global-inverse-color !default;
-$badge-font-size: 11px !default;
-$inverse-global-primary-background: $global-inverse-color !default;
-$inverse-badge-background: $inverse-global-primary-background !default;
-$inverse-global-inverse-color: $global-color !default;
-$inverse-badge-color: $inverse-global-inverse-color !default;
-$base-body-background: $global-background !default;
-$global-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-$base-body-font-family: $global-font-family !default;
-$base-body-font-weight: normal !default;
-$global-font-size: 16px !default;
-$base-body-font-size: $global-font-size !default;
-$global-line-height: 1.5 !default;
-$base-body-line-height: $global-line-height !default;
-$base-body-color: $global-color !default;
-$global-link-color: #1e87f0 !default;
-$base-link-color: $global-link-color !default;
-$base-link-text-decoration: none !default;
-$global-link-hover-color: #0f6ecd !default;
-$base-link-hover-color: $global-link-hover-color !default;
-$base-link-hover-text-decoration: underline !default;
-$base-strong-font-weight: bolder !default;
-$base-code-font-size: $global-small-font-size !default;
-$base-code-font-family: Consolas, monaco, monospace !default;
-$base-code-color: $global-danger-background !default;
-$base-em-color: $global-danger-background !default;
-$base-ins-background: #ffd !default;
-$base-ins-color: $global-color !default;
-$base-mark-background: #ffd !default;
-$base-mark-color: $global-color !default;
-$base-quote-font-style: italic !default;
-$base-small-font-size: 80% !default;
-$base-margin-vertical: $global-margin !default;
-$base-heading-font-family: $global-font-family !default;
-$base-heading-font-weight: normal !default;
-$base-heading-color: $global-emphasis-color !default;
-$base-heading-text-transform: none !default;
-$global-medium-margin: 40px !default;
-$base-heading-margin-top: $global-medium-margin !default;
-$base-h1-font-size-m: $global-2xlarge-font-size !default;
-$base-h1-font-size: $base-h1-font-size-m * 0.85 !default;
-$base-h1-line-height: 1.2 !default;
-$global-xlarge-font-size: 2rem !default;
-$base-h2-font-size-m: $global-xlarge-font-size !default;
-$base-h2-font-size: $base-h2-font-size-m * 0.85 !default;
-$base-h2-line-height: 1.3 !default;
-$global-large-font-size: 1.5rem !default;
-$base-h3-font-size: $global-large-font-size !default;
-$base-h3-line-height: 1.4 !default;
-$base-h4-font-size: $global-medium-font-size !default;
-$base-h4-line-height: 1.4 !default;
-$base-h5-font-size: $global-font-size !default;
-$base-h5-line-height: 1.4 !default;
-$base-h6-font-size: $global-small-font-size !default;
-$base-h6-line-height: 1.4 !default;
-$base-list-padding-left: 30px !default;
-$base-hr-margin-vertical: $global-margin !default;
-$global-border-width: 1px !default;
-$base-hr-border-width: $global-border-width !default;
-$global-border: #e5e5e5 !default;
-$base-hr-border: $global-border !default;
-$base-blockquote-font-size: $global-medium-font-size !default;
-$base-blockquote-line-height: 1.5 !default;
-$base-blockquote-font-style: italic !default;
-$base-blockquote-margin-vertical: $global-margin !default;
-$global-small-margin: 10px !default;
-$base-blockquote-footer-margin-top: $global-small-margin !default;
-$base-blockquote-footer-font-size: $global-small-font-size !default;
-$base-blockquote-footer-line-height: 1.5 !default;
-$base-pre-font-size: $global-small-font-size !default;
-$base-pre-line-height: 1.5 !default;
-$base-pre-font-family: $base-code-font-family !default;
-$base-pre-color: $global-color !default;
-$base-selection-background: #39f !default;
-$base-selection-color: $global-inverse-color !default;
-$inverse-base-color: $inverse-global-color !default;
-$inverse-base-link-color: $inverse-global-emphasis-color !default;
-$inverse-base-link-hover-color: $inverse-global-emphasis-color !default;
-$inverse-base-code-color: $inverse-global-color !default;
-$inverse-base-em-color: $inverse-global-emphasis-color !default;
-$inverse-base-heading-color: $inverse-global-emphasis-color !default;
-$inverse-global-border: rgba($global-inverse-color, 0.2) !default;
-$inverse-base-hr-border: $inverse-global-border !default;
-$breadcrumb-item-font-size: $global-small-font-size !default;
-$breadcrumb-item-color: $global-muted-color !default;
-$breadcrumb-item-hover-color: $global-color !default;
-$breadcrumb-item-hover-text-decoration: none !default;
-$breadcrumb-item-active-color: $global-color !default;
-$breadcrumb-divider: "/" !default;
-$breadcrumb-divider-margin-horizontal: 20px !default;
-$breadcrumb-divider-font-size: $breadcrumb-item-font-size !default;
-$breadcrumb-divider-color: $global-muted-color !default;
-$inverse-breadcrumb-item-color: $inverse-global-muted-color !default;
-$inverse-breadcrumb-item-hover-color: $inverse-global-color !default;
-$inverse-breadcrumb-item-active-color: $inverse-global-color !default;
-$inverse-breadcrumb-divider-color: $inverse-global-muted-color !default;
-$global-control-height: 40px !default;
-$button-border-width: $global-border-width !default;
-$button-line-height: $global-control-height - ($button-border-width * 2) !default;
-$global-control-small-height: 30px !default;
-$button-small-line-height: $global-control-small-height - ($button-border-width * 2) !default;
-$global-control-large-height: 55px !default;
-$button-large-line-height: $global-control-large-height - ($button-border-width * 2) !default;
-$button-font-size: $global-small-font-size !default;
-$button-small-font-size: $global-small-font-size !default;
-$button-large-font-size: $global-small-font-size !default;
-$button-padding-horizontal: $global-gutter !default;
-$global-small-gutter: 15px !default;
-$button-small-padding-horizontal: $global-small-gutter !default;
-$button-large-padding-horizontal: $global-medium-gutter !default;
-$button-default-background: transparent !default;
-$button-default-color: $global-emphasis-color !default;
-$button-default-hover-background: transparent !default;
-$button-default-hover-color: $global-emphasis-color !default;
-$button-default-active-background: transparent !default;
-$button-default-active-color: $global-emphasis-color !default;
-$button-primary-background: $global-primary-background !default;
-$button-primary-color: $global-inverse-color !default;
-$button-primary-hover-background: darken($button-primary-background, 5%) !default;
-$button-primary-hover-color: $global-inverse-color !default;
-$button-primary-active-background: darken($button-primary-background, 10%) !default;
-$button-primary-active-color: $global-inverse-color !default;
-$button-secondary-background: $global-secondary-background !default;
-$button-secondary-color: $global-inverse-color !default;
-$button-secondary-hover-background: darken($button-secondary-background, 5%) !default;
-$button-secondary-hover-color: $global-inverse-color !default;
-$button-secondary-active-background: darken($button-secondary-background, 10%) !default;
-$button-secondary-active-color: $global-inverse-color !default;
-$button-danger-background: $global-danger-background !default;
-$button-danger-color: $global-inverse-color !default;
-$button-danger-hover-background: darken($button-danger-background, 5%) !default;
-$button-danger-hover-color: $global-inverse-color !default;
-$button-danger-active-background: darken($button-danger-background, 10%) !default;
-$button-danger-active-color: $global-inverse-color !default;
-$button-disabled-background: transparent !default;
-$button-disabled-color: $global-muted-color !default;
-$button-text-line-height: $global-line-height !default;
-$button-text-color: $global-emphasis-color !default;
-$button-text-hover-color: $global-emphasis-color !default;
-$button-text-disabled-color: $global-muted-color !default;
-$button-link-line-height: $global-line-height !default;
-$button-link-color: $global-emphasis-color !default;
-$button-link-hover-color: $global-muted-color !default;
-$button-link-hover-text-decoration: none !default;
-$button-link-disabled-color: $global-muted-color !default;
-$inverse-button-default-background: transparent !default;
-$inverse-button-default-color: $inverse-global-emphasis-color !default;
-$inverse-button-default-hover-background: transparent !default;
-$inverse-button-default-hover-color: $inverse-global-emphasis-color !default;
-$inverse-button-default-active-background: transparent !default;
-$inverse-button-default-active-color: $inverse-global-emphasis-color !default;
-$inverse-button-primary-background: $inverse-global-primary-background !default;
-$inverse-button-primary-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-hover-background: darken($inverse-button-primary-background, 5%) !default;
-$inverse-button-primary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-active-background: darken($inverse-button-primary-background, 10%) !default;
-$inverse-button-primary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-background: $inverse-global-primary-background !default;
-$inverse-button-secondary-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-hover-background: darken($inverse-button-secondary-background, 5%) !default;
-$inverse-button-secondary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-active-background: darken($inverse-button-secondary-background, 10%) !default;
-$inverse-button-secondary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-text-color: $inverse-global-emphasis-color !default;
-$inverse-button-text-hover-color: $inverse-global-emphasis-color !default;
-$inverse-button-text-disabled-color: $inverse-global-muted-color !default;
-$inverse-button-link-color: $inverse-global-emphasis-color !default;
-$inverse-button-link-hover-color: $inverse-global-muted-color !default;
-$card-body-padding-horizontal: $global-gutter !default;
-$card-body-padding-vertical: $global-gutter !default;
-$card-body-padding-horizontal-l: $global-medium-gutter !default;
-$card-body-padding-vertical-l: $global-medium-gutter !default;
-$card-header-padding-horizontal: $global-gutter !default;
-$card-header-padding-vertical: round($global-gutter / 2) !default;
-$card-header-padding-horizontal-l: $global-medium-gutter !default;
-$card-header-padding-vertical-l: round($global-medium-gutter / 2) !default;
-$card-footer-padding-horizontal: $global-gutter !default;
-$card-footer-padding-vertical: ($global-gutter / 2) !default;
-$card-footer-padding-horizontal-l: $global-medium-gutter !default;
-$card-footer-padding-vertical-l: round($global-medium-gutter / 2) !default;
-$card-title-font-size: $global-large-font-size !default;
-$card-title-line-height: 1.4 !default;
-$card-badge-top: 15px !default;
-$card-badge-right: 15px !default;
-$card-badge-height: 22px !default;
-$card-badge-padding-horizontal: 10px !default;
-$card-badge-background: $global-primary-background !default;
-$card-badge-color: $global-inverse-color !default;
-$card-badge-font-size: $global-small-font-size !default;
-$card-hover-background: $global-background !default;
-$card-default-background: $global-background !default;
-$card-default-color: $global-color !default;
-$card-default-title-color: $global-emphasis-color !default;
-$card-default-hover-background: $card-default-background !default;
-$card-primary-background: $global-primary-background !default;
-$card-primary-color: $global-inverse-color !default;
-$card-primary-title-color: $card-primary-color !default;
-$card-primary-hover-background: $card-primary-background !default;
-$card-primary-color-mode: light !default;
-$card-secondary-background: $global-secondary-background !default;
-$card-secondary-color: $global-inverse-color !default;
-$card-secondary-title-color: $card-secondary-color !default;
-$card-secondary-hover-background: $card-secondary-background !default;
-$card-secondary-color-mode: light !default;
-$card-small-body-padding-horizontal: $global-margin !default;
-$card-small-body-padding-vertical: $global-margin !default;
-$card-small-header-padding-horizontal: $global-margin !default;
-$card-small-header-padding-vertical: round($global-margin / 1.5) !default;
-$card-small-footer-padding-horizontal: $global-margin !default;
-$card-small-footer-padding-vertical: round($global-margin / 1.5) !default;
-$global-large-gutter: 70px !default;
-$card-large-body-padding-horizontal-l: $global-large-gutter !default;
-$card-large-body-padding-vertical-l: $global-large-gutter !default;
-$card-large-header-padding-horizontal-l: $global-large-gutter !default;
-$card-large-header-padding-vertical-l: round($global-large-gutter / 2) !default;
-$card-large-footer-padding-horizontal-l: $global-large-gutter !default;
-$card-large-footer-padding-vertical-l: round($global-large-gutter / 2) !default;
-$inverse-card-badge-background: $inverse-global-primary-background !default;
-$inverse-card-badge-color: $inverse-global-inverse-color !default;
-$close-color: $global-muted-color !default;
-$close-hover-color: $global-color !default;
-$inverse-close-color: $inverse-global-muted-color !default;
-$inverse-close-hover-color: $inverse-global-color !default;
-$column-gutter: $global-gutter !default;
-$column-gutter-l: $global-medium-gutter !default;
-$column-divider-rule-color: $global-border !default;
-$column-divider-rule-width: 1px !default;
-$inverse-column-divider-rule-color: $inverse-global-border !default;
-$comment-header-margin-bottom: $global-margin !default;
-$comment-title-font-size: $global-medium-font-size !default;
-$comment-title-line-height: 1.4 !default;
-$comment-meta-font-size: $global-small-font-size !default;
-$comment-meta-line-height: 1.4 !default;
-$comment-meta-color: $global-muted-color !default;
-$comment-list-margin-top: $global-large-margin !default;
-$comment-list-padding-left: 30px !default;
-$comment-list-padding-left-m: 100px !default;
-$container-max-width: 1200px !default;
-$container-xsmall-max-width: 750px !default;
-$container-small-max-width: 900px !default;
-$container-large-max-width: 1400px !default;
-$container-xlarge-max-width: 1600px !default;
-$container-padding-horizontal: 15px !default;
-$container-padding-horizontal-s: $global-gutter !default;
-$container-padding-horizontal-m: $global-medium-gutter !default;
-$countdown-number-line-height: 0.8 !default;
-$countdown-number-font-size: 2rem !default;
-$countdown-number-font-size-s: 4rem !default;
-$countdown-number-font-size-m: 6rem !default;
-$countdown-separator-line-height: 1.6 !default;
-$countdown-separator-font-size: 1rem !default;
-$countdown-separator-font-size-s: 2rem !default;
-$countdown-separator-font-size-m: 3rem !default;
-$description-list-term-color: $global-emphasis-color !default;
-$description-list-term-margin-top: $global-margin !default;
-$description-list-divider-term-margin-top: $global-margin !default;
-$description-list-divider-term-border-width: $global-border-width !default;
-$description-list-divider-term-border: $global-border !default;
-$divider-margin-vertical: $global-margin !default;
-$divider-icon-width: 50px !default;
-$divider-icon-height: 20px !default;
-$divider-icon-color: $global-border !default;
-$divider-icon-line-top: 50% !default;
-$divider-icon-line-width: 100% !default;
-$divider-icon-line-border-width: $global-border-width !default;
-$divider-icon-line-border: $global-border !default;
-$internal-divider-icon-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$divider-small-width: 100px !default;
-$divider-small-border-width: $global-border-width !default;
-$divider-small-border: $global-border !default;
-$divider-vertical-height: 100px !default;
-$divider-vertical-border-width: $global-border-width !default;
-$divider-vertical-border: $global-border !default;
-$inverse-divider-icon-color: $inverse-global-border !default;
-$inverse-divider-icon-line-border: $inverse-global-border !default;
-$inverse-divider-small-border: $inverse-global-border !default;
-$inverse-divider-vertical-border: $inverse-global-border !default;
-$dotnav-margin-horizontal: 12px !default;
-$dotnav-margin-vertical: $dotnav-margin-horizontal !default;
-$dotnav-item-width: 10px !default;
-$dotnav-item-height: $dotnav-item-width !default;
-$dotnav-item-border-radius: 50% !default;
-$dotnav-item-background: transparent !default;
-$dotnav-item-hover-background: rgba($global-color, 0.6) !default;
-$dotnav-item-onclick-background: rgba($global-color, 0.2) !default;
-$dotnav-item-active-background: rgba($global-color, 0.6) !default;
-$inverse-dotnav-item-background: transparent !default;
-$inverse-dotnav-item-hover-background: rgba($inverse-global-color, 0.9) !default;
-$inverse-dotnav-item-onclick-background: rgba($inverse-global-color, 0.5) !default;
-$inverse-dotnav-item-active-background: rgba($inverse-global-color, 0.9) !default;
-$global-z-index: 1000 !default;
-$drop-z-index: $global-z-index + 20 !default;
-$drop-width: 300px !default;
-$drop-margin: $global-margin !default;
-$dropdown-z-index: $global-z-index + 20 !default;
-$dropdown-min-width: 200px !default;
-$dropdown-padding: 25px !default;
-$dropdown-background: $global-background !default;
-$dropdown-color: $global-color !default;
-$dropdown-margin: $global-small-margin !default;
-$dropdown-nav-item-color: $global-muted-color !default;
-$dropdown-nav-item-hover-color: $global-color !default;
-$dropdown-nav-header-color: $global-emphasis-color !default;
-$dropdown-nav-divider-border-width: $global-border-width !default;
-$dropdown-nav-divider-border: $global-border !default;
-$dropdown-nav-sublist-item-color: $global-muted-color !default;
-$dropdown-nav-sublist-item-hover-color: $global-color !default;
-$form-range-thumb-height: 15px !default;
-$form-range-thumb-width: $form-range-thumb-height !default;
-$form-range-thumb-border-radius: 500px !default;
-$form-range-thumb-background: $global-background !default;
-$form-range-track-height: 3px !default;
-$form-range-track-background: darken($global-muted-background, 5%) !default;
-$form-range-track-focus-background: darken($form-range-track-background, 5%) !default;
-$form-height: $global-control-height !default;
-$form-border-width: $global-border-width !default;
-$form-line-height: $form-height - (2* $form-border-width) !default;
-$form-padding-horizontal: 10px !default;
-$form-padding-vertical: round($form-padding-horizontal * 0.6) !default;
-$form-background: $global-background !default;
-$form-color: $global-color !default;
-$form-focus-background: $global-background !default;
-$form-focus-color: $global-color !default;
-$form-disabled-background: $global-muted-background !default;
-$form-disabled-color: $global-muted-color !default;
-$form-placeholder-color: $global-muted-color !default;
-$form-small-height: $global-control-small-height !default;
-$form-small-padding-horizontal: 8px !default;
-$form-small-padding-vertical: round($form-small-padding-horizontal * 0.6) !default;
-$form-small-line-height: $form-small-height - (2* $form-border-width) !default;
-$form-small-font-size: $global-small-font-size !default;
-$form-large-height: $global-control-large-height !default;
-$form-large-padding-horizontal: 12px !default;
-$form-large-padding-vertical: round($form-large-padding-horizontal * 0.6) !default;
-$form-large-line-height: $form-large-height - (2* $form-border-width) !default;
-$form-large-font-size: $global-medium-font-size !default;
-$form-danger-color: $global-danger-background !default;
-$form-success-color: $global-success-background !default;
-$form-width-xsmall: 50px !default;
-$form-width-small: 130px !default;
-$form-width-medium: 200px !default;
-$form-width-large: 500px !default;
-$form-select-padding-right: 20px !default;
-$form-select-icon-color: $global-color !default;
-$form-select-option-color: #444 !default;
-$form-select-disabled-icon-color: $global-muted-color !default;
-$form-datalist-padding-right: 20px !default;
-$form-datalist-icon-color: $global-color !default;
-$form-radio-size: 16px !default;
-$form-radio-margin-top: -4px !default;
-$form-radio-background: transparent !default;
-$form-radio-focus-background: darken($form-radio-background, 5%) !default;
-$form-radio-checked-background: $global-primary-background !default;
-$form-radio-checked-icon-color: $global-inverse-color !default;
-$form-radio-checked-focus-background: darken($global-primary-background, 10%) !default;
-$form-radio-disabled-background: $global-muted-background !default;
-$form-radio-disabled-icon-color: $global-muted-color !default;
-$form-legend-font-size: $global-large-font-size !default;
-$form-legend-line-height: 1.4 !default;
-$form-stacked-margin-bottom: 5px !default;
-$form-horizontal-label-width: 200px !default;
-$form-horizontal-label-margin-top: 7px !default;
-$form-horizontal-controls-margin-left: 215px !default;
-$form-horizontal-controls-text-padding-top: 7px !default;
-$form-icon-width: $form-height !default;
-$form-icon-color: $global-muted-color !default;
-$form-icon-hover-color: $global-color !default;
-$internal-form-select-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-datalist-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-radio-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-form-checkbox-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-checkbox-indeterminate-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-global-muted-background: rgba($global-inverse-color, 0.1) !default;
-$inverse-form-background: $inverse-global-muted-background !default;
-$inverse-form-color: $inverse-global-color !default;
-$inverse-form-focus-background: fadein($inverse-form-background, 5%) !default;
-$inverse-form-focus-color: $inverse-global-color !default;
-$inverse-form-placeholder-color: $inverse-global-muted-color !default;
-$inverse-form-select-icon-color: $inverse-global-color !default;
-$inverse-form-datalist-icon-color: $inverse-global-color !default;
-$inverse-form-radio-background: $inverse-global-muted-background !default;
-$inverse-form-radio-focus-background: fadein($inverse-form-radio-background, 5%) !default;
-$inverse-form-radio-checked-background: $inverse-global-primary-background !default;
-$inverse-form-radio-checked-icon-color: $inverse-global-inverse-color !default;
-$inverse-form-radio-checked-focus-background: fadein($inverse-global-primary-background, 10%) !default;
-$inverse-form-icon-color: $inverse-global-muted-color !default;
-$inverse-form-icon-hover-color: $inverse-global-color !default;
-$grid-gutter-horizontal: $global-gutter !default;
-$grid-gutter-vertical: $grid-gutter-horizontal !default;
-$grid-gutter-horizontal-l: $global-medium-gutter !default;
-$grid-gutter-vertical-l: $grid-gutter-horizontal-l !default;
-$grid-small-gutter-horizontal: $global-small-gutter !default;
-$grid-small-gutter-vertical: $grid-small-gutter-horizontal !default;
-$grid-medium-gutter-horizontal: $global-gutter !default;
-$grid-medium-gutter-vertical: $grid-medium-gutter-horizontal !default;
-$grid-large-gutter-horizontal: $global-medium-gutter !default;
-$grid-large-gutter-vertical: $grid-large-gutter-horizontal !default;
-$grid-large-gutter-horizontal-l: $global-large-gutter !default;
-$grid-large-gutter-vertical-l: $grid-large-gutter-horizontal-l !default;
-$grid-divider-border-width: $global-border-width !default;
-$grid-divider-border: $global-border !default;
-$inverse-grid-divider-border: $inverse-global-border !default;
-$heading-medium-font-size-l: 4rem !default;
-$heading-small-font-size-m: $heading-medium-font-size-l * 0.8125 !default;
-$heading-small-font-size: $heading-small-font-size-m * 0.8 !default;
-$heading-medium-font-size-m: $heading-medium-font-size-l * 0.875 !default;
-$heading-medium-font-size: $heading-medium-font-size-m * 0.825 !default;
-$heading-large-font-size-m: $heading-medium-font-size-l !default;
-$heading-large-font-size: $heading-large-font-size-m * 0.85 !default;
-$heading-xlarge-font-size: $heading-large-font-size-m !default;
-$heading-large-font-size-l: 6rem !default;
-$heading-xlarge-font-size-m: $heading-large-font-size-l !default;
-$heading-2xlarge-font-size: $heading-xlarge-font-size-m !default;
-$heading-xlarge-font-size-l: 8rem !default;
-$heading-2xlarge-font-size-m: $heading-xlarge-font-size-l !default;
-$heading-2xlarge-font-size-l: 11rem !default;
-$heading-small-line-height: 1.2 !default;
-$heading-medium-line-height: 1.1 !default;
-$heading-large-line-height: 1.1 !default;
-$heading-xlarge-line-height: 1 !default;
-$heading-2xlarge-line-height: 1 !default;
-$heading-divider-padding-bottom: unquote('calc(5px + 0.1em)') !default;
-$heading-divider-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-divider-border: $global-border !default;
-$heading-bullet-top: unquote('calc(-0.1 * 1em)') !default;
-$heading-bullet-height: unquote('calc(4px + 0.7em)') !default;
-$heading-bullet-margin-right: unquote('calc(5px + 0.2em)') !default;
-$heading-bullet-border-width: unquote('calc(5px + 0.1em)') !default;
-$heading-bullet-border: $global-border !default;
-$heading-line-top: 50% !default;
-$heading-line-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-line-height: $heading-line-border-width !default;
-$heading-line-width: 2000px !default;
-$heading-line-border: $global-border !default;
-$heading-line-margin-horizontal: unquote('calc(5px + 0.3em)') !default;
-$heading-primary-font-size-l: 3.75rem !default;
-$heading-primary-line-height-l: 1.1 !default;
-$heading-primary-font-size-m: $heading-primary-font-size-l * 0.9 !default;
-$heading-primary-font-size: $heading-primary-font-size-l * 0.8 !default;
-$heading-primary-line-height: 1.2 !default;
-$heading-hero-font-size-l: 8rem !default;
-$heading-hero-line-height-l: 1 !default;
-$heading-hero-font-size-m: $heading-hero-font-size-l * 0.75 !default;
-$heading-hero-line-height-m: 1 !default;
-$heading-hero-font-size: $heading-hero-font-size-l * 0.5 !default;
-$heading-hero-line-height: 1.1 !default;
-$inverse-heading-divider-border: $inverse-global-border !default;
-$inverse-heading-bullet-border: $inverse-global-border !default;
-$inverse-heading-line-border: $inverse-global-border !default;
-$height-small-height: 150px !default;
-$height-medium-height: 300px !default;
-$height-large-height: 450px !default;
-$icon-image-size: 20px !default;
-$icon-link-color: $global-muted-color !default;
-$icon-link-hover-color: $global-color !default;
-$icon-link-active-color: darken($global-color, 5%) !default;
-$icon-button-size: 36px !default;
-$icon-button-border-radius: 500px !default;
-$icon-button-background: $global-muted-background !default;
-$icon-button-color: $global-muted-color !default;
-$icon-button-hover-background: darken($icon-button-background, 5%) !default;
-$icon-button-hover-color: $global-color !default;
-$icon-button-active-background: darken($icon-button-background, 10%) !default;
-$icon-button-active-color: $global-color !default;
-$inverse-icon-link-color: $inverse-global-muted-color !default;
-$inverse-icon-link-hover-color: $inverse-global-color !default;
-$inverse-icon-link-active-color: $inverse-global-color !default;
-$inverse-icon-button-background: $inverse-global-muted-background !default;
-$inverse-icon-button-color: $inverse-global-muted-color !default;
-$inverse-icon-button-hover-background: fadein($inverse-icon-button-background, 5%) !default;
-$inverse-icon-button-hover-color: $inverse-global-color !default;
-$inverse-icon-button-active-background: fadein($inverse-icon-button-background, 10%) !default;
-$inverse-icon-button-active-color: $inverse-global-color !default;
-$iconnav-margin-horizontal: $global-small-margin !default;
-$iconnav-margin-vertical: $iconnav-margin-horizontal !default;
-$iconnav-item-color: $global-muted-color !default;
-$iconnav-item-hover-color: $global-color !default;
-$iconnav-item-active-color: $global-color !default;
-$inverse-iconnav-item-color: $inverse-global-muted-color !default;
-$inverse-iconnav-item-hover-color: $inverse-global-color !default;
-$inverse-iconnav-item-active-color: $inverse-global-color !default;
-$inverse-global-color-mode: light !default;
-$label-padding-vertical: 0 !default;
-$label-padding-horizontal: $global-small-margin !default;
-$label-background: $global-primary-background !default;
-$label-line-height: $global-line-height !default;
-$label-font-size: $global-small-font-size !default;
-$label-color: $global-inverse-color !default;
-$label-success-background: $global-success-background !default;
-$label-success-color: $global-inverse-color !default;
-$label-warning-background: $global-warning-background !default;
-$label-warning-color: $global-inverse-color !default;
-$label-danger-background: $global-danger-background !default;
-$label-danger-color: $global-inverse-color !default;
-$inverse-label-background: $inverse-global-primary-background !default;
-$inverse-label-color: $inverse-global-inverse-color !default;
-$leader-fill-content: unquote('.') !default;
-$leader-fill-margin-left: $global-small-gutter !default;
-$lightbox-z-index: $global-z-index + 10 !default;
-$lightbox-background: #000 !default;
-$lightbox-item-color: rgba(255,255,255,0.7) !default;
-$lightbox-item-max-width: 100vw !default;
-$lightbox-item-max-height: 100vh !default;
-$lightbox-toolbar-padding-vertical: 10px !default;
-$lightbox-toolbar-padding-horizontal: 10px !default;
-$lightbox-toolbar-background: rgba(0,0,0,0.3) !default;
-$lightbox-toolbar-color: rgba(255,255,255,0.7) !default;
-$lightbox-toolbar-icon-padding: 5px !default;
-$lightbox-toolbar-icon-color: rgba(255,255,255,0.7) !default;
-$lightbox-toolbar-icon-hover-color: #fff !default;
-$lightbox-button-size: 50px !default;
-$lightbox-button-background: $lightbox-toolbar-background !default;
-$lightbox-button-color: rgba(255,255,255,0.7) !default;
-$lightbox-button-hover-color: #fff !default;
-$link-muted-color: $global-muted-color !default;
-$link-muted-hover-color: $global-color !default;
-$link-text-hover-color: $global-muted-color !default;
-$link-heading-hover-color: $global-primary-background !default;
-$link-heading-hover-text-decoration: none !default;
-$inverse-link-muted-color: $inverse-global-muted-color !default;
-$inverse-link-muted-hover-color: $inverse-global-color !default;
-$inverse-link-text-hover-color: $inverse-global-muted-color !default;
-$inverse-link-heading-hover-color: $inverse-global-primary-background !default;
-$list-margin-top: $global-small-margin !default;
-$list-padding-left: 30px !default;
-$list-marker-height: ($global-line-height * 1em) !default;
-$list-muted-color: $global-muted-color !default;
-$list-emphasis-color: $global-emphasis-color !default;
-$list-primary-color: $global-primary-background !default;
-$list-secondary-color: $global-secondary-background !default;
-$list-bullet-icon-color: $global-color !default;
-$list-divider-margin-top: $global-small-margin !default;
-$list-divider-border-width: $global-border-width !default;
-$list-divider-border: $global-border !default;
-$list-striped-padding-vertical: $global-small-margin !default;
-$list-striped-padding-horizontal: $global-small-margin !default;
-$list-striped-background: $global-muted-background !default;
-$list-large-margin-top: $global-margin !default;
-$list-large-divider-margin-top: $global-margin !default;
-$list-large-striped-padding-vertical: $global-margin !default;
-$list-large-striped-padding-horizontal: $global-small-margin !default;
-$internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-list-muted-color: $inverse-global-muted-color !default;
-$inverse-list-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-list-primary-color: $inverse-global-primary-background !default;
-$inverse-list-secondary-color: $inverse-global-primary-background !default;
-$inverse-list-divider-border: $inverse-global-border !default;
-$inverse-list-striped-background: $inverse-global-muted-background !default;
-$inverse-list-bullet-icon-color: $inverse-global-color !default;
-$margin-margin: $global-margin !default;
-$margin-small-margin: $global-small-margin !default;
-$margin-medium-margin: $global-medium-margin !default;
-$margin-large-margin: $global-medium-margin !default;
-$margin-large-margin-l: $global-large-margin !default;
-$margin-xlarge-margin: $global-large-margin !default;
-$global-xlarge-margin: 140px !default;
-$margin-xlarge-margin-l: $global-xlarge-margin !default;
-$marker-padding: 5px !default;
-$marker-background: $global-secondary-background !default;
-$marker-color: $global-inverse-color !default;
-$marker-hover-color: $global-inverse-color !default;
-$inverse-marker-background: $global-muted-background !default;
-$inverse-marker-color: $global-color !default;
-$inverse-marker-hover-color: $global-color !default;
-$modal-z-index: $global-z-index + 10 !default;
-$modal-background: rgba(0,0,0,0.6) !default;
-$modal-padding-horizontal: 15px !default;
-$modal-padding-horizontal-s: $global-gutter !default;
-$modal-padding-horizontal-m: $global-medium-gutter !default;
-$modal-padding-vertical: $modal-padding-horizontal !default;
-$modal-padding-vertical-s: 50px !default;
-$modal-dialog-width: 600px !default;
-$modal-dialog-background: $global-background !default;
-$modal-container-width: 1200px !default;
-$modal-body-padding-horizontal: $global-gutter !default;
-$modal-body-padding-vertical: $global-gutter !default;
-$modal-header-padding-horizontal: $global-gutter !default;
-$modal-header-padding-vertical: ($modal-header-padding-horizontal / 2) !default;
-$modal-header-background: $modal-dialog-background !default;
-$modal-footer-padding-horizontal: $global-gutter !default;
-$modal-footer-padding-vertical: ($modal-footer-padding-horizontal / 2) !default;
-$modal-footer-background: $modal-dialog-background !default;
-$modal-title-font-size: $global-xlarge-font-size !default;
-$modal-title-line-height: 1.3 !default;
-$modal-close-position: $global-small-margin !default;
-$modal-close-padding: 5px !default;
-$modal-close-outside-position: 0 !default;
-$modal-close-outside-translate: 100% !default;
-$modal-close-outside-color: lighten($global-inverse-color, 20%) !default;
-$modal-close-outside-hover-color: $global-inverse-color !default;
-$nav-item-padding-vertical: 5px !default;
-$nav-item-padding-horizontal: 0 !default;
-$nav-sublist-padding-vertical: 5px !default;
-$nav-sublist-padding-left: 15px !default;
-$nav-sublist-deeper-padding-left: 15px !default;
-$nav-sublist-item-padding-vertical: 2px !default;
-$nav-parent-icon-width: ($global-line-height * 1em) !default;
-$nav-parent-icon-height: $nav-parent-icon-width !default;
-$nav-parent-icon-color: $global-color !default;
-$nav-header-padding-vertical: $nav-item-padding-vertical !default;
-$nav-header-padding-horizontal: $nav-item-padding-horizontal !default;
-$nav-header-font-size: $global-small-font-size !default;
-$nav-header-text-transform: uppercase !default;
-$nav-header-margin-top: $global-margin !default;
-$nav-divider-margin-vertical: 5px !default;
-$nav-divider-margin-horizontal: 0 !default;
-$nav-default-item-color: $global-muted-color !default;
-$nav-default-item-hover-color: $global-color !default;
-$nav-default-item-active-color: $global-emphasis-color !default;
-$nav-default-header-color: $global-emphasis-color !default;
-$nav-default-divider-border-width: $global-border-width !default;
-$nav-default-divider-border: $global-border !default;
-$nav-default-sublist-item-color: $global-muted-color !default;
-$nav-default-sublist-item-hover-color: $global-color !default;
-$nav-default-sublist-item-active-color: $global-emphasis-color !default;
-$nav-primary-item-font-size: $global-large-font-size !default;
-$nav-primary-item-line-height: $global-line-height !default;
-$nav-primary-item-color: $global-muted-color !default;
-$nav-primary-item-hover-color: $global-color !default;
-$nav-primary-item-active-color: $global-emphasis-color !default;
-$nav-primary-header-color: $global-emphasis-color !default;
-$nav-primary-divider-border-width: $global-border-width !default;
-$nav-primary-divider-border: $global-border !default;
-$nav-primary-sublist-item-color: $global-muted-color !default;
-$nav-primary-sublist-item-hover-color: $global-color !default;
-$nav-primary-sublist-item-active-color: $global-emphasis-color !default;
-$nav-dividers-margin-top: 0 !default;
-$nav-dividers-border-width: $global-border-width !default;
-$nav-dividers-border: $global-border !default;
-$internal-nav-parent-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-nav-parent-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-nav-parent-icon-color: $inverse-global-color !default;
-$inverse-nav-default-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-divider-border: $inverse-global-border !default;
-$inverse-nav-default-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-sublist-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-divider-border: $inverse-global-border !default;
-$inverse-nav-primary-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-sublist-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-dividers-border: $inverse-global-border !default;
-$navbar-background: $global-muted-background !default;
-$navbar-color-mode: none !default;
-$navbar-nav-item-height: 80px !default;
-$navbar-nav-item-padding-horizontal: 15px !default;
-$navbar-nav-item-color: $global-muted-color !default;
-$navbar-nav-item-font-size: $global-small-font-size !default;
-$navbar-nav-item-font-family: $global-font-family !default;
-$navbar-nav-item-hover-color: $global-color !default;
-$navbar-nav-item-onclick-color: $global-emphasis-color !default;
-$navbar-nav-item-active-color: $global-emphasis-color !default;
-$navbar-item-color: $global-color !default;
-$navbar-toggle-color: $global-muted-color !default;
-$navbar-toggle-hover-color: $global-color !default;
-$navbar-subtitle-font-size: $global-small-font-size !default;
-$navbar-dropdown-z-index: $global-z-index + 20 !default;
-$navbar-dropdown-width: 200px !default;
-$navbar-dropdown-margin: 15px !default;
-$navbar-dropdown-padding: 25px !default;
-$navbar-dropdown-background: $global-background !default;
-$navbar-dropdown-color: $global-color !default;
-$navbar-dropdown-grid-gutter-horizontal: ($navbar-dropdown-padding * 2) !default;
-$navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
-$navbar-dropdown-dropbar-margin-top: 0 !default;
-$navbar-dropdown-dropbar-margin-bottom: $navbar-dropdown-dropbar-margin-top !default;
-$navbar-dropdown-nav-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-header-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-divider-border-width: $global-border-width !default;
-$navbar-dropdown-nav-divider-border: $global-border !default;
-$navbar-dropdown-nav-sublist-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-sublist-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-sublist-item-active-color: $global-emphasis-color !default;
-$navbar-dropbar-background: $navbar-dropdown-background !default;
-$navbar-dropbar-z-index: $global-z-index - 20 !default;
-$inverse-navbar-nav-item-color: $inverse-global-muted-color !default;
-$inverse-navbar-nav-item-hover-color: $inverse-global-color !default;
-$inverse-navbar-nav-item-onclick-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-nav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-item-color: $inverse-global-color !default;
-$inverse-navbar-toggle-color: $inverse-global-muted-color !default;
-$inverse-navbar-toggle-hover-color: $inverse-global-color !default;
-$notification-position: 10px !default;
-$notification-z-index: $global-z-index + 40 !default;
-$notification-width: 350px !default;
-$notification-message-margin-top: 10px !default;
-$notification-message-padding: $global-small-gutter !default;
-$notification-message-background: $global-muted-background !default;
-$notification-message-color: $global-color !default;
-$notification-message-font-size: $global-medium-font-size !default;
-$notification-message-line-height: 1.4 !default;
-$notification-close-top: $notification-message-padding + 5px !default;
-$notification-close-right: $notification-message-padding !default;
-$notification-message-primary-color: $global-primary-background !default;
-$notification-message-success-color: $global-success-background !default;
-$notification-message-warning-color: $global-warning-background !default;
-$notification-message-danger-color: $global-danger-background !default;
-$offcanvas-z-index: $global-z-index !default;
-$offcanvas-bar-width: 270px !default;
-$offcanvas-bar-padding-vertical: $global-margin !default;
-$offcanvas-bar-padding-horizontal: $global-margin !default;
-$offcanvas-bar-background: $global-secondary-background !default;
-$offcanvas-bar-color-mode: light !default;
-$offcanvas-bar-width-m: 350px !default;
-$offcanvas-bar-padding-vertical-m: $global-medium-gutter !default;
-$offcanvas-bar-padding-horizontal-m: $global-medium-gutter !default;
-$offcanvas-close-position: 20px !default;
-$offcanvas-close-padding: 5px !default;
-$offcanvas-overlay-background: rgba(0,0,0,0.1) !default;
-$overlay-padding-horizontal: $global-gutter !default;
-$overlay-padding-vertical: $global-gutter !default;
-$overlay-default-background: rgba($global-background, 0.8) !default;
-$overlay-primary-background: rgba($global-secondary-background, 0.8) !default;
-$overlay-primary-color-mode: light !default;
-$padding-padding: $global-gutter !default;
-$padding-padding-l: $global-medium-gutter !default;
-$padding-small-padding: $global-small-gutter !default;
-$padding-large-padding: $global-gutter !default;
-$padding-large-padding-l: $global-large-gutter !default;
-$pagination-margin-horizontal: 0 !default;
-$pagination-item-padding-vertical: 5px !default;
-$pagination-item-padding-horizontal: 10px !default;
-$pagination-item-color: $global-muted-color !default;
-$pagination-item-hover-color: $global-color !default;
-$pagination-item-hover-text-decoration: none !default;
-$pagination-item-active-color: $global-color !default;
-$pagination-item-disabled-color: $global-muted-color !default;
-$inverse-pagination-item-color: $inverse-global-muted-color !default;
-$inverse-pagination-item-hover-color: $inverse-global-color !default;
-$inverse-pagination-item-active-color: $inverse-global-color !default;
-$inverse-pagination-item-disabled-color: $inverse-global-muted-color !default;
-$placeholder-margin-vertical: $global-margin !default;
-$placeholder-padding-vertical: $global-gutter !default;
-$placeholder-padding-horizontal: $global-gutter !default;
-$placeholder-background: transparent !default;
-$position-small-margin: $global-small-gutter !default;
-$position-medium-margin: $global-gutter !default;
-$position-large-margin: $global-gutter !default;
-$position-large-margin-l: 50px !default;
-$progress-height: 15px !default;
-$progress-margin-vertical: $global-margin !default;
-$progress-background: $global-muted-background !default;
-$progress-bar-background: $global-primary-background !default;
-$search-color: $global-color !default;
-$search-placeholder-color: $global-muted-color !default;
-$search-icon-color: $global-muted-color !default;
-$search-default-width: 240px !default;
-$search-default-height: $global-control-height !default;
-$search-default-padding-horizontal: 10px !default;
-$search-default-background: transparent !default;
-$search-default-focus-background: darken($search-default-background, 5%) !default;
-$search-default-icon-width: $global-control-height !default;
-$search-navbar-width: 400px !default;
-$search-navbar-height: 40px !default;
-$search-navbar-background: transparent !default;
-$search-navbar-font-size: $global-large-font-size !default;
-$search-navbar-icon-width: 40px !default;
-$search-large-width: 500px !default;
-$search-large-height: 80px !default;
-$search-large-background: transparent !default;
-$search-large-font-size: $global-2xlarge-font-size !default;
-$search-large-icon-width: 80px !default;
-$search-toggle-color: $global-muted-color !default;
-$search-toggle-hover-color: $global-color !default;
-$inverse-search-color: $inverse-global-color !default;
-$inverse-search-placeholder-color: $inverse-global-muted-color !default;
-$inverse-search-icon-color: $inverse-global-muted-color !default;
-$inverse-search-default-background: transparent !default;
-$inverse-search-default-focus-background: fadein($inverse-search-default-background, 5%) !default;
-$inverse-search-navbar-background: transparent !default;
-$inverse-search-large-background: transparent !default;
-$inverse-search-toggle-color: $inverse-global-muted-color !default;
-$inverse-search-toggle-hover-color: $inverse-global-color !default;
-$section-padding-vertical: $global-medium-margin !default;
-$section-padding-vertical-m: $global-large-margin !default;
-$section-xsmall-padding-vertical: $global-margin !default;
-$section-small-padding-vertical: $global-medium-margin !default;
-$section-large-padding-vertical: $global-large-margin !default;
-$section-large-padding-vertical-m: $global-xlarge-margin !default;
-$section-xlarge-padding-vertical: $global-xlarge-margin !default;
-$section-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-$section-default-background: $global-background !default;
-$section-muted-background: $global-muted-background !default;
-$section-primary-background: $global-primary-background !default;
-$section-primary-color-mode: light !default;
-$section-secondary-background: $global-secondary-background !default;
-$section-secondary-color-mode: light !default;
-$slidenav-padding-vertical: 5px !default;
-$slidenav-padding-horizontal: 10px !default;
-$slidenav-color: rgba($global-color, 0.5) !default;
-$slidenav-hover-color: rgba($global-color, 0.9) !default;
-$slidenav-active-color: rgba($global-color, 0.5) !default;
-$slidenav-large-padding-vertical: 10px !default;
-$slidenav-large-padding-horizontal: $slidenav-large-padding-vertical !default;
-$inverse-slidenav-color: rgba($inverse-global-color, 0.7) !default;
-$inverse-slidenav-hover-color: rgba($inverse-global-color, 0.95) !default;
-$inverse-slidenav-active-color: rgba($inverse-global-color, 0.7) !default;
-$slider-container-margin-top: -11px !default;
-$slider-container-margin-bottom: -39px !default;
-$slider-container-margin-left: -25px !default;
-$slider-container-margin-right: -25px !default;
-$sortable-dragged-z-index: $global-z-index + 50 !default;
-$sortable-placeholder-opacity: 0 !default;
-$sortable-empty-height: 50px !default;
-$spinner-size: 30px !default;
-$spinner-stroke-width: 1 !default;
-$spinner-radius: floor(($spinner-size - $spinner-stroke-width) / 2) !default;
-$spinner-circumference: round(2 * 3.141 * $spinner-radius) !default;
-$spinner-duration: 1.4s !default;
-$sticky-z-index: $global-z-index - 20 !default;
-$sticky-animation-duration: 0.2s !default;
-$sticky-reverse-animation-duration: 0.2s !default;
-$subnav-margin-horizontal: 20px !default;
-$subnav-item-color: $global-muted-color !default;
-$subnav-item-hover-color: $global-color !default;
-$subnav-item-hover-text-decoration: none !default;
-$subnav-item-active-color: $global-emphasis-color !default;
-$subnav-divider-margin-horizontal: $subnav-margin-horizontal !default;
-$subnav-divider-border-height: 1.5em !default;
-$subnav-divider-border-width: $global-border-width !default;
-$subnav-divider-border: $global-border !default;
-$subnav-pill-item-padding-vertical: 5px !default;
-$subnav-pill-item-padding-horizontal: 10px !default;
-$subnav-pill-item-background: transparent !default;
-$subnav-pill-item-color: $subnav-item-color !default;
-$subnav-pill-item-hover-background: $global-muted-background !default;
-$subnav-pill-item-hover-color: $global-color !default;
-$subnav-pill-item-onclick-background: $subnav-pill-item-hover-background !default;
-$subnav-pill-item-onclick-color: $subnav-pill-item-hover-color !default;
-$subnav-pill-item-active-background: $global-primary-background !default;
-$subnav-pill-item-active-color: $global-inverse-color !default;
-$subnav-item-disabled-color: $global-muted-color !default;
-$inverse-subnav-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-subnav-divider-border: $inverse-global-border !default;
-$inverse-subnav-pill-item-background: transparent !default;
-$inverse-subnav-pill-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-pill-item-hover-background: $inverse-global-muted-background !default;
-$inverse-subnav-pill-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-pill-item-onclick-background: $inverse-subnav-pill-item-hover-background !default;
-$inverse-subnav-pill-item-onclick-color: $inverse-subnav-pill-item-hover-color !default;
-$inverse-subnav-pill-item-active-background: $inverse-global-primary-background !default;
-$inverse-subnav-pill-item-active-color: $inverse-global-inverse-color !default;
-$inverse-subnav-item-disabled-color: $inverse-global-muted-color !default;
-$tab-margin-horizontal: 20px !default;
-$tab-item-padding-horizontal: 10px !default;
-$tab-item-padding-vertical: 5px !default;
-$tab-item-color: $global-muted-color !default;
-$tab-item-hover-color: $global-color !default;
-$tab-item-hover-text-decoration: none !default;
-$tab-item-active-color: $global-emphasis-color !default;
-$tab-item-disabled-color: $global-muted-color !default;
-$inverse-tab-item-color: $inverse-global-muted-color !default;
-$inverse-tab-item-hover-color: $inverse-global-color !default;
-$inverse-tab-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-tab-item-disabled-color: $inverse-global-muted-color !default;
-$table-margin-vertical: $global-margin !default;
-$table-cell-padding-vertical: 16px !default;
-$table-cell-padding-horizontal: 12px !default;
-$table-header-cell-font-size: $global-small-font-size !default;
-$table-header-cell-font-weight: normal !default;
-$table-header-cell-color: $global-muted-color !default;
-$table-footer-font-size: $global-small-font-size !default;
-$table-caption-font-size: $global-small-font-size !default;
-$table-caption-color: $global-muted-color !default;
-$table-row-active-background: #ffd !default;
-$table-divider-border-width: $global-border-width !default;
-$table-divider-border: $global-border !default;
-$table-striped-row-background: $global-muted-background !default;
-$table-hover-row-background: $table-row-active-background !default;
-$table-small-cell-padding-vertical: 10px !default;
-$table-small-cell-padding-horizontal: 12px !default;
-$table-large-cell-padding-vertical: 22px !default;
-$table-large-cell-padding-horizontal: 12px !default;
-$table-expand-min-width: 150px !default;
-$inverse-table-header-cell-color: $inverse-global-color !default;
-$inverse-table-caption-color: $inverse-global-muted-color !default;
-$inverse-table-row-active-background: fade-out($inverse-global-muted-background, 0.02) !default;
-$inverse-table-divider-border: $inverse-global-border !default;
-$inverse-table-striped-row-background: $inverse-global-muted-background !default;
-$inverse-table-hover-row-background: $inverse-table-row-active-background !default;
-$text-lead-font-size: $global-large-font-size !default;
-$text-lead-line-height: 1.5 !default;
-$text-lead-color: $global-emphasis-color !default;
-$text-meta-font-size: $global-small-font-size !default;
-$text-meta-line-height: 1.4 !default;
-$text-meta-color: $global-muted-color !default;
-$text-small-font-size: $global-small-font-size !default;
-$text-small-line-height: 1.5 !default;
-$text-large-font-size: $global-large-font-size !default;
-$text-large-line-height: 1.5 !default;
-$text-muted-color: $global-muted-color !default;
-$text-emphasis-color: $global-emphasis-color !default;
-$text-primary-color: $global-primary-background !default;
-$text-secondary-color: $global-secondary-background !default;
-$text-success-color: $global-success-background !default;
-$text-warning-color: $global-warning-background !default;
-$text-danger-color: $global-danger-background !default;
-$text-background-color: $global-primary-background !default;
-$inverse-text-lead-color: $inverse-global-color !default;
-$inverse-text-meta-color: $inverse-global-muted-color !default;
-$inverse-text-muted-color: $inverse-global-muted-color !default;
-$inverse-text-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-text-primary-color: $inverse-global-primary-background !default;
-$inverse-text-secondary-color: $inverse-global-primary-background !default;
-$thumbnav-margin-horizontal: 15px !default;
-$thumbnav-margin-vertical: $thumbnav-margin-horizontal !default;
-$tile-padding-horizontal: 15px !default;
-$tile-padding-horizontal-s: $global-gutter !default;
-$tile-padding-horizontal-m: $global-medium-gutter !default;
-$tile-padding-vertical: $global-medium-margin !default;
-$tile-padding-vertical-m: $global-large-margin !default;
-$tile-xsmall-padding-vertical: $global-margin !default;
-$tile-small-padding-vertical: $global-medium-margin !default;
-$tile-large-padding-vertical: $global-large-margin !default;
-$tile-large-padding-vertical-m: $global-xlarge-margin !default;
-$tile-xlarge-padding-vertical: $global-xlarge-margin !default;
-$tile-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-$tile-default-background: $global-background !default;
-$tile-muted-background: $global-muted-background !default;
-$tile-primary-background: $global-primary-background !default;
-$tile-primary-color-mode: light !default;
-$tile-secondary-background: $global-secondary-background !default;
-$tile-secondary-color-mode: light !default;
-$tooltip-z-index: $global-z-index + 30 !default;
-$tooltip-max-width: 200px !default;
-$tooltip-padding-vertical: 3px !default;
-$tooltip-padding-horizontal: 6px !default;
-$tooltip-background: #666 !default;
-$tooltip-border-radius: 2px !default;
-$tooltip-color: $global-inverse-color !default;
-$tooltip-font-size: 12px !default;
-$tooltip-margin: 10px !default;
-$totop-padding: 5px !default;
-$totop-color: $global-muted-color !default;
-$totop-hover-color: $global-color !default;
-$totop-active-color: $global-emphasis-color !default;
-$inverse-totop-color: $inverse-global-muted-color !default;
-$inverse-totop-hover-color: $inverse-global-color !default;
-$inverse-totop-active-color: $inverse-global-emphasis-color !default;
-$transition-duration: 0.3s !default;
-$transition-scale: 1.03 !default;
-$transition-slide-small-translate: 10px !default;
-$transition-slide-medium-translate: 50px !default;
-$transition-slow-duration: 0.7s !default;
-$panel-scrollable-height: 170px !default;
-$panel-scrollable-padding: 10px !default;
-$panel-scrollable-border-width: $global-border-width !default;
-$panel-scrollable-border: $global-border !default;
-$border-rounded-border-radius: 5px !default;
-$box-shadow-duration: 0.1s !default;
-$box-shadow-bottom-height: 30px !default;
-$box-shadow-bottom-border-radius: 100% !default;
-$box-shadow-bottom-background: #444 !default;
-$box-shadow-bottom-blur: 20px !default;
-$dropcap-margin-right: 10px !default;
-$dropcap-font-size: (($global-line-height * 3) * 1em) !default;
-$logo-font-size: $global-large-font-size !default;
-$logo-font-family: $global-font-family !default;
-$logo-color: $global-color !default;
-$logo-hover-color: $global-color !default;
-$dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3) !default;
-$inverse-logo-color: $inverse-global-color !default;
-$inverse-logo-hover-color: $inverse-global-color !default;
-$deprecated: false !default;
-$breakpoint-small: 640px !default;
-$breakpoint-medium: 960px !default;
-$breakpoint-large: 1200px !default;
-$breakpoint-xlarge: 1600px !default;
-$breakpoint-xsmall-max: ($breakpoint-small - 1) !default;
-$breakpoint-small-max: ($breakpoint-medium - 1) !default;
-$breakpoint-medium-max: ($breakpoint-large - 1) !default;
-$breakpoint-large-max: ($breakpoint-xlarge - 1) !default;
-$global-small-box-shadow: 0 2px 8px rgba(0,0,0,0.08) !default;
-$global-medium-box-shadow: 0 5px 15px rgba(0,0,0,0.08) !default;
-$global-large-box-shadow: 0 14px 25px rgba(0,0,0,0.16) !default;
-$global-xlarge-box-shadow: 0 28px 50px rgba(0,0,0,0.16) !default;
-$width-small-width: 150px !default;
-$width-medium-width: 300px !default;
-$width-large-width: 450px !default;
-$width-xlarge-width: 600px !default;
-$width-2xlarge-width: 750px !default;
-$accordion-icon-margin-left: 10px !default;
-$accordion-icon-color: $global-color !default;
-$internal-accordion-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-accordion-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$alert-close-opacity: 0.4 !default;
-$alert-close-hover-opacity: 0.8 !default;
-$article-meta-link-color: $article-meta-color !default;
-$article-meta-link-hover-color: $global-color !default;
-$base-code-padding-horizontal: 6px !default;
-$base-code-padding-vertical: 2px !default;
-$base-code-background: $global-muted-background !default;
-$base-blockquote-color: $global-emphasis-color !default;
-$base-blockquote-footer-color: $global-color !default;
-$base-pre-padding: 10px !default;
-$base-pre-background: $global-background !default;
-$base-pre-border-width: $global-border-width !default;
-$base-pre-border: $global-border !default;
-$base-pre-border-radius: 3px !default;
-$inverse-base-blockquote-color: $inverse-global-emphasis-color !default;
-$inverse-base-blockquote-footer-color: $inverse-global-color !default;
-$button-text-transform: uppercase !default;
-$button-default-border: $global-border !default;
-$button-default-hover-border: darken($global-border, 20%) !default;
-$button-default-active-border: darken($global-border, 30%) !default;
-$button-disabled-border: $global-border !default;
-$button-text-border-width: $global-border-width !default;
-$button-text-border: $button-text-hover-color !default;
-$card-badge-border-radius: 2px !default;
-$card-badge-text-transform: uppercase !default;
-$card-hover-box-shadow: $global-large-box-shadow !default;
-$card-default-box-shadow: $global-medium-box-shadow !default;
-$card-default-hover-box-shadow: $global-large-box-shadow !default;
-$card-default-header-border-width: $global-border-width !default;
-$card-default-header-border: $global-border !default;
-$card-default-footer-border-width: $global-border-width !default;
-$card-default-footer-border: $global-border !default;
-$card-primary-box-shadow: $global-medium-box-shadow !default;
-$card-primary-hover-box-shadow: $global-large-box-shadow !default;
-$card-secondary-box-shadow: $global-medium-box-shadow !default;
-$card-secondary-hover-box-shadow: $global-large-box-shadow !default;
-$comment-primary-padding: $global-gutter !default;
-$comment-primary-background: $global-muted-background !default;
-$description-list-term-font-size: $global-small-font-size !default;
-$description-list-term-font-weight: normal !default;
-$description-list-term-text-transform: uppercase !default;
-$dotnav-item-border-width: 1px !default;
-$dotnav-item-border: rgba($global-color, 0.4) !default;
-$dotnav-item-hover-border: transparent !default;
-$dotnav-item-onclick-border: transparent !default;
-$dotnav-item-active-border: transparent !default;
-$dropdown-nav-font-size: $global-small-font-size !default;
-$dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15) !default;
-$form-range-thumb-border-width: $global-border-width !default;
-$form-range-thumb-border: darken($global-border, 10%) !default;
-$form-range-track-border-radius: 500px !default;
-$form-border: $global-border !default;
-$form-focus-border: $global-primary-background !default;
-$form-disabled-border: $global-border !default;
-$form-danger-border: $global-danger-background !default;
-$form-success-border: $global-success-background !default;
-$form-blank-focus-border: $global-border !default;
-$form-blank-focus-border-style: dashed !default;
-$form-radio-border-width: $global-border-width !default;
-$form-radio-border: darken($global-border, 10%) !default;
-$form-radio-focus-border: $global-primary-background !default;
-$form-radio-checked-border: transparent !default;
-$form-radio-disabled-border: $global-border !default;
-$form-label-color: $global-emphasis-color !default;
-$form-label-font-size: $global-small-font-size !default;
-$inverse-form-label-color: $inverse-global-emphasis-color !default;
-$subnav-item-font-size: $global-small-font-size !default;
-$label-border-radius: 2px !default;
-$label-text-transform: uppercase !default;
-$list-striped-border-width: $global-border-width !default;
-$list-striped-border: $global-border !default;
-$modal-header-border-width: $global-border-width !default;
-$modal-header-border: $global-border !default;
-$modal-footer-border-width: $global-border-width !default;
-$modal-footer-border: $global-border !default;
-$modal-close-full-padding: $global-margin !default;
-$modal-close-full-background: $modal-dialog-background !default;
-$nav-default-font-size: $global-small-font-size !default;
-$navbar-nav-item-text-transform: uppercase !default;
-$navbar-dropdown-nav-font-size: $global-small-font-size !default;
-$navbar-dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15) !default;
-$navbar-dropbar-box-shadow: 0 5px 7px rgba(0, 0, 0, 0.05) !default;
-$navbar-dropdown-grid-divider-border-width: $global-border-width !default;
-$navbar-dropdown-grid-divider-border: $navbar-dropdown-nav-divider-border !default;
-$placeholder-border-width: $global-border-width !default;
-$placeholder-border: $global-border !default;
-$progress-border-radius: 500px !default;
-$search-default-border-width: $global-border-width !default;
-$search-default-border: $global-border !default;
-$search-default-focus-border: $global-primary-background !default;
-$subnav-item-text-transform: uppercase !default;
-$tab-border-width: $global-border-width !default;
-$tab-border: $global-border !default;
-$tab-item-border-width: $global-border-width !default;
-$tab-item-font-size: $global-small-font-size !default;
-$tab-item-text-transform: uppercase !default;
-$tab-item-active-border: $global-primary-background !default;
-$inverse-tab-border: $inverse-global-border !default;
-$table-striped-border-width: $global-border-width !default;
-$table-striped-border: $global-border !default;
-$text-meta-link-color: $text-meta-color !default;
-$text-meta-link-hover-color: $global-color !default;
-$thumbnav-item-background: rgba($global-background, 0.4) !default;
-$thumbnav-item-hover-background: transparent !default;
-$thumbnav-item-active-background: transparent !default;
\ No newline at end of file
diff --git a/docs/_sass/uikit/variables.scss b/docs/_sass/uikit/variables.scss
deleted file mode 100644
index ce7cf9a02d..0000000000
--- a/docs/_sass/uikit/variables.scss
+++ /dev/null
@@ -1,1061 +0,0 @@
-$global-margin: 20px !default;
-$accordion-item-margin-top: $global-margin !default;
-$global-medium-font-size: 1.25rem !default;
-$accordion-title-font-size: $global-medium-font-size !default;
-$accordion-title-line-height: 1.4 !default;
-$global-emphasis-color: #333 !default;
-$accordion-title-color: $global-emphasis-color !default;
-$global-color: #666 !default;
-$accordion-title-hover-color: $global-color !default;
-$accordion-content-margin-top: $global-margin !default;
-$global-inverse-color: #fff !default;
-$inverse-global-emphasis-color: $global-inverse-color !default;
-$inverse-accordion-title-color: $inverse-global-emphasis-color !default;
-$inverse-global-color: rgba($global-inverse-color, 0.7) !default;
-$inverse-accordion-title-hover-color: $inverse-global-color !default;
-$alert-margin-vertical: $global-margin !default;
-$alert-padding: 15px !default;
-$alert-padding-right: $alert-padding + 14px !default;
-$global-muted-background: #f8f8f8 !default;
-$alert-background: $global-muted-background !default;
-$alert-color: $global-color !default;
-$alert-close-top: $alert-padding + 5px !default;
-$alert-close-right: $alert-padding !default;
-$global-primary-background: #1e87f0 !default;
-$alert-primary-background: lighten(mix(white, $global-primary-background, 40%), 20%) !default;
-$alert-primary-color: $global-primary-background !default;
-$global-success-background: #32d296 !default;
-$alert-success-background: lighten(mix(white, $global-success-background, 40%), 25%) !default;
-$alert-success-color: $global-success-background !default;
-$global-warning-background: #faa05a !default;
-$alert-warning-background: lighten(mix(white, $global-warning-background, 45%), 15%) !default;
-$alert-warning-color: $global-warning-background !default;
-$global-danger-background: #f0506e !default;
-$alert-danger-background: lighten(mix(white, $global-danger-background, 40%), 20%) !default;
-$alert-danger-color: $global-danger-background !default;
-$global-gutter: 30px !default;
-$align-margin-horizontal: $global-gutter !default;
-$align-margin-vertical: $global-gutter !default;
-$global-medium-gutter: 40px !default;
-$align-margin-horizontal-l: $global-medium-gutter !default;
-$animation-duration: 0.5s !default;
-$animation-fade-duration: 0.8s !default;
-$animation-stroke-duration: 2s !default;
-$animation-kenburns-duration: 15s !default;
-$animation-fast-duration: 0.1s !default;
-$animation-slide-small-translate: 10px !default;
-$animation-slide-medium-translate: 50px !default;
-$global-large-margin: 70px !default;
-$article-margin-top: $global-large-margin !default;
-$global-2xlarge-font-size: 2.625rem !default;
-$article-title-font-size-m: $global-2xlarge-font-size !default;
-$article-title-font-size: $article-title-font-size-m * 0.85 !default;
-$article-title-line-height: 1.2 !default;
-$global-small-font-size: 0.875rem !default;
-$article-meta-font-size: $global-small-font-size !default;
-$article-meta-line-height: 1.4 !default;
-$global-muted-color: #999 !default;
-$article-meta-color: $global-muted-color !default;
-$inverse-global-muted-color: rgba($global-inverse-color, 0.5) !default;
-$inverse-article-meta-color: $inverse-global-muted-color !default;
-$global-background: #fff !default;
-$background-default-background: $global-background !default;
-$background-muted-background: $global-muted-background !default;
-$background-primary-background: $global-primary-background !default;
-$global-secondary-background: #222 !default;
-$background-secondary-background: $global-secondary-background !default;
-$badge-size: 18px !default;
-$badge-padding-vertical: 0 !default;
-$badge-padding-horizontal: 5px !default;
-$badge-border-radius: 500px !default;
-$badge-background: $global-primary-background !default;
-$badge-color: $global-inverse-color !default;
-$badge-font-size: 11px !default;
-$inverse-global-primary-background: $global-inverse-color !default;
-$inverse-badge-background: $inverse-global-primary-background !default;
-$inverse-global-inverse-color: $global-color !default;
-$inverse-badge-color: $inverse-global-inverse-color !default;
-$base-body-background: $global-background !default;
-$global-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-$base-body-font-family: $global-font-family !default;
-$base-body-font-weight: normal !default;
-$global-font-size: 16px !default;
-$base-body-font-size: $global-font-size !default;
-$global-line-height: 1.5 !default;
-$base-body-line-height: $global-line-height !default;
-$base-body-color: $global-color !default;
-$global-link-color: #1e87f0 !default;
-$base-link-color: $global-link-color !default;
-$base-link-text-decoration: none !default;
-$global-link-hover-color: #0f6ecd !default;
-$base-link-hover-color: $global-link-hover-color !default;
-$base-link-hover-text-decoration: underline !default;
-$base-strong-font-weight: bolder !default;
-$base-code-font-size: $global-small-font-size !default;
-$base-code-font-family: Consolas, monaco, monospace !default;
-$base-code-color: $global-danger-background !default;
-$base-em-color: $global-danger-background !default;
-$base-ins-background: #ffd !default;
-$base-ins-color: $global-color !default;
-$base-mark-background: #ffd !default;
-$base-mark-color: $global-color !default;
-$base-quote-font-style: italic !default;
-$base-small-font-size: 80% !default;
-$base-margin-vertical: $global-margin !default;
-$base-heading-font-family: $global-font-family !default;
-$base-heading-font-weight: normal !default;
-$base-heading-color: $global-emphasis-color !default;
-$base-heading-text-transform: none !default;
-$global-medium-margin: 40px !default;
-$base-heading-margin-top: $global-medium-margin !default;
-$base-h1-font-size-m: $global-2xlarge-font-size !default;
-$base-h1-font-size: $base-h1-font-size-m * 0.85 !default;
-$base-h1-line-height: 1.2 !default;
-$global-xlarge-font-size: 2rem !default;
-$base-h2-font-size-m: $global-xlarge-font-size !default;
-$base-h2-font-size: $base-h2-font-size-m * 0.85 !default;
-$base-h2-line-height: 1.3 !default;
-$global-large-font-size: 1.5rem !default;
-$base-h3-font-size: $global-large-font-size !default;
-$base-h3-line-height: 1.4 !default;
-$base-h4-font-size: $global-medium-font-size !default;
-$base-h4-line-height: 1.4 !default;
-$base-h5-font-size: $global-font-size !default;
-$base-h5-line-height: 1.4 !default;
-$base-h6-font-size: $global-small-font-size !default;
-$base-h6-line-height: 1.4 !default;
-$base-list-padding-left: 30px !default;
-$base-hr-margin-vertical: $global-margin !default;
-$global-border-width: 1px !default;
-$base-hr-border-width: $global-border-width !default;
-$global-border: #e5e5e5 !default;
-$base-hr-border: $global-border !default;
-$base-blockquote-font-size: $global-medium-font-size !default;
-$base-blockquote-line-height: 1.5 !default;
-$base-blockquote-font-style: italic !default;
-$base-blockquote-margin-vertical: $global-margin !default;
-$global-small-margin: 10px !default;
-$base-blockquote-footer-margin-top: $global-small-margin !default;
-$base-blockquote-footer-font-size: $global-small-font-size !default;
-$base-blockquote-footer-line-height: 1.5 !default;
-$base-pre-font-size: $global-small-font-size !default;
-$base-pre-line-height: 1.5 !default;
-$base-pre-font-family: $base-code-font-family !default;
-$base-pre-color: $global-color !default;
-$base-selection-background: #39f !default;
-$base-selection-color: $global-inverse-color !default;
-$inverse-base-color: $inverse-global-color !default;
-$inverse-base-link-color: $inverse-global-emphasis-color !default;
-$inverse-base-link-hover-color: $inverse-global-emphasis-color !default;
-$inverse-base-code-color: $inverse-global-color !default;
-$inverse-base-em-color: $inverse-global-emphasis-color !default;
-$inverse-base-heading-color: $inverse-global-emphasis-color !default;
-$inverse-global-border: rgba($global-inverse-color, 0.2) !default;
-$inverse-base-hr-border: $inverse-global-border !default;
-$breadcrumb-item-font-size: $global-small-font-size !default;
-$breadcrumb-item-color: $global-muted-color !default;
-$breadcrumb-item-hover-color: $global-color !default;
-$breadcrumb-item-hover-text-decoration: none !default;
-$breadcrumb-item-active-color: $global-color !default;
-$breadcrumb-divider: "/" !default;
-$breadcrumb-divider-margin-horizontal: 20px !default;
-$breadcrumb-divider-font-size: $breadcrumb-item-font-size !default;
-$breadcrumb-divider-color: $global-muted-color !default;
-$inverse-breadcrumb-item-color: $inverse-global-muted-color !default;
-$inverse-breadcrumb-item-hover-color: $inverse-global-color !default;
-$inverse-breadcrumb-item-active-color: $inverse-global-color !default;
-$inverse-breadcrumb-divider-color: $inverse-global-muted-color !default;
-$global-control-height: 40px !default;
-$button-line-height: $global-control-height !default;
-$global-control-small-height: 30px !default;
-$button-small-line-height: $global-control-small-height !default;
-$global-control-large-height: 55px !default;
-$button-large-line-height: $global-control-large-height !default;
-$button-font-size: $global-font-size !default;
-$button-small-font-size: $global-small-font-size !default;
-$button-large-font-size: $global-medium-font-size !default;
-$button-padding-horizontal: $global-gutter !default;
-$global-small-gutter: 15px !default;
-$button-small-padding-horizontal: $global-small-gutter !default;
-$button-large-padding-horizontal: $global-medium-gutter !default;
-$button-default-background: $global-muted-background !default;
-$button-default-color: $global-emphasis-color !default;
-$button-default-hover-background: darken($button-default-background, 5%) !default;
-$button-default-hover-color: $global-emphasis-color !default;
-$button-default-active-background: darken($button-default-background, 10%) !default;
-$button-default-active-color: $global-emphasis-color !default;
-$button-primary-background: $global-primary-background !default;
-$button-primary-color: $global-inverse-color !default;
-$button-primary-hover-background: darken($button-primary-background, 5%) !default;
-$button-primary-hover-color: $global-inverse-color !default;
-$button-primary-active-background: darken($button-primary-background, 10%) !default;
-$button-primary-active-color: $global-inverse-color !default;
-$button-secondary-background: $global-secondary-background !default;
-$button-secondary-color: $global-inverse-color !default;
-$button-secondary-hover-background: darken($button-secondary-background, 5%) !default;
-$button-secondary-hover-color: $global-inverse-color !default;
-$button-secondary-active-background: darken($button-secondary-background, 10%) !default;
-$button-secondary-active-color: $global-inverse-color !default;
-$button-danger-background: $global-danger-background !default;
-$button-danger-color: $global-inverse-color !default;
-$button-danger-hover-background: darken($button-danger-background, 5%) !default;
-$button-danger-hover-color: $global-inverse-color !default;
-$button-danger-active-background: darken($button-danger-background, 10%) !default;
-$button-danger-active-color: $global-inverse-color !default;
-$button-disabled-background: $global-muted-background !default;
-$button-disabled-color: $global-muted-color !default;
-$button-text-line-height: $global-line-height !default;
-$button-text-color: $global-emphasis-color !default;
-$button-text-hover-color: $global-muted-color !default;
-$button-text-disabled-color: $global-muted-color !default;
-$button-link-line-height: $global-line-height !default;
-$button-link-color: $global-emphasis-color !default;
-$button-link-hover-color: $global-muted-color !default;
-$button-link-hover-text-decoration: none !default;
-$button-link-disabled-color: $global-muted-color !default;
-$inverse-button-default-background: $inverse-global-primary-background !default;
-$inverse-button-default-color: $inverse-global-inverse-color !default;
-$inverse-button-default-hover-background: darken($inverse-button-default-background, 5%) !default;
-$inverse-button-default-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-default-active-background: darken($inverse-button-default-background, 10%) !default;
-$inverse-button-default-active-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-background: $inverse-global-primary-background !default;
-$inverse-button-primary-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-hover-background: darken($inverse-button-primary-background, 5%) !default;
-$inverse-button-primary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-primary-active-background: darken($inverse-button-primary-background, 10%) !default;
-$inverse-button-primary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-background: $inverse-global-primary-background !default;
-$inverse-button-secondary-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-hover-background: darken($inverse-button-secondary-background, 5%) !default;
-$inverse-button-secondary-hover-color: $inverse-global-inverse-color !default;
-$inverse-button-secondary-active-background: darken($inverse-button-secondary-background, 10%) !default;
-$inverse-button-secondary-active-color: $inverse-global-inverse-color !default;
-$inverse-button-text-color: $inverse-global-emphasis-color !default;
-$inverse-button-text-hover-color: $inverse-global-muted-color !default;
-$inverse-button-text-disabled-color: $inverse-global-muted-color !default;
-$inverse-button-link-color: $inverse-global-emphasis-color !default;
-$inverse-button-link-hover-color: $inverse-global-muted-color !default;
-$card-body-padding-horizontal: $global-gutter !default;
-$card-body-padding-vertical: $global-gutter !default;
-$card-body-padding-horizontal-l: $global-medium-gutter !default;
-$card-body-padding-vertical-l: $global-medium-gutter !default;
-$card-header-padding-horizontal: $global-gutter !default;
-$card-header-padding-vertical: round($global-gutter / 2) !default;
-$card-header-padding-horizontal-l: $global-medium-gutter !default;
-$card-header-padding-vertical-l: round($global-medium-gutter / 2) !default;
-$card-footer-padding-horizontal: $global-gutter !default;
-$card-footer-padding-vertical: ($global-gutter / 2) !default;
-$card-footer-padding-horizontal-l: $global-medium-gutter !default;
-$card-footer-padding-vertical-l: round($global-medium-gutter / 2) !default;
-$card-title-font-size: $global-large-font-size !default;
-$card-title-line-height: 1.4 !default;
-$card-badge-top: 15px !default;
-$card-badge-right: 15px !default;
-$card-badge-height: 22px !default;
-$card-badge-padding-horizontal: 10px !default;
-$card-badge-background: $global-primary-background !default;
-$card-badge-color: $global-inverse-color !default;
-$card-badge-font-size: $global-small-font-size !default;
-$card-hover-background: $global-muted-background !default;
-$card-default-background: $global-muted-background !default;
-$card-default-color: $global-color !default;
-$card-default-title-color: $global-emphasis-color !default;
-$card-default-hover-background: darken($card-default-background, 5%) !default;
-$card-primary-background: $global-primary-background !default;
-$card-primary-color: $global-inverse-color !default;
-$card-primary-title-color: $card-primary-color !default;
-$card-primary-hover-background: darken($card-primary-background, 5%) !default;
-$card-primary-color-mode: light !default;
-$card-secondary-background: $global-secondary-background !default;
-$card-secondary-color: $global-inverse-color !default;
-$card-secondary-title-color: $card-secondary-color !default;
-$card-secondary-hover-background: darken($card-secondary-background, 5%) !default;
-$card-secondary-color-mode: light !default;
-$card-small-body-padding-horizontal: $global-margin !default;
-$card-small-body-padding-vertical: $global-margin !default;
-$card-small-header-padding-horizontal: $global-margin !default;
-$card-small-header-padding-vertical: round($global-margin / 1.5) !default;
-$card-small-footer-padding-horizontal: $global-margin !default;
-$card-small-footer-padding-vertical: round($global-margin / 1.5) !default;
-$global-large-gutter: 70px !default;
-$card-large-body-padding-horizontal-l: $global-large-gutter !default;
-$card-large-body-padding-vertical-l: $global-large-gutter !default;
-$card-large-header-padding-horizontal-l: $global-large-gutter !default;
-$card-large-header-padding-vertical-l: round($global-large-gutter / 2) !default;
-$card-large-footer-padding-horizontal-l: $global-large-gutter !default;
-$card-large-footer-padding-vertical-l: round($global-large-gutter / 2) !default;
-$inverse-card-badge-background: $inverse-global-primary-background !default;
-$inverse-card-badge-color: $inverse-global-inverse-color !default;
-$close-color: $global-muted-color !default;
-$close-hover-color: $global-color !default;
-$inverse-close-color: $inverse-global-muted-color !default;
-$inverse-close-hover-color: $inverse-global-color !default;
-$column-gutter: $global-gutter !default;
-$column-gutter-l: $global-medium-gutter !default;
-$column-divider-rule-color: $global-border !default;
-$column-divider-rule-width: 1px !default;
-$inverse-column-divider-rule-color: $inverse-global-border !default;
-$comment-header-margin-bottom: $global-margin !default;
-$comment-title-font-size: $global-medium-font-size !default;
-$comment-title-line-height: 1.4 !default;
-$comment-meta-font-size: $global-small-font-size !default;
-$comment-meta-line-height: 1.4 !default;
-$comment-meta-color: $global-muted-color !default;
-$comment-list-margin-top: $global-large-margin !default;
-$comment-list-padding-left: 30px !default;
-$comment-list-padding-left-m: 100px !default;
-$container-max-width: 1200px !default;
-$container-xsmall-max-width: 750px !default;
-$container-small-max-width: 900px !default;
-$container-large-max-width: 1400px !default;
-$container-xlarge-max-width: 1600px !default;
-$container-padding-horizontal: 15px !default;
-$container-padding-horizontal-s: $global-gutter !default;
-$container-padding-horizontal-m: $global-medium-gutter !default;
-$countdown-number-line-height: 0.8 !default;
-$countdown-number-font-size: 2rem !default;
-$countdown-number-font-size-s: 4rem !default;
-$countdown-number-font-size-m: 6rem !default;
-$countdown-separator-line-height: 1.6 !default;
-$countdown-separator-font-size: 1rem !default;
-$countdown-separator-font-size-s: 2rem !default;
-$countdown-separator-font-size-m: 3rem !default;
-$description-list-term-color: $global-emphasis-color !default;
-$description-list-term-margin-top: $global-margin !default;
-$description-list-divider-term-margin-top: $global-margin !default;
-$description-list-divider-term-border-width: $global-border-width !default;
-$description-list-divider-term-border: $global-border !default;
-$divider-margin-vertical: $global-margin !default;
-$divider-icon-width: 50px !default;
-$divider-icon-height: 20px !default;
-$divider-icon-color: $global-border !default;
-$divider-icon-line-top: 50% !default;
-$divider-icon-line-width: 100% !default;
-$divider-icon-line-border-width: $global-border-width !default;
-$divider-icon-line-border: $global-border !default;
-$internal-divider-icon-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$divider-small-width: 100px !default;
-$divider-small-border-width: $global-border-width !default;
-$divider-small-border: $global-border !default;
-$divider-vertical-height: 100px !default;
-$divider-vertical-border-width: $global-border-width !default;
-$divider-vertical-border: $global-border !default;
-$inverse-divider-icon-color: $inverse-global-border !default;
-$inverse-divider-icon-line-border: $inverse-global-border !default;
-$inverse-divider-small-border: $inverse-global-border !default;
-$inverse-divider-vertical-border: $inverse-global-border !default;
-$dotnav-margin-horizontal: 12px !default;
-$dotnav-margin-vertical: $dotnav-margin-horizontal !default;
-$dotnav-item-width: 10px !default;
-$dotnav-item-height: $dotnav-item-width !default;
-$dotnav-item-border-radius: 50% !default;
-$dotnav-item-background: rgba($global-color, 0.2) !default;
-$dotnav-item-hover-background: rgba($global-color, 0.6) !default;
-$dotnav-item-onclick-background: rgba($global-color, 0.2) !default;
-$dotnav-item-active-background: rgba($global-color, 0.6) !default;
-$inverse-dotnav-item-background: rgba($inverse-global-color, 0.5) !default;
-$inverse-dotnav-item-hover-background: rgba($inverse-global-color, 0.9) !default;
-$inverse-dotnav-item-onclick-background: rgba($inverse-global-color, 0.5) !default;
-$inverse-dotnav-item-active-background: rgba($inverse-global-color, 0.9) !default;
-$global-z-index: 1000 !default;
-$drop-z-index: $global-z-index + 20 !default;
-$drop-width: 300px !default;
-$drop-margin: $global-margin !default;
-$dropdown-z-index: $global-z-index + 20 !default;
-$dropdown-min-width: 200px !default;
-$dropdown-padding: 15px !default;
-$dropdown-background: $global-muted-background !default;
-$dropdown-color: $global-color !default;
-$dropdown-margin: $global-small-margin !default;
-$dropdown-nav-item-color: $global-muted-color !default;
-$dropdown-nav-item-hover-color: $global-color !default;
-$dropdown-nav-header-color: $global-emphasis-color !default;
-$dropdown-nav-divider-border-width: $global-border-width !default;
-$dropdown-nav-divider-border: $global-border !default;
-$dropdown-nav-sublist-item-color: $global-muted-color !default;
-$dropdown-nav-sublist-item-hover-color: $global-color !default;
-$form-range-thumb-height: 15px !default;
-$form-range-thumb-width: $form-range-thumb-height !default;
-$form-range-thumb-border-radius: 500px !default;
-$form-range-thumb-background: $global-color !default;
-$form-range-track-height: 3px !default;
-$form-range-track-background: darken($global-muted-background, 5%) !default;
-$form-range-track-focus-background: darken($form-range-track-background, 5%) !default;
-$form-height: $global-control-height !default;
-$form-line-height: $form-height !default;
-$form-padding-horizontal: 10px !default;
-$form-padding-vertical: round($form-padding-horizontal * 0.6) !default;
-$form-background: $global-muted-background !default;
-$form-color: $global-color !default;
-$form-focus-background: darken($form-background, 5%) !default;
-$form-focus-color: $global-color !default;
-$form-disabled-background: $global-muted-background !default;
-$form-disabled-color: $global-muted-color !default;
-$form-placeholder-color: $global-muted-color !default;
-$form-small-height: $global-control-small-height !default;
-$form-small-padding-horizontal: 8px !default;
-$form-small-padding-vertical: round($form-small-padding-horizontal * 0.6) !default;
-$form-small-line-height: $form-small-height !default;
-$form-small-font-size: $global-small-font-size !default;
-$form-large-height: $global-control-large-height !default;
-$form-large-padding-horizontal: 12px !default;
-$form-large-padding-vertical: round($form-large-padding-horizontal * 0.6) !default;
-$form-large-line-height: $form-large-height !default;
-$form-large-font-size: $global-medium-font-size !default;
-$form-danger-color: $global-danger-background !default;
-$form-success-color: $global-success-background !default;
-$form-width-xsmall: 50px !default;
-$form-width-small: 130px !default;
-$form-width-medium: 200px !default;
-$form-width-large: 500px !default;
-$form-select-padding-right: 20px !default;
-$form-select-icon-color: $global-color !default;
-$form-select-option-color: #444 !default;
-$form-select-disabled-icon-color: $global-muted-color !default;
-$form-datalist-padding-right: 20px !default;
-$form-datalist-icon-color: $global-color !default;
-$form-radio-size: 16px !default;
-$form-radio-margin-top: -4px !default;
-$form-radio-background: darken($global-muted-background, 5%) !default;
-$form-radio-focus-background: darken($form-radio-background, 5%) !default;
-$form-radio-checked-background: $global-primary-background !default;
-$form-radio-checked-icon-color: $global-inverse-color !default;
-$form-radio-checked-focus-background: darken($global-primary-background, 10%) !default;
-$form-radio-disabled-background: $global-muted-background !default;
-$form-radio-disabled-icon-color: $global-muted-color !default;
-$form-legend-font-size: $global-large-font-size !default;
-$form-legend-line-height: 1.4 !default;
-$form-stacked-margin-bottom: $global-small-margin !default;
-$form-horizontal-label-width: 200px !default;
-$form-horizontal-label-margin-top: 7px !default;
-$form-horizontal-controls-margin-left: 215px !default;
-$form-horizontal-controls-text-padding-top: 7px !default;
-$form-icon-width: $form-height !default;
-$form-icon-color: $global-muted-color !default;
-$form-icon-hover-color: $global-color !default;
-$internal-form-select-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-datalist-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-radio-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-form-checkbox-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22#000%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A" !default;
-$internal-form-checkbox-indeterminate-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22#000%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-global-muted-background: rgba($global-inverse-color, 0.1) !default;
-$inverse-form-background: $inverse-global-muted-background !default;
-$inverse-form-color: $inverse-global-color !default;
-$inverse-form-focus-background: fadein($inverse-form-background, 5%) !default;
-$inverse-form-focus-color: $inverse-global-color !default;
-$inverse-form-placeholder-color: $inverse-global-muted-color !default;
-$inverse-form-select-icon-color: $inverse-global-color !default;
-$inverse-form-datalist-icon-color: $inverse-global-color !default;
-$inverse-form-radio-background: $inverse-global-muted-background !default;
-$inverse-form-radio-focus-background: fadein($inverse-form-radio-background, 5%) !default;
-$inverse-form-radio-checked-background: $inverse-global-primary-background !default;
-$inverse-form-radio-checked-icon-color: $inverse-global-inverse-color !default;
-$inverse-form-radio-checked-focus-background: fadein($inverse-global-primary-background, 10%) !default;
-$inverse-form-icon-color: $inverse-global-muted-color !default;
-$inverse-form-icon-hover-color: $inverse-global-color !default;
-$grid-gutter-horizontal: $global-gutter !default;
-$grid-gutter-vertical: $grid-gutter-horizontal !default;
-$grid-gutter-horizontal-l: $global-medium-gutter !default;
-$grid-gutter-vertical-l: $grid-gutter-horizontal-l !default;
-$grid-small-gutter-horizontal: $global-small-gutter !default;
-$grid-small-gutter-vertical: $grid-small-gutter-horizontal !default;
-$grid-medium-gutter-horizontal: $global-gutter !default;
-$grid-medium-gutter-vertical: $grid-medium-gutter-horizontal !default;
-$grid-large-gutter-horizontal: $global-medium-gutter !default;
-$grid-large-gutter-vertical: $grid-large-gutter-horizontal !default;
-$grid-large-gutter-horizontal-l: $global-large-gutter !default;
-$grid-large-gutter-vertical-l: $grid-large-gutter-horizontal-l !default;
-$grid-divider-border-width: $global-border-width !default;
-$grid-divider-border: $global-border !default;
-$inverse-grid-divider-border: $inverse-global-border !default;
-$heading-medium-font-size-l: 4rem !default;
-$heading-small-font-size-m: $heading-medium-font-size-l * 0.8125 !default;
-$heading-small-font-size: $heading-small-font-size-m * 0.8 !default;
-$heading-medium-font-size-m: $heading-medium-font-size-l * 0.875 !default;
-$heading-medium-font-size: $heading-medium-font-size-m * 0.825 !default;
-$heading-large-font-size-m: $heading-medium-font-size-l !default;
-$heading-large-font-size: $heading-large-font-size-m * 0.85 !default;
-$heading-xlarge-font-size: $heading-large-font-size-m !default;
-$heading-large-font-size-l: 6rem !default;
-$heading-xlarge-font-size-m: $heading-large-font-size-l !default;
-$heading-2xlarge-font-size: $heading-xlarge-font-size-m !default;
-$heading-xlarge-font-size-l: 8rem !default;
-$heading-2xlarge-font-size-m: $heading-xlarge-font-size-l !default;
-$heading-2xlarge-font-size-l: 11rem !default;
-$heading-small-line-height: 1.2 !default;
-$heading-medium-line-height: 1.1 !default;
-$heading-large-line-height: 1.1 !default;
-$heading-xlarge-line-height: 1 !default;
-$heading-2xlarge-line-height: 1 !default;
-$heading-divider-padding-bottom: unquote('calc(5px + 0.1em)') !default;
-$heading-divider-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-divider-border: $global-border !default;
-$heading-bullet-top: unquote('calc(-0.1 * 1em)') !default;
-$heading-bullet-height: unquote('calc(4px + 0.7em)') !default;
-$heading-bullet-margin-right: unquote('calc(5px + 0.2em)') !default;
-$heading-bullet-border-width: unquote('calc(5px + 0.1em)') !default;
-$heading-bullet-border: $global-border !default;
-$heading-line-top: 50% !default;
-$heading-line-border-width: unquote('calc(0.2px + 0.05em)') !default;
-$heading-line-height: $heading-line-border-width !default;
-$heading-line-width: 2000px !default;
-$heading-line-border: $global-border !default;
-$heading-line-margin-horizontal: unquote('calc(5px + 0.3em)') !default;
-$heading-primary-font-size-l: 3.75rem !default;
-$heading-primary-line-height-l: 1.1 !default;
-$heading-primary-font-size-m: $heading-primary-font-size-l * 0.9 !default;
-$heading-primary-font-size: $heading-primary-font-size-l * 0.8 !default;
-$heading-primary-line-height: 1.2 !default;
-$heading-hero-font-size-l: 8rem !default;
-$heading-hero-line-height-l: 1 !default;
-$heading-hero-font-size-m: $heading-hero-font-size-l * 0.75 !default;
-$heading-hero-line-height-m: 1 !default;
-$heading-hero-font-size: $heading-hero-font-size-l * 0.5 !default;
-$heading-hero-line-height: 1.1 !default;
-$inverse-heading-divider-border: $inverse-global-border !default;
-$inverse-heading-bullet-border: $inverse-global-border !default;
-$inverse-heading-line-border: $inverse-global-border !default;
-$height-small-height: 150px !default;
-$height-medium-height: 300px !default;
-$height-large-height: 450px !default;
-$icon-image-size: 20px !default;
-$icon-link-color: $global-muted-color !default;
-$icon-link-hover-color: $global-color !default;
-$icon-link-active-color: darken($global-color, 5%) !default;
-$icon-button-size: 36px !default;
-$icon-button-border-radius: 500px !default;
-$icon-button-background: $global-muted-background !default;
-$icon-button-color: $global-muted-color !default;
-$icon-button-hover-background: darken($icon-button-background, 5%) !default;
-$icon-button-hover-color: $global-color !default;
-$icon-button-active-background: darken($icon-button-background, 10%) !default;
-$icon-button-active-color: $global-color !default;
-$inverse-icon-link-color: $inverse-global-muted-color !default;
-$inverse-icon-link-hover-color: $inverse-global-color !default;
-$inverse-icon-link-active-color: $inverse-global-color !default;
-$inverse-icon-button-background: $inverse-global-muted-background !default;
-$inverse-icon-button-color: $inverse-global-muted-color !default;
-$inverse-icon-button-hover-background: fadein($inverse-icon-button-background, 5%) !default;
-$inverse-icon-button-hover-color: $inverse-global-color !default;
-$inverse-icon-button-active-background: fadein($inverse-icon-button-background, 10%) !default;
-$inverse-icon-button-active-color: $inverse-global-color !default;
-$iconnav-margin-horizontal: $global-small-margin !default;
-$iconnav-margin-vertical: $iconnav-margin-horizontal !default;
-$iconnav-item-color: $global-muted-color !default;
-$iconnav-item-hover-color: $global-color !default;
-$iconnav-item-active-color: $global-color !default;
-$inverse-iconnav-item-color: $inverse-global-muted-color !default;
-$inverse-iconnav-item-hover-color: $inverse-global-color !default;
-$inverse-iconnav-item-active-color: $inverse-global-color !default;
-$inverse-global-color-mode: light !default;
-$label-padding-vertical: 0 !default;
-$label-padding-horizontal: $global-small-margin !default;
-$label-background: $global-primary-background !default;
-$label-line-height: $global-line-height !default;
-$label-font-size: $global-small-font-size !default;
-$label-color: $global-inverse-color !default;
-$label-success-background: $global-success-background !default;
-$label-success-color: $global-inverse-color !default;
-$label-warning-background: $global-warning-background !default;
-$label-warning-color: $global-inverse-color !default;
-$label-danger-background: $global-danger-background !default;
-$label-danger-color: $global-inverse-color !default;
-$inverse-label-background: $inverse-global-primary-background !default;
-$inverse-label-color: $inverse-global-inverse-color !default;
-$leader-fill-content: unquote('.') !default;
-$leader-fill-margin-left: $global-small-gutter !default;
-$lightbox-z-index: $global-z-index + 10 !default;
-$lightbox-background: #000 !default;
-$lightbox-item-color: rgba(255,255,255,0.7) !default;
-$lightbox-item-max-width: 100vw !default;
-$lightbox-item-max-height: 100vh !default;
-$lightbox-toolbar-padding-vertical: 10px !default;
-$lightbox-toolbar-padding-horizontal: 10px !default;
-$lightbox-toolbar-background: rgba(0,0,0,0.3) !default;
-$lightbox-toolbar-color: rgba(255,255,255,0.7) !default;
-$lightbox-toolbar-icon-padding: 5px !default;
-$lightbox-toolbar-icon-color: rgba(255,255,255,0.7) !default;
-$lightbox-toolbar-icon-hover-color: #fff !default;
-$lightbox-button-size: 50px !default;
-$lightbox-button-background: $lightbox-toolbar-background !default;
-$lightbox-button-color: rgba(255,255,255,0.7) !default;
-$lightbox-button-hover-color: #fff !default;
-$link-muted-color: $global-muted-color !default;
-$link-muted-hover-color: $global-color !default;
-$link-text-hover-color: $global-muted-color !default;
-$link-heading-hover-color: $global-primary-background !default;
-$link-heading-hover-text-decoration: none !default;
-$inverse-link-muted-color: $inverse-global-muted-color !default;
-$inverse-link-muted-hover-color: $inverse-global-color !default;
-$inverse-link-text-hover-color: $inverse-global-muted-color !default;
-$inverse-link-heading-hover-color: $inverse-global-primary-background !default;
-$list-margin-top: $global-small-margin !default;
-$list-padding-left: 30px !default;
-$list-marker-height: ($global-line-height * 1em) !default;
-$list-muted-color: $global-muted-color !default;
-$list-emphasis-color: $global-emphasis-color !default;
-$list-primary-color: $global-primary-background !default;
-$list-secondary-color: $global-secondary-background !default;
-$list-bullet-icon-color: $global-color !default;
-$list-divider-margin-top: $global-small-margin !default;
-$list-divider-border-width: $global-border-width !default;
-$list-divider-border: $global-border !default;
-$list-striped-padding-vertical: $global-small-margin !default;
-$list-striped-padding-horizontal: $global-small-margin !default;
-$list-striped-background: $global-muted-background !default;
-$list-large-margin-top: $global-margin !default;
-$list-large-divider-margin-top: $global-margin !default;
-$list-large-striped-padding-vertical: $global-margin !default;
-$list-large-striped-padding-horizontal: $global-small-margin !default;
-$internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22#000%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-list-muted-color: $inverse-global-muted-color !default;
-$inverse-list-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-list-primary-color: $inverse-global-primary-background !default;
-$inverse-list-secondary-color: $inverse-global-primary-background !default;
-$inverse-list-divider-border: $inverse-global-border !default;
-$inverse-list-striped-background: $inverse-global-muted-background !default;
-$inverse-list-bullet-icon-color: $inverse-global-color !default;
-$margin-margin: $global-margin !default;
-$margin-small-margin: $global-small-margin !default;
-$margin-medium-margin: $global-medium-margin !default;
-$margin-large-margin: $global-medium-margin !default;
-$margin-large-margin-l: $global-large-margin !default;
-$margin-xlarge-margin: $global-large-margin !default;
-$global-xlarge-margin: 140px !default;
-$margin-xlarge-margin-l: $global-xlarge-margin !default;
-$marker-padding: 5px !default;
-$marker-background: $global-secondary-background !default;
-$marker-color: $global-inverse-color !default;
-$marker-hover-color: $global-inverse-color !default;
-$inverse-marker-background: $global-muted-background !default;
-$inverse-marker-color: $global-color !default;
-$inverse-marker-hover-color: $global-color !default;
-$modal-z-index: $global-z-index + 10 !default;
-$modal-background: rgba(0,0,0,0.6) !default;
-$modal-padding-horizontal: 15px !default;
-$modal-padding-horizontal-s: $global-gutter !default;
-$modal-padding-horizontal-m: $global-medium-gutter !default;
-$modal-padding-vertical: $modal-padding-horizontal !default;
-$modal-padding-vertical-s: 50px !default;
-$modal-dialog-width: 600px !default;
-$modal-dialog-background: $global-background !default;
-$modal-container-width: 1200px !default;
-$modal-body-padding-horizontal: $global-gutter !default;
-$modal-body-padding-vertical: $global-gutter !default;
-$modal-header-padding-horizontal: $global-gutter !default;
-$modal-header-padding-vertical: ($modal-header-padding-horizontal / 2) !default;
-$modal-header-background: $global-muted-background !default;
-$modal-footer-padding-horizontal: $global-gutter !default;
-$modal-footer-padding-vertical: ($modal-footer-padding-horizontal / 2) !default;
-$modal-footer-background: $global-muted-background !default;
-$modal-title-font-size: $global-xlarge-font-size !default;
-$modal-title-line-height: 1.3 !default;
-$modal-close-position: $global-small-margin !default;
-$modal-close-padding: 5px !default;
-$modal-close-outside-position: 0 !default;
-$modal-close-outside-translate: 100% !default;
-$modal-close-outside-color: lighten($global-inverse-color, 20%) !default;
-$modal-close-outside-hover-color: $global-inverse-color !default;
-$nav-item-padding-vertical: 5px !default;
-$nav-item-padding-horizontal: 0 !default;
-$nav-sublist-padding-vertical: 5px !default;
-$nav-sublist-padding-left: 15px !default;
-$nav-sublist-deeper-padding-left: 15px !default;
-$nav-sublist-item-padding-vertical: 2px !default;
-$nav-parent-icon-width: ($global-line-height * 1em) !default;
-$nav-parent-icon-height: $nav-parent-icon-width !default;
-$nav-parent-icon-color: $global-color !default;
-$nav-header-padding-vertical: $nav-item-padding-vertical !default;
-$nav-header-padding-horizontal: $nav-item-padding-horizontal !default;
-$nav-header-font-size: $global-small-font-size !default;
-$nav-header-text-transform: uppercase !default;
-$nav-header-margin-top: $global-margin !default;
-$nav-divider-margin-vertical: 5px !default;
-$nav-divider-margin-horizontal: 0 !default;
-$nav-default-item-color: $global-muted-color !default;
-$nav-default-item-hover-color: $global-color !default;
-$nav-default-item-active-color: $global-emphasis-color !default;
-$nav-default-header-color: $global-emphasis-color !default;
-$nav-default-divider-border-width: $global-border-width !default;
-$nav-default-divider-border: $global-border !default;
-$nav-default-sublist-item-color: $global-muted-color !default;
-$nav-default-sublist-item-hover-color: $global-color !default;
-$nav-default-sublist-item-active-color: $global-emphasis-color !default;
-$nav-primary-item-font-size: $global-large-font-size !default;
-$nav-primary-item-line-height: $global-line-height !default;
-$nav-primary-item-color: $global-muted-color !default;
-$nav-primary-item-hover-color: $global-color !default;
-$nav-primary-item-active-color: $global-emphasis-color !default;
-$nav-primary-header-color: $global-emphasis-color !default;
-$nav-primary-divider-border-width: $global-border-width !default;
-$nav-primary-divider-border: $global-border !default;
-$nav-primary-sublist-item-color: $global-muted-color !default;
-$nav-primary-sublist-item-hover-color: $global-color !default;
-$nav-primary-sublist-item-active-color: $global-emphasis-color !default;
-$nav-dividers-margin-top: 0 !default;
-$nav-dividers-border-width: $global-border-width !default;
-$nav-dividers-border: $global-border !default;
-$internal-nav-parent-close-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$internal-nav-parent-open-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22#000%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E" !default;
-$inverse-nav-parent-icon-color: $inverse-global-color !default;
-$inverse-nav-default-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-default-divider-border: $inverse-global-border !default;
-$inverse-nav-default-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-default-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-default-sublist-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-header-color: $inverse-global-emphasis-color !default;
-$inverse-nav-primary-divider-border: $inverse-global-border !default;
-$inverse-nav-primary-sublist-item-color: $inverse-global-muted-color !default;
-$inverse-nav-primary-sublist-item-hover-color: $inverse-global-color !default;
-$inverse-nav-primary-sublist-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-nav-dividers-border: $inverse-global-border !default;
-$navbar-background: $global-muted-background !default;
-$navbar-color-mode: none !default;
-$navbar-nav-item-height: 80px !default;
-$navbar-nav-item-padding-horizontal: 15px !default;
-$navbar-nav-item-color: $global-muted-color !default;
-$navbar-nav-item-font-size: $global-font-size !default;
-$navbar-nav-item-font-family: $global-font-family !default;
-$navbar-nav-item-hover-color: $global-color !default;
-$navbar-nav-item-onclick-color: $global-emphasis-color !default;
-$navbar-nav-item-active-color: $global-emphasis-color !default;
-$navbar-item-color: $global-color !default;
-$navbar-toggle-color: $global-muted-color !default;
-$navbar-toggle-hover-color: $global-color !default;
-$navbar-subtitle-font-size: $global-small-font-size !default;
-$navbar-dropdown-z-index: $global-z-index + 20 !default;
-$navbar-dropdown-width: 200px !default;
-$navbar-dropdown-margin: 0 !default;
-$navbar-dropdown-padding: 15px !default;
-$navbar-dropdown-background: $global-muted-background !default;
-$navbar-dropdown-color: $global-color !default;
-$navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
-$navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
-$navbar-dropdown-dropbar-margin-top: 0 !default;
-$navbar-dropdown-dropbar-margin-bottom: $navbar-dropdown-dropbar-margin-top !default;
-$navbar-dropdown-nav-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-header-color: $global-emphasis-color !default;
-$navbar-dropdown-nav-divider-border-width: $global-border-width !default;
-$navbar-dropdown-nav-divider-border: $global-border !default;
-$navbar-dropdown-nav-sublist-item-color: $global-muted-color !default;
-$navbar-dropdown-nav-sublist-item-hover-color: $global-color !default;
-$navbar-dropdown-nav-sublist-item-active-color: $global-emphasis-color !default;
-$navbar-dropbar-background: $navbar-dropdown-background !default;
-$navbar-dropbar-z-index: $global-z-index - 20 !default;
-$inverse-navbar-nav-item-color: $inverse-global-muted-color !default;
-$inverse-navbar-nav-item-hover-color: $inverse-global-color !default;
-$inverse-navbar-nav-item-onclick-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-nav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-navbar-item-color: $inverse-global-color !default;
-$inverse-navbar-toggle-color: $inverse-global-muted-color !default;
-$inverse-navbar-toggle-hover-color: $inverse-global-color !default;
-$notification-position: 10px !default;
-$notification-z-index: $global-z-index + 40 !default;
-$notification-width: 350px !default;
-$notification-message-margin-top: 10px !default;
-$notification-message-padding: $global-small-gutter !default;
-$notification-message-background: $global-muted-background !default;
-$notification-message-color: $global-color !default;
-$notification-message-font-size: $global-medium-font-size !default;
-$notification-message-line-height: 1.4 !default;
-$notification-close-top: $notification-message-padding + 5px !default;
-$notification-close-right: $notification-message-padding !default;
-$notification-message-primary-color: $global-primary-background !default;
-$notification-message-success-color: $global-success-background !default;
-$notification-message-warning-color: $global-warning-background !default;
-$notification-message-danger-color: $global-danger-background !default;
-$offcanvas-z-index: $global-z-index !default;
-$offcanvas-bar-width: 270px !default;
-$offcanvas-bar-padding-vertical: $global-margin !default;
-$offcanvas-bar-padding-horizontal: $global-margin !default;
-$offcanvas-bar-background: $global-secondary-background !default;
-$offcanvas-bar-color-mode: light !default;
-$offcanvas-bar-width-m: 350px !default;
-$offcanvas-bar-padding-vertical-m: $global-medium-gutter !default;
-$offcanvas-bar-padding-horizontal-m: $global-medium-gutter !default;
-$offcanvas-close-position: 20px !default;
-$offcanvas-close-padding: 5px !default;
-$offcanvas-overlay-background: rgba(0,0,0,0.1) !default;
-$overlay-padding-horizontal: $global-gutter !default;
-$overlay-padding-vertical: $global-gutter !default;
-$overlay-default-background: rgba($global-background, 0.8) !default;
-$overlay-primary-background: rgba($global-secondary-background, 0.8) !default;
-$overlay-primary-color-mode: light !default;
-$padding-padding: $global-gutter !default;
-$padding-padding-l: $global-medium-gutter !default;
-$padding-small-padding: $global-small-gutter !default;
-$padding-large-padding: $global-gutter !default;
-$padding-large-padding-l: $global-large-gutter !default;
-$pagination-margin-horizontal: 0 !default;
-$pagination-item-padding-vertical: 5px !default;
-$pagination-item-padding-horizontal: 10px !default;
-$pagination-item-color: $global-muted-color !default;
-$pagination-item-hover-color: $global-color !default;
-$pagination-item-hover-text-decoration: none !default;
-$pagination-item-active-color: $global-color !default;
-$pagination-item-disabled-color: $global-muted-color !default;
-$inverse-pagination-item-color: $inverse-global-muted-color !default;
-$inverse-pagination-item-hover-color: $inverse-global-color !default;
-$inverse-pagination-item-active-color: $inverse-global-color !default;
-$inverse-pagination-item-disabled-color: $inverse-global-muted-color !default;
-$placeholder-margin-vertical: $global-margin !default;
-$placeholder-padding-vertical: $global-gutter !default;
-$placeholder-padding-horizontal: $global-gutter !default;
-$placeholder-background: $global-muted-background !default;
-$position-small-margin: $global-small-gutter !default;
-$position-medium-margin: $global-gutter !default;
-$position-large-margin: $global-gutter !default;
-$position-large-margin-l: 50px !default;
-$progress-height: 15px !default;
-$progress-margin-vertical: $global-margin !default;
-$progress-background: $global-muted-background !default;
-$progress-bar-background: $global-primary-background !default;
-$search-color: $global-color !default;
-$search-placeholder-color: $global-muted-color !default;
-$search-icon-color: $global-muted-color !default;
-$search-default-width: 240px !default;
-$search-default-height: $global-control-height !default;
-$search-default-padding-horizontal: 10px !default;
-$search-default-background: $global-muted-background !default;
-$search-default-focus-background: darken($search-default-background, 5%) !default;
-$search-default-icon-width: $global-control-height !default;
-$search-navbar-width: 400px !default;
-$search-navbar-height: 40px !default;
-$search-navbar-background: transparent !default;
-$search-navbar-font-size: $global-large-font-size !default;
-$search-navbar-icon-width: 40px !default;
-$search-large-width: 500px !default;
-$search-large-height: 80px !default;
-$search-large-background: transparent !default;
-$search-large-font-size: $global-2xlarge-font-size !default;
-$search-large-icon-width: 80px !default;
-$search-toggle-color: $global-muted-color !default;
-$search-toggle-hover-color: $global-color !default;
-$inverse-search-color: $inverse-global-color !default;
-$inverse-search-placeholder-color: $inverse-global-muted-color !default;
-$inverse-search-icon-color: $inverse-global-muted-color !default;
-$inverse-search-default-background: $inverse-global-muted-background !default;
-$inverse-search-default-focus-background: fadein($inverse-search-default-background, 5%) !default;
-$inverse-search-navbar-background: transparent !default;
-$inverse-search-large-background: transparent !default;
-$inverse-search-toggle-color: $inverse-global-muted-color !default;
-$inverse-search-toggle-hover-color: $inverse-global-color !default;
-$section-padding-vertical: $global-medium-margin !default;
-$section-padding-vertical-m: $global-large-margin !default;
-$section-xsmall-padding-vertical: $global-margin !default;
-$section-small-padding-vertical: $global-medium-margin !default;
-$section-large-padding-vertical: $global-large-margin !default;
-$section-large-padding-vertical-m: $global-xlarge-margin !default;
-$section-xlarge-padding-vertical: $global-xlarge-margin !default;
-$section-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-$section-default-background: $global-background !default;
-$section-muted-background: $global-muted-background !default;
-$section-primary-background: $global-primary-background !default;
-$section-primary-color-mode: light !default;
-$section-secondary-background: $global-secondary-background !default;
-$section-secondary-color-mode: light !default;
-$slidenav-padding-vertical: 5px !default;
-$slidenav-padding-horizontal: 10px !default;
-$slidenav-color: rgba($global-color, 0.5) !default;
-$slidenav-hover-color: rgba($global-color, 0.9) !default;
-$slidenav-active-color: rgba($global-color, 0.5) !default;
-$slidenav-large-padding-vertical: 10px !default;
-$slidenav-large-padding-horizontal: $slidenav-large-padding-vertical !default;
-$inverse-slidenav-color: rgba($inverse-global-color, 0.7) !default;
-$inverse-slidenav-hover-color: rgba($inverse-global-color, 0.95) !default;
-$inverse-slidenav-active-color: rgba($inverse-global-color, 0.7) !default;
-$slider-container-margin-top: -11px !default;
-$slider-container-margin-bottom: -39px !default;
-$slider-container-margin-left: -25px !default;
-$slider-container-margin-right: -25px !default;
-$sortable-dragged-z-index: $global-z-index + 50 !default;
-$sortable-placeholder-opacity: 0 !default;
-$sortable-empty-height: 50px !default;
-$spinner-size: 30px !default;
-$spinner-stroke-width: 1 !default;
-$spinner-radius: floor(($spinner-size - $spinner-stroke-width) / 2) !default;
-$spinner-circumference: round(2 * 3.141 * $spinner-radius) !default;
-$spinner-duration: 1.4s !default;
-$sticky-z-index: $global-z-index - 20 !default;
-$sticky-animation-duration: 0.2s !default;
-$sticky-reverse-animation-duration: 0.2s !default;
-$subnav-margin-horizontal: 20px !default;
-$subnav-item-color: $global-muted-color !default;
-$subnav-item-hover-color: $global-color !default;
-$subnav-item-hover-text-decoration: none !default;
-$subnav-item-active-color: $global-emphasis-color !default;
-$subnav-divider-margin-horizontal: $subnav-margin-horizontal !default;
-$subnav-divider-border-height: 1.5em !default;
-$subnav-divider-border-width: $global-border-width !default;
-$subnav-divider-border: $global-border !default;
-$subnav-pill-item-padding-vertical: 5px !default;
-$subnav-pill-item-padding-horizontal: 10px !default;
-$subnav-pill-item-background: transparent !default;
-$subnav-pill-item-color: $subnav-item-color !default;
-$subnav-pill-item-hover-background: $global-muted-background !default;
-$subnav-pill-item-hover-color: $global-color !default;
-$subnav-pill-item-onclick-background: $subnav-pill-item-hover-background !default;
-$subnav-pill-item-onclick-color: $subnav-pill-item-hover-color !default;
-$subnav-pill-item-active-background: $global-primary-background !default;
-$subnav-pill-item-active-color: $global-inverse-color !default;
-$subnav-item-disabled-color: $global-muted-color !default;
-$inverse-subnav-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-subnav-divider-border: $inverse-global-border !default;
-$inverse-subnav-pill-item-background: transparent !default;
-$inverse-subnav-pill-item-color: $inverse-global-muted-color !default;
-$inverse-subnav-pill-item-hover-background: $inverse-global-muted-background !default;
-$inverse-subnav-pill-item-hover-color: $inverse-global-color !default;
-$inverse-subnav-pill-item-onclick-background: $inverse-subnav-pill-item-hover-background !default;
-$inverse-subnav-pill-item-onclick-color: $inverse-subnav-pill-item-hover-color !default;
-$inverse-subnav-pill-item-active-background: $inverse-global-primary-background !default;
-$inverse-subnav-pill-item-active-color: $inverse-global-inverse-color !default;
-$inverse-subnav-item-disabled-color: $inverse-global-muted-color !default;
-$tab-margin-horizontal: 20px !default;
-$tab-item-padding-horizontal: 10px !default;
-$tab-item-padding-vertical: 5px !default;
-$tab-item-color: $global-muted-color !default;
-$tab-item-hover-color: $global-color !default;
-$tab-item-hover-text-decoration: none !default;
-$tab-item-active-color: $global-emphasis-color !default;
-$tab-item-disabled-color: $global-muted-color !default;
-$inverse-tab-item-color: $inverse-global-muted-color !default;
-$inverse-tab-item-hover-color: $inverse-global-color !default;
-$inverse-tab-item-active-color: $inverse-global-emphasis-color !default;
-$inverse-tab-item-disabled-color: $inverse-global-muted-color !default;
-$table-margin-vertical: $global-margin !default;
-$table-cell-padding-vertical: 16px !default;
-$table-cell-padding-horizontal: 12px !default;
-$table-header-cell-font-size: $global-font-size !default;
-$table-header-cell-font-weight: bold !default;
-$table-header-cell-color: $global-color !default;
-$table-footer-font-size: $global-small-font-size !default;
-$table-caption-font-size: $global-small-font-size !default;
-$table-caption-color: $global-muted-color !default;
-$table-row-active-background: #ffd !default;
-$table-divider-border-width: $global-border-width !default;
-$table-divider-border: $global-border !default;
-$table-striped-row-background: $global-muted-background !default;
-$table-hover-row-background: $table-row-active-background !default;
-$table-small-cell-padding-vertical: 10px !default;
-$table-small-cell-padding-horizontal: 12px !default;
-$table-large-cell-padding-vertical: 22px !default;
-$table-large-cell-padding-horizontal: 12px !default;
-$table-expand-min-width: 150px !default;
-$inverse-table-header-cell-color: $inverse-global-color !default;
-$inverse-table-caption-color: $inverse-global-muted-color !default;
-$inverse-table-row-active-background: fade-out($inverse-global-muted-background, 0.02) !default;
-$inverse-table-divider-border: $inverse-global-border !default;
-$inverse-table-striped-row-background: $inverse-global-muted-background !default;
-$inverse-table-hover-row-background: $inverse-table-row-active-background !default;
-$text-lead-font-size: $global-large-font-size !default;
-$text-lead-line-height: 1.5 !default;
-$text-lead-color: $global-emphasis-color !default;
-$text-meta-font-size: $global-small-font-size !default;
-$text-meta-line-height: 1.4 !default;
-$text-meta-color: $global-muted-color !default;
-$text-small-font-size: $global-small-font-size !default;
-$text-small-line-height: 1.5 !default;
-$text-large-font-size: $global-large-font-size !default;
-$text-large-line-height: 1.5 !default;
-$text-muted-color: $global-muted-color !default;
-$text-emphasis-color: $global-emphasis-color !default;
-$text-primary-color: $global-primary-background !default;
-$text-secondary-color: $global-secondary-background !default;
-$text-success-color: $global-success-background !default;
-$text-warning-color: $global-warning-background !default;
-$text-danger-color: $global-danger-background !default;
-$text-background-color: $global-primary-background !default;
-$inverse-text-lead-color: $inverse-global-color !default;
-$inverse-text-meta-color: $inverse-global-muted-color !default;
-$inverse-text-muted-color: $inverse-global-muted-color !default;
-$inverse-text-emphasis-color: $inverse-global-emphasis-color !default;
-$inverse-text-primary-color: $inverse-global-primary-background !default;
-$inverse-text-secondary-color: $inverse-global-primary-background !default;
-$thumbnav-margin-horizontal: 15px !default;
-$thumbnav-margin-vertical: $thumbnav-margin-horizontal !default;
-$tile-padding-horizontal: 15px !default;
-$tile-padding-horizontal-s: $global-gutter !default;
-$tile-padding-horizontal-m: $global-medium-gutter !default;
-$tile-padding-vertical: $global-medium-margin !default;
-$tile-padding-vertical-m: $global-large-margin !default;
-$tile-xsmall-padding-vertical: $global-margin !default;
-$tile-small-padding-vertical: $global-medium-margin !default;
-$tile-large-padding-vertical: $global-large-margin !default;
-$tile-large-padding-vertical-m: $global-xlarge-margin !default;
-$tile-xlarge-padding-vertical: $global-xlarge-margin !default;
-$tile-xlarge-padding-vertical-m: ($global-large-margin + $global-xlarge-margin) !default;
-$tile-default-background: $global-background !default;
-$tile-muted-background: $global-muted-background !default;
-$tile-primary-background: $global-primary-background !default;
-$tile-primary-color-mode: light !default;
-$tile-secondary-background: $global-secondary-background !default;
-$tile-secondary-color-mode: light !default;
-$tooltip-z-index: $global-z-index + 30 !default;
-$tooltip-max-width: 200px !default;
-$tooltip-padding-vertical: 3px !default;
-$tooltip-padding-horizontal: 6px !default;
-$tooltip-background: #666 !default;
-$tooltip-border-radius: 2px !default;
-$tooltip-color: $global-inverse-color !default;
-$tooltip-font-size: 12px !default;
-$tooltip-margin: 10px !default;
-$totop-padding: 5px !default;
-$totop-color: $global-muted-color !default;
-$totop-hover-color: $global-color !default;
-$totop-active-color: $global-emphasis-color !default;
-$inverse-totop-color: $inverse-global-muted-color !default;
-$inverse-totop-hover-color: $inverse-global-color !default;
-$inverse-totop-active-color: $inverse-global-emphasis-color !default;
-$transition-duration: 0.3s !default;
-$transition-scale: 1.03 !default;
-$transition-slide-small-translate: 10px !default;
-$transition-slide-medium-translate: 50px !default;
-$transition-slow-duration: 0.7s !default;
-$panel-scrollable-height: 170px !default;
-$panel-scrollable-padding: 10px !default;
-$panel-scrollable-border-width: $global-border-width !default;
-$panel-scrollable-border: $global-border !default;
-$border-rounded-border-radius: 5px !default;
-$box-shadow-duration: 0.1s !default;
-$box-shadow-bottom-height: 30px !default;
-$box-shadow-bottom-border-radius: 100% !default;
-$box-shadow-bottom-background: #444 !default;
-$box-shadow-bottom-blur: 20px !default;
-$dropcap-margin-right: 10px !default;
-$dropcap-font-size: (($global-line-height * 3) * 1em) !default;
-$logo-font-size: $global-large-font-size !default;
-$logo-font-family: $global-font-family !default;
-$logo-color: $global-color !default;
-$logo-hover-color: $global-color !default;
-$dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3) !default;
-$inverse-logo-color: $inverse-global-color !default;
-$inverse-logo-hover-color: $inverse-global-color !default;
-$deprecated: false !default;
-$breakpoint-small: 640px !default;
-$breakpoint-medium: 960px !default;
-$breakpoint-large: 1200px !default;
-$breakpoint-xlarge: 1600px !default;
-$breakpoint-xsmall-max: ($breakpoint-small - 1) !default;
-$breakpoint-small-max: ($breakpoint-medium - 1) !default;
-$breakpoint-medium-max: ($breakpoint-large - 1) !default;
-$breakpoint-large-max: ($breakpoint-xlarge - 1) !default;
-$global-small-box-shadow: 0 2px 8px rgba(0,0,0,0.08) !default;
-$global-medium-box-shadow: 0 5px 15px rgba(0,0,0,0.08) !default;
-$global-large-box-shadow: 0 14px 25px rgba(0,0,0,0.16) !default;
-$global-xlarge-box-shadow: 0 28px 50px rgba(0,0,0,0.16) !default;
-$width-small-width: 150px !default;
-$width-medium-width: 300px !default;
-$width-large-width: 450px !default;
-$width-xlarge-width: 600px !default;
-$width-2xlarge-width: 750px !default;
\ No newline at end of file
diff --git a/docs/assets/css/prism.css b/docs/assets/css/prism.css
deleted file mode 100644
index 5465ca64b9..0000000000
--- a/docs/assets/css/prism.css
+++ /dev/null
@@ -1,218 +0,0 @@
-/* PrismJS 1.24.1
-https://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+clike+bash+git+groovy+handlebars+java+javadoc+javadoclike+javastacktrace+json+kotlin+markup-templating+nginx+shell-session+xml-doc+yaml&plugins=normalize-whitespace+toolbar+copy-to-clipboard */
-/*
- Solarized Color Schemes originally by Ethan Schoonover
- http://ethanschoonover.com/solarized
-
- Ported for PrismJS by Hector Matos
- Website: https://krakendev.io
- Twitter Handle: https://twitter.com/allonsykraken)
-*/
-
-/*
-SOLARIZED HEX
---------- -------
-base03 #002b36
-base02 #073642
-base01 #586e75
-base00 #657b83
-base0 #839496
-base1 #93a1a1
-base2 #eee8d5
-base3 #FEF6EB
-yellow #b58900
-orange #cb4b16
-red #dc322f
-magenta #d33682
-violet #6c71c4
-blue #268bd2
-cyan #2aa198
-green #859900
-*/
-
-code[class*="language-"],
-pre[class*="language-"] {
- color: #657b83; /* base00 */
- font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
- font-size: 1em;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
-
- line-height: 1.5;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
- background: #073642; /* base02 */
-}
-
-pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
-code[class*="language-"]::selection, code[class*="language-"] ::selection {
- background: #073642; /* base02 */
-}
-
-/* Code blocks */
-pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
- border-radius: 0.3em;
-}
-
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
- background-color: #FEF6EB; /* base3 */
-}
-
-/* Inline code */
-:not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: #93a1a1; /* base1 */
-}
-
-.token.punctuation {
- color: #586e75; /* base01 */
-}
-
-.token.namespace {
- opacity: .7;
-}
-
-.token.property,
-.token.tag,
-.token.boolean,
-.token.number,
-.token.constant,
-.token.symbol,
-.token.deleted {
- color: #268bd2; /* blue */
-}
-
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.url,
-.token.inserted {
- color: #2aa198; /* cyan */
-}
-
-.token.entity {
- color: #657b83; /* base00 */
- background: #eee8d5; /* base2 */
-}
-
-.token.atrule,
-.token.attr-value,
-.token.keyword {
- color: #859900; /* green */
-}
-
-.token.function,
-.token.class-name {
- color: #b58900; /* yellow */
-}
-
-.token.regex,
-.token.important,
-.token.variable {
- color: #cb4b16; /* orange */
-}
-
-.token.important,
-.token.bold {
- font-weight: bold;
-}
-.token.italic {
- font-style: italic;
-}
-
-.token.entity {
- cursor: help;
-}
-
-div.code-toolbar {
- position: relative;
-}
-
-div.code-toolbar > .toolbar {
- position: absolute;
- top: .3em;
- right: .2em;
- transition: opacity 0.3s ease-in-out;
- opacity: 0;
-}
-
-div.code-toolbar:hover > .toolbar {
- opacity: 1;
-}
-
-/* Separate line b/c rules are thrown out if selector is invalid.
- IE11 and old Edge versions don't support :focus-within. */
-div.code-toolbar:focus-within > .toolbar {
- opacity: 1;
-}
-
-div.code-toolbar > .toolbar > .toolbar-item {
- display: inline-block;
-}
-
-div.code-toolbar > .toolbar > .toolbar-item > a {
- cursor: pointer;
-}
-
-div.code-toolbar > .toolbar > .toolbar-item > button {
- background: none;
- border: 0;
- color: inherit;
- font: inherit;
- line-height: normal;
- overflow: visible;
- padding: 0;
- -webkit-user-select: none; /* for button */
- -moz-user-select: none;
- -ms-user-select: none;
-}
-
-div.code-toolbar > .toolbar > .toolbar-item > a,
-div.code-toolbar > .toolbar > .toolbar-item > button,
-div.code-toolbar > .toolbar > .toolbar-item > span {
- color: #bbb;
- font-size: .8em;
- padding: 0 .5em;
- background: #f5f2f0;
- background: rgba(224, 224, 224, 0.2);
- box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
- border-radius: .5em;
-}
-
-div.code-toolbar > .toolbar > .toolbar-item > a:hover,
-div.code-toolbar > .toolbar > .toolbar-item > a:focus,
-div.code-toolbar > .toolbar > .toolbar-item > button:hover,
-div.code-toolbar > .toolbar > .toolbar-item > button:focus,
-div.code-toolbar > .toolbar > .toolbar-item > span:hover,
-div.code-toolbar > .toolbar > .toolbar-item > span:focus {
- color: inherit;
- text-decoration: none;
-}
-
diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss
deleted file mode 100644
index 3930cb46ac..0000000000
--- a/docs/assets/css/style.scss
+++ /dev/null
@@ -1,18 +0,0 @@
----
-# this ensures Jekyll reads the file to be transformed into CSS later
----
-
-$baseurl: "{{ site.baseurl }}";
-
-// 1. Custom variables and variable overwrites.
-@import "https://github.com/theme/variables";
-
-
-// 2. Import default variables and available mixins.
-@import "https://github.com/uikit/variables-theme";
-@import "https://github.com/uikit/mixins-theme";
-
-// 3. Import Custom theme for UIkit.
-@import "https://github.com/theme/uikit";
-@import "https://github.com/theme/mixins";
-
diff --git a/docs/assets/icons/logo.svg b/docs/assets/icons/logo.svg
new file mode 100644
index 0000000000..0048fdf4d6
--- /dev/null
+++ b/docs/assets/icons/logo.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/assets/images/cs.png b/docs/assets/images/cs.png
deleted file mode 100644
index 9b68819645..0000000000
Binary files a/docs/assets/images/cs.png and /dev/null differ
diff --git a/docs/assets/images/event-sources.png b/docs/assets/images/event-sources.png
deleted file mode 100644
index 773eaeb106..0000000000
Binary files a/docs/assets/images/event-sources.png and /dev/null differ
diff --git a/docs/assets/images/logo-icon.svg b/docs/assets/images/logo-icon.svg
deleted file mode 100644
index 245127232e..0000000000
--- a/docs/assets/images/logo-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/images/logo-white.svg b/docs/assets/images/logo-white.svg
deleted file mode 100644
index 87a3378dff..0000000000
--- a/docs/assets/images/logo-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-JAVA OPERATOR SDK
\ No newline at end of file
diff --git a/docs/assets/js/prism.js b/docs/assets/js/prism.js
deleted file mode 100644
index d597fce07e..0000000000
--- a/docs/assets/js/prism.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* PrismJS 1.24.1
-https://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+clike+bash+git+groovy+handlebars+java+javadoc+javadoclike+javastacktrace+json+kotlin+markup-templating+nginx+shell-session+xml-doc+yaml&plugins=normalize-whitespace+toolbar+copy-to-clipboard */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""+a.tag+">"},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
-Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
-!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var n=/([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;"$"===t&&(n=/([^\$])(?:\$(?:\{.*?\}|[\w.]+))/),e.content=e.content.replace(/</g,"<").replace(/&/g,"&"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}});
-!function(h){function v(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,o){if(a.language===r){var c=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var n,t=c.length;-1!==a.code.indexOf(n=v(r,t));)++t;return c[t]=e,n}),a.grammar=h.languages.markup}}},tokenizePlaceholders:{value:function(p,k){if(p.language===k&&p.tokenStack){p.grammar=h.languages[k];var m=0,d=Object.keys(p.tokenStack);!function e(n){for(var t=0;t=d.length);t++){var a=n[t];if("string"==typeof a||a.content&&"string"==typeof a.content){var r=d[m],o=p.tokenStack[r],c="string"==typeof a?a:a.content,i=v(k,r),u=c.indexOf(i);if(-1@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"handlebars")}),e.languages.hbs=e.languages.handlebars}(Prism);
-!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",a={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{"class-name":[a,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,function(){return t.source})),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism);
-!function(p){var a=p.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(a,"addSupport",{value:function(a,e){"string"==typeof a&&(a=[a]),a.forEach(function(a){!function(a,e){var n="doc-comment",t=p.languages[a];if(t){var r=t[n];if(!r){var o={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}};r=(t=p.languages.insertBefore(a,"comment",o))[n]}if(r instanceof RegExp&&(r=t[n]={pattern:r}),Array.isArray(r))for(var i=0,s=r.length;i)?|".replace(//g,function(){return"#\\s*\\w+(?:\\s*\\([^()]*\\))?"});a.languages.javadoc=a.languages.extend("javadoclike",{}),a.languages.insertBefore("javadoc","keyword",{reference:{pattern:RegExp("(@(?:exception|throws|see|link|linkplain|value)\\s+(?:\\*\\s*)?)(?:"+n+")"),lookbehind:!0,inside:{function:{pattern:/(#\s*)\w+(?=\s*\()/,lookbehind:!0},field:{pattern:/(#\s*)\w+/,lookbehind:!0},namespace:{pattern:/\b(?:[a-z]\w*\s*\.\s*)+/,inside:{punctuation:/\./}},"class-name":/\b[A-Z]\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\],.]/}},"class-name":{pattern:/(@param\s+)<[A-Z]\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},"code-section":[{pattern:/(\{@code\s+(?!\s))(?:[^\s{}]|\s+(?![\s}])|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+(?=\s*\})/,lookbehind:!0,inside:{code:{pattern:e,lookbehind:!0,inside:a.languages.java,alias:"language-java"}}},{pattern:/(<(code|pre|tt)>(?!)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(Prism);
-Prism.languages.javastacktrace={summary:{pattern:/^[\t ]*(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m,inside:{keyword:{pattern:/^(\s*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,lookbehind:!0},string:{pattern:/^(\s*)"[^"]*"/,lookbehind:!0},exceptions:{pattern:/^(:?\s*)[\w$.]+(?=:|$)/,lookbehind:!0,inside:{"class-name":/[\w$]+(?=$|:)/,namespace:/[a-z]\w*/,punctuation:/[.:]/}},message:{pattern:/(:\s*)\S.*/,lookbehind:!0,alias:"string"},punctuation:/:/}},"stack-frame":{pattern:/^[\t ]*at (?:[\w$./]|@[\w$.+-]*\/)+(?:)?\([^()]*\)/m,inside:{keyword:{pattern:/^(\s*)at(?= )/,lookbehind:!0},source:[{pattern:/(\()\w+\.\w+:\d+(?=\))/,lookbehind:!0,inside:{file:/^\w+\.\w+/,punctuation:/:/,"line-number":{pattern:/\d+/,alias:"number"}}},{pattern:/(\()[^()]*(?=\))/,lookbehind:!0,inside:{keyword:/^(?:Unknown Source|Native Method)$/}}],"class-name":/[\w$]+(?=\.(?:|[\w$]+)\()/,function:/(?:|[\w$]+)(?=\()/,"class-loader":{pattern:/(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/,lookbehind:!0,alias:"namespace",inside:{punctuation:/\./}},module:{pattern:/([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/,lookbehind:!0,inside:{version:{pattern:/(@)[\s\S]+/,lookbehind:!0,alias:"number"},punctuation:/[@.]/}},namespace:{pattern:/(?:[a-z]\w*\.)+/,inside:{punctuation:/\./}},punctuation:/[()/.]/}},more:{pattern:/^[\t ]*\.{3} \d+ [a-z]+(?: [a-z]+)*/m,inside:{punctuation:/\.{3}/,number:/\d+/,keyword:/\b[a-z]+(?: [a-z]+)*\b/}}};
-Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;
-!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"],e.languages.insertBefore("kotlin","string",{"raw-string":{pattern:/("""|''')[\s\S]*?\1/,alias:"string"}}),e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}});var n=[{pattern:/\$\{[^}]+\}/,inside:{delimiter:{pattern:/^\$\{|\}$/,alias:"variable"},rest:e.languages.kotlin}},{pattern:/\$\w+/,alias:"variable"}];e.languages.kotlin.string.inside=e.languages.kotlin["raw-string"].inside={interpolation:n},e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(Prism);
-!function(e){var n=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;Prism.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:n}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:n}},punctuation:/[{};]/}}();
-!function(s){var n=['"(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^"\\\\`$])*"',"'[^']*'","\\$'(?:[^'\\\\]|\\\\[^])*'","<<-?\\s*([\"']?)(\\w+)\\1\\s[^]*?[\r\n]\\2"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#*!/\\\\]+@[^\r\n@:$#*!/\\\\]+(?::[^\0-\\x1F$#*?"<>:;|]+)?|[^\0-\\x1F$#*?"<>@:;|]+)?[$#]'+"(?:[^\\\\\r\n'\"<$]|\\\\(?:[^\r]|\r\n?)|\\$(?!')|<>)+".replace(/<>/g,function(){return n}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$]+/,alias:"punctuation",inside:{user:/^[^\s@:$#*!/\\]+@[^\r\n@:$#*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism);
-!function(n){function a(a,e){n.languages[a]&&n.languages.insertBefore(a,"comment",{"doc-comment":e})}var e=n.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:e}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:e}};a("csharp",t),a("fsharp",t),a("vbnet",g)}(Prism);
-!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"}),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,function(){return t}).replace(/<>/g,function(){return e});return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return t})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,function(){return t}).replace(/<>/g,function(){return"(?:"+a+"|"+d+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("true|false","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);
-!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var i=Object.assign||function(e,n){for(var t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e};e.prototype={setDefaults:function(e){this.defaults=i(this.defaults,e)},normalize:function(e,n){for(var t in n=i(this.defaults,n)){var r=t.replace(/-(\w)/g,function(e,n){return n.toUpperCase()});"normalize"!==t&&"setDefaults"!==r&&n[t]&&this[r]&&(e=this[r].call(this,e,n[t]))}return e},leftTrim:function(e){return e.replace(/^\s+/,"")},rightTrim:function(e){return e.replace(/\s+$/,"")},tabsToSpaces:function(e,n){return n=0|n||4,e.replace(/\t/g,new Array(++n).join(" "))},spacesToTabs:function(e,n){return n=0|n||4,e.replace(RegExp(" {"+n+"}","g"),"\t")},removeTrailing:function(e){return e.replace(/\s*?$/gm,"")},removeInitialLineFeed:function(e){return e.replace(/^(?:\r?\n|\r)/,"")},removeIndent:function(e){var n=e.match(/^[^\S\n\r]*(?=\S)/gm);return n&&n[0].length?(n.sort(function(e,n){return e.length-n.length}),n[0].length?e.replace(RegExp("^"+n[0],"gm"),""):e):e},indent:function(e,n){return e.replace(/^[^\S\n\r]*(?=\S)/gm,new Array(++n).join("\t")+"$&")},breakLines:function(e,n){n=!0===n?80:0|n||80;for(var t=e.split("\n"),r=0;r= 1;
- }
-
- function isElement(obj) {
- return nodeType(obj) === 1;
- }
-
- function nodeType(obj) {
- return !isWindow(obj) && isObject(obj) && obj.nodeType;
- }
-
- function isBoolean(value) {
- return typeof value === 'boolean';
- }
-
- function isString(value) {
- return typeof value === 'string';
- }
-
- function isNumber(value) {
- return typeof value === 'number';
- }
-
- function isNumeric(value) {
- return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));
- }
-
- function isEmpty(obj) {
- return !(isArray(obj)
- ? obj.length
- : isObject(obj)
- ? Object.keys(obj).length
- : false
- );
- }
-
- function isUndefined(value) {
- return value === void 0;
- }
-
- function toBoolean(value) {
- return isBoolean(value)
- ? value
- : value === 'true' || value === '1' || value === ''
- ? true
- : value === 'false' || value === '0'
- ? false
- : value;
- }
-
- function toNumber(value) {
- var number = Number(value);
- return !isNaN(number) ? number : false;
- }
-
- function toFloat(value) {
- return parseFloat(value) || 0;
- }
-
- var toArray = Array.from || (function (value) { return arrPrototype.slice.call(value); });
-
- function toNode(element) {
- return toNodes(element)[0];
- }
-
- function toNodes(element) {
- return element && (isNode(element) ? [element] : toArray(element).filter(isNode)) || [];
- }
-
- function toWindow(element) {
- if (isWindow(element)) {
- return element;
- }
-
- element = toNode(element);
-
- return element
- ? (isDocument(element)
- ? element
- : element.ownerDocument
- ).defaultView
- : window;
- }
-
- function toMs(time) {
- return !time
- ? 0
- : endsWith(time, 'ms')
- ? toFloat(time)
- : toFloat(time) * 1000;
- }
-
- function isEqual(value, other) {
- return value === other
- || isObject(value)
- && isObject(other)
- && Object.keys(value).length === Object.keys(other).length
- && each(value, function (val, key) { return val === other[key]; });
- }
-
- function swap(value, a, b) {
- return value.replace(
- new RegExp((a + "|" + b), 'g'),
- function (match) { return match === a ? b : a; }
- );
- }
-
- var assign = Object.assign || function (target) {
- var args = [], len = arguments.length - 1;
- while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
- target = Object(target);
- for (var i = 0; i < args.length; i++) {
- var source = args[i];
- if (source !== null) {
- for (var key in source) {
- if (hasOwn(source, key)) {
- target[key] = source[key];
- }
- }
- }
- }
- return target;
- };
-
- function last(array) {
- return array[array.length - 1];
- }
-
- function each(obj, cb) {
- for (var key in obj) {
- if (false === cb(obj[key], key)) {
- return false;
- }
- }
- return true;
- }
-
- function sortBy$1(array, prop) {
- return array.slice().sort(function (ref, ref$1) {
- var propA = ref[prop]; if ( propA === void 0 ) propA = 0;
- var propB = ref$1[prop]; if ( propB === void 0 ) propB = 0;
-
- return propA > propB
- ? 1
- : propB > propA
- ? -1
- : 0;
- }
- );
- }
-
- function uniqueBy(array, prop) {
- var seen = new Set();
- return array.filter(function (ref) {
- var check = ref[prop];
-
- return seen.has(check)
- ? false
- : seen.add(check) || true;
- } // IE 11 does not return the Set object
- );
- }
-
- function clamp(number, min, max) {
- if ( min === void 0 ) min = 0;
- if ( max === void 0 ) max = 1;
-
- return Math.min(Math.max(toNumber(number) || 0, min), max);
- }
-
- function noop() {}
-
- function intersectRect() {
- var rects = [], len = arguments.length;
- while ( len-- ) rects[ len ] = arguments[ len ];
-
- return [['bottom', 'top'], ['right', 'left']].every(function (ref) {
- var minProp = ref[0];
- var maxProp = ref[1];
-
- return Math.min.apply(Math, rects.map(function (ref) {
- var min = ref[minProp];
-
- return min;
- })) - Math.max.apply(Math, rects.map(function (ref) {
- var max = ref[maxProp];
-
- return max;
- })) > 0;
- }
- );
- }
-
- function pointInRect(point, rect) {
- return point.x <= rect.right &&
- point.x >= rect.left &&
- point.y <= rect.bottom &&
- point.y >= rect.top;
- }
-
- var Dimensions = {
-
- ratio: function(dimensions, prop, value) {
- var obj;
-
-
- var aProp = prop === 'width' ? 'height' : 'width';
-
- return ( obj = {}, obj[aProp] = dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp], obj[prop] = value, obj );
- },
-
- contain: function(dimensions, maxDimensions) {
- var this$1 = this;
-
- dimensions = assign({}, dimensions);
-
- each(dimensions, function (_, prop) { return dimensions = dimensions[prop] > maxDimensions[prop]
- ? this$1.ratio(dimensions, prop, maxDimensions[prop])
- : dimensions; }
- );
-
- return dimensions;
- },
-
- cover: function(dimensions, maxDimensions) {
- var this$1 = this;
-
- dimensions = this.contain(dimensions, maxDimensions);
-
- each(dimensions, function (_, prop) { return dimensions = dimensions[prop] < maxDimensions[prop]
- ? this$1.ratio(dimensions, prop, maxDimensions[prop])
- : dimensions; }
- );
-
- return dimensions;
- }
-
- };
-
- function getIndex(i, elements, current, finite) {
- if ( current === void 0 ) current = 0;
- if ( finite === void 0 ) finite = false;
-
-
- elements = toNodes(elements);
-
- var length = elements.length;
-
- i = isNumeric(i)
- ? toNumber(i)
- : i === 'next'
- ? current + 1
- : i === 'previous'
- ? current - 1
- : elements.indexOf(toNode(i));
-
- if (finite) {
- return clamp(i, 0, length - 1);
- }
-
- i %= length;
-
- return i < 0 ? i + length : i;
- }
-
- function memoize(fn) {
- var cache = Object.create(null);
- return function (key) { return cache[key] || (cache[key] = fn(key)); };
- }
-
- function attr(element, name, value) {
-
- if (isObject(name)) {
- for (var key in name) {
- attr(element, key, name[key]);
- }
- return;
- }
-
- if (isUndefined(value)) {
- element = toNode(element);
- return element && element.getAttribute(name);
- } else {
- toNodes(element).forEach(function (element) {
-
- if (isFunction(value)) {
- value = value.call(element, attr(element, name));
- }
-
- if (value === null) {
- removeAttr(element, name);
- } else {
- element.setAttribute(name, value);
- }
- });
- }
-
- }
-
- function hasAttr(element, name) {
- return toNodes(element).some(function (element) { return element.hasAttribute(name); });
- }
-
- function removeAttr(element, name) {
- element = toNodes(element);
- name.split(' ').forEach(function (name) { return element.forEach(function (element) { return element.hasAttribute(name) && element.removeAttribute(name); }
- ); }
- );
- }
-
- function data(element, attribute) {
- for (var i = 0, attrs = [attribute, ("data-" + attribute)]; i < attrs.length; i++) {
- if (hasAttr(element, attrs[i])) {
- return attr(element, attrs[i]);
- }
- }
- }
-
- /* global DocumentTouch */
-
- var inBrowser = typeof window !== 'undefined';
- var isIE = inBrowser && /msie|trident/i.test(window.navigator.userAgent);
- var isRtl = inBrowser && attr(document.documentElement, 'dir') === 'rtl';
-
- var hasTouchEvents = inBrowser && 'ontouchstart' in window;
- var hasPointerEvents = inBrowser && window.PointerEvent;
- var hasTouch = inBrowser && (hasTouchEvents
- || window.DocumentTouch && document instanceof DocumentTouch
- || navigator.maxTouchPoints); // IE >=11
-
- var pointerDown = hasPointerEvents ? 'pointerdown' : hasTouchEvents ? 'touchstart' : 'mousedown';
- var pointerMove = hasPointerEvents ? 'pointermove' : hasTouchEvents ? 'touchmove' : 'mousemove';
- var pointerUp = hasPointerEvents ? 'pointerup' : hasTouchEvents ? 'touchend' : 'mouseup';
- var pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouchEvents ? '' : 'mouseenter';
- var pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouchEvents ? '' : 'mouseleave';
- var pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel';
-
- var voidElements = {
- area: true,
- base: true,
- br: true,
- col: true,
- embed: true,
- hr: true,
- img: true,
- input: true,
- keygen: true,
- link: true,
- menuitem: true,
- meta: true,
- param: true,
- source: true,
- track: true,
- wbr: true
- };
- function isVoidElement(element) {
- return toNodes(element).some(function (element) { return voidElements[element.tagName.toLowerCase()]; });
- }
-
- function isVisible(element) {
- return toNodes(element).some(function (element) { return element.offsetWidth || element.offsetHeight || element.getClientRects().length; });
- }
-
- var selInput = 'input,select,textarea,button';
- function isInput(element) {
- return toNodes(element).some(function (element) { return matches(element, selInput); });
- }
-
- function isFocusable(element) {
- return isInput(element) || matches(element, 'a[href],button') || hasAttr(element, 'tabindex');
- }
-
- function parent(element) {
- element = toNode(element);
- return element && isElement(element.parentNode) && element.parentNode;
- }
-
- function filter$1(element, selector) {
- return toNodes(element).filter(function (element) { return matches(element, selector); });
- }
-
- var elProto = inBrowser ? Element.prototype : {};
- var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector || noop;
-
- function matches(element, selector) {
- return toNodes(element).some(function (element) { return matchesFn.call(element, selector); });
- }
-
- var closestFn = elProto.closest || function (selector) {
- var ancestor = this;
-
- do {
-
- if (matches(ancestor, selector)) {
- return ancestor;
- }
-
- } while ((ancestor = parent(ancestor)));
- };
-
- function closest(element, selector) {
-
- if (startsWith(selector, '>')) {
- selector = selector.slice(1);
- }
-
- return isElement(element)
- ? closestFn.call(element, selector)
- : toNodes(element).map(function (element) { return closest(element, selector); }).filter(Boolean);
- }
-
- function within(element, selector) {
- return !isString(selector)
- ? element === selector || (isDocument(selector)
- ? selector.documentElement
- : toNode(selector)).contains(toNode(element)) // IE 11 document does not implement contains
- : matches(element, selector) || !!closest(element, selector);
- }
-
- function parents(element, selector) {
- var elements = [];
-
- while ((element = parent(element))) {
- if (!selector || matches(element, selector)) {
- elements.push(element);
- }
- }
-
- return elements;
- }
-
- function children(element, selector) {
- element = toNode(element);
- var children = element ? toNodes(element.children) : [];
- return selector ? filter$1(children, selector) : children;
- }
-
- function index(element, ref) {
- return ref
- ? toNodes(element).indexOf(toNode(ref))
- : children(parent(element)).indexOf(element);
- }
-
- function query(selector, context) {
- return find(selector, getContext(selector, context));
- }
-
- function queryAll(selector, context) {
- return findAll(selector, getContext(selector, context));
- }
-
- function getContext(selector, context) {
- if ( context === void 0 ) context = document;
-
- return isString(selector) && isContextSelector(selector) || isDocument(context)
- ? context
- : context.ownerDocument;
- }
-
- function find(selector, context) {
- return toNode(_query(selector, context, 'querySelector'));
- }
-
- function findAll(selector, context) {
- return toNodes(_query(selector, context, 'querySelectorAll'));
- }
-
- function _query(selector, context, queryFn) {
- if ( context === void 0 ) context = document;
-
-
- if (!selector || !isString(selector)) {
- return selector;
- }
-
- selector = selector.replace(contextSanitizeRe, '$1 *');
-
- if (isContextSelector(selector)) {
-
- selector = splitSelector(selector).map(function (selector) {
-
- var ctx = context;
-
- if (selector[0] === '!') {
-
- var selectors = selector.substr(1).trim().split(' ');
- ctx = closest(parent(context), selectors[0]);
- selector = selectors.slice(1).join(' ').trim();
-
- }
-
- if (selector[0] === '-') {
-
- var selectors$1 = selector.substr(1).trim().split(' ');
- var prev = (ctx || context).previousElementSibling;
- ctx = matches(prev, selector.substr(1)) ? prev : null;
- selector = selectors$1.slice(1).join(' ');
-
- }
-
- if (!ctx) {
- return null;
- }
-
- return ((domPath(ctx)) + " " + selector);
-
- }).filter(Boolean).join(',');
-
- context = document;
-
- }
-
- try {
-
- return context[queryFn](selector);
-
- } catch (e) {
-
- return null;
-
- }
-
- }
-
- var contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/;
- var contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
-
- var isContextSelector = memoize(function (selector) { return selector.match(contextSelectorRe); });
-
- var selectorRe = /.*?[^\\](?:,|$)/g;
-
- var splitSelector = memoize(function (selector) { return selector.match(selectorRe).map(function (selector) { return selector.replace(/,$/, '').trim(); }
- ); }
- );
-
- function domPath(element) {
- var names = [];
- while (element.parentNode) {
- if (element.id) {
- names.unshift(("#" + (escape(element.id))));
- break;
- } else {
- var tagName = element.tagName;
- if (tagName !== 'HTML') {
- tagName += ":nth-child(" + (index(element) + 1) + ")";
- }
- names.unshift(tagName);
- element = element.parentNode;
- }
- }
- return names.join(' > ');
- }
-
- var escapeFn = inBrowser && window.CSS && CSS.escape || function (css) { return css.replace(/([^\x7f-\uFFFF\w-])/g, function (match) { return ("\\" + match); }); };
- function escape(css) {
- return isString(css) ? escapeFn.call(null, css) : '';
- }
-
- function on() {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
-
-
- var ref = getArgs(args);
- var targets = ref[0];
- var type = ref[1];
- var selector = ref[2];
- var listener = ref[3];
- var useCapture = ref[4];
-
- targets = toEventTargets(targets);
-
- if (listener.length > 1) {
- listener = detail(listener);
- }
-
- if (useCapture && useCapture.self) {
- listener = selfFilter(listener);
- }
-
- if (selector) {
- listener = delegate(selector, listener);
- }
-
- useCapture = useCaptureFilter(useCapture);
-
- type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.addEventListener(type, listener, useCapture); }
- ); }
- );
- return function () { return off(targets, type, listener, useCapture); };
- }
-
- function off(targets, type, listener, useCapture) {
- if ( useCapture === void 0 ) useCapture = false;
-
- useCapture = useCaptureFilter(useCapture);
- targets = toEventTargets(targets);
- type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.removeEventListener(type, listener, useCapture); }
- ); }
- );
- }
-
- function once() {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
-
-
- var ref = getArgs(args);
- var element = ref[0];
- var type = ref[1];
- var selector = ref[2];
- var listener = ref[3];
- var useCapture = ref[4];
- var condition = ref[5];
- var off = on(element, type, selector, function (e) {
- var result = !condition || condition(e);
- if (result) {
- off();
- listener(e, result);
- }
- }, useCapture);
-
- return off;
- }
-
- function trigger(targets, event, detail) {
- return toEventTargets(targets).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); }
- , true);
- }
-
- function createEvent(e, bubbles, cancelable, detail) {
- if ( bubbles === void 0 ) bubbles = true;
- if ( cancelable === void 0 ) cancelable = false;
-
- if (isString(e)) {
- var event = document.createEvent('CustomEvent'); // IE 11
- event.initCustomEvent(e, bubbles, cancelable, detail);
- e = event;
- }
-
- return e;
- }
-
- function getArgs(args) {
- if (isFunction(args[2])) {
- args.splice(2, 0, false);
- }
- return args;
- }
-
- function delegate(selector, listener) {
- var this$1 = this;
-
- return function (e) {
-
- var current = selector[0] === '>'
- ? findAll(selector, e.currentTarget).reverse().filter(function (element) { return within(e.target, element); })[0]
- : closest(e.target, selector);
-
- if (current) {
- e.current = current;
- listener.call(this$1, e);
- }
-
- };
- }
-
- function detail(listener) {
- return function (e) { return isArray(e.detail) ? listener.apply(void 0, [ e ].concat( e.detail )) : listener(e); };
- }
-
- function selfFilter(listener) {
- return function (e) {
- if (e.target === e.currentTarget || e.target === e.current) {
- return listener.call(null, e);
- }
- };
- }
-
- function useCaptureFilter(options) {
- return options && isIE && !isBoolean(options)
- ? !!options.capture
- : options;
- }
-
- function isEventTarget(target) {
- return target && 'addEventListener' in target;
- }
-
- function toEventTarget(target) {
- return isEventTarget(target) ? target : toNode(target);
- }
-
- function toEventTargets(target) {
- return isArray(target)
- ? target.map(toEventTarget).filter(Boolean)
- : isString(target)
- ? findAll(target)
- : isEventTarget(target)
- ? [target]
- : toNodes(target);
- }
-
- function isTouch(e) {
- return e.pointerType === 'touch' || !!e.touches;
- }
-
- function getEventPos(e) {
- var touches = e.touches;
- var changedTouches = e.changedTouches;
- var ref = touches && touches[0] || changedTouches && changedTouches[0] || e;
- var x = ref.clientX;
- var y = ref.clientY;
-
- return {x: x, y: y};
- }
-
- /* global setImmediate */
-
- var Promise$1 = inBrowser && window.Promise || PromiseFn;
-
- var Deferred = function() {
- var this$1 = this;
-
- this.promise = new Promise$1(function (resolve, reject) {
- this$1.reject = reject;
- this$1.resolve = resolve;
- });
- };
-
- /**
- * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)
- */
-
- var RESOLVED = 0;
- var REJECTED = 1;
- var PENDING = 2;
-
- var async = inBrowser && window.setImmediate || setTimeout;
-
- function PromiseFn(executor) {
-
- this.state = PENDING;
- this.value = undefined;
- this.deferred = [];
-
- var promise = this;
-
- try {
- executor(
- function (x) {
- promise.resolve(x);
- },
- function (r) {
- promise.reject(r);
- }
- );
- } catch (e) {
- promise.reject(e);
- }
- }
-
- PromiseFn.reject = function (r) {
- return new PromiseFn(function (resolve, reject) {
- reject(r);
- });
- };
-
- PromiseFn.resolve = function (x) {
- return new PromiseFn(function (resolve, reject) {
- resolve(x);
- });
- };
-
- PromiseFn.all = function all(iterable) {
- return new PromiseFn(function (resolve, reject) {
- var result = [];
- var count = 0;
-
- if (iterable.length === 0) {
- resolve(result);
- }
-
- function resolver(i) {
- return function (x) {
- result[i] = x;
- count += 1;
-
- if (count === iterable.length) {
- resolve(result);
- }
- };
- }
-
- for (var i = 0; i < iterable.length; i += 1) {
- PromiseFn.resolve(iterable[i]).then(resolver(i), reject);
- }
- });
- };
-
- PromiseFn.race = function race(iterable) {
- return new PromiseFn(function (resolve, reject) {
- for (var i = 0; i < iterable.length; i += 1) {
- PromiseFn.resolve(iterable[i]).then(resolve, reject);
- }
- });
- };
-
- var p = PromiseFn.prototype;
-
- p.resolve = function resolve(x) {
- var promise = this;
-
- if (promise.state === PENDING) {
- if (x === promise) {
- throw new TypeError('Promise settled with itself.');
- }
-
- var called = false;
-
- try {
- var then = x && x.then;
-
- if (x !== null && isObject(x) && isFunction(then)) {
- then.call(
- x,
- function (x) {
- if (!called) {
- promise.resolve(x);
- }
- called = true;
- },
- function (r) {
- if (!called) {
- promise.reject(r);
- }
- called = true;
- }
- );
- return;
- }
- } catch (e) {
- if (!called) {
- promise.reject(e);
- }
- return;
- }
-
- promise.state = RESOLVED;
- promise.value = x;
- promise.notify();
- }
- };
-
- p.reject = function reject(reason) {
- var promise = this;
-
- if (promise.state === PENDING) {
- if (reason === promise) {
- throw new TypeError('Promise settled with itself.');
- }
-
- promise.state = REJECTED;
- promise.value = reason;
- promise.notify();
- }
- };
-
- p.notify = function notify() {
- var this$1 = this;
-
- async(function () {
- if (this$1.state !== PENDING) {
- while (this$1.deferred.length) {
- var ref = this$1.deferred.shift();
- var onResolved = ref[0];
- var onRejected = ref[1];
- var resolve = ref[2];
- var reject = ref[3];
-
- try {
- if (this$1.state === RESOLVED) {
- if (isFunction(onResolved)) {
- resolve(onResolved.call(undefined, this$1.value));
- } else {
- resolve(this$1.value);
- }
- } else if (this$1.state === REJECTED) {
- if (isFunction(onRejected)) {
- resolve(onRejected.call(undefined, this$1.value));
- } else {
- reject(this$1.value);
- }
- }
- } catch (e) {
- reject(e);
- }
- }
- }
- });
- };
-
- p.then = function then(onResolved, onRejected) {
- var this$1 = this;
-
- return new PromiseFn(function (resolve, reject) {
- this$1.deferred.push([onResolved, onRejected, resolve, reject]);
- this$1.notify();
- });
- };
-
- p.catch = function (onRejected) {
- return this.then(undefined, onRejected);
- };
-
- function ajax(url, options) {
-
- var env = assign({
- data: null,
- method: 'GET',
- headers: {},
- xhr: new XMLHttpRequest(),
- beforeSend: noop,
- responseType: ''
- }, options);
-
- return Promise$1.resolve()
- .then(function () { return env.beforeSend(env); })
- .then(function () { return send(url, env); });
- }
-
- function send(url, env) {
- return new Promise$1(function (resolve, reject) {
- var xhr = env.xhr;
-
- for (var prop in env) {
- if (prop in xhr) {
- try {
-
- xhr[prop] = env[prop];
-
- } catch (e) {}
- }
- }
-
- xhr.open(env.method.toUpperCase(), url);
-
- for (var header in env.headers) {
- xhr.setRequestHeader(header, env.headers[header]);
- }
-
- on(xhr, 'load', function () {
-
- if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
-
- // IE 11 does not support responseType 'json'
- if (env.responseType === 'json' && isString(xhr.response)) {
- xhr = assign(copyXhr(xhr), {response: JSON.parse(xhr.response)});
- }
-
- resolve(xhr);
-
- } else {
- reject(assign(Error(xhr.statusText), {
- xhr: xhr,
- status: xhr.status
- }));
- }
-
- });
-
- on(xhr, 'error', function () { return reject(assign(Error('Network Error'), {xhr: xhr})); });
- on(xhr, 'timeout', function () { return reject(assign(Error('Network Timeout'), {xhr: xhr})); });
-
- xhr.send(env.data);
- });
- }
-
- function getImage(src, srcset, sizes) {
-
- return new Promise$1(function (resolve, reject) {
- var img = new Image();
-
- img.onerror = function (e) { return reject(e); };
- img.onload = function () { return resolve(img); };
-
- sizes && (img.sizes = sizes);
- srcset && (img.srcset = srcset);
- img.src = src;
- });
-
- }
-
- function copyXhr(source) {
- var target = {};
- for (var key in source) {
- target[key] = source[key];
- }
- return target;
- }
-
- function ready(fn) {
-
- if (document.readyState !== 'loading') {
- fn();
- return;
- }
-
- var unbind = on(document, 'DOMContentLoaded', function () {
- unbind();
- fn();
- });
- }
-
- function empty(element) {
- element = $(element);
- element.innerHTML = '';
- return element;
- }
-
- function html(parent, html) {
- parent = $(parent);
- return isUndefined(html)
- ? parent.innerHTML
- : append(parent.hasChildNodes() ? empty(parent) : parent, html);
- }
-
- function prepend(parent, element) {
-
- parent = $(parent);
-
- if (!parent.hasChildNodes()) {
- return append(parent, element);
- } else {
- return insertNodes(element, function (element) { return parent.insertBefore(element, parent.firstChild); });
- }
- }
-
- function append(parent, element) {
- parent = $(parent);
- return insertNodes(element, function (element) { return parent.appendChild(element); });
- }
-
- function before(ref, element) {
- ref = $(ref);
- return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); });
- }
-
- function after(ref, element) {
- ref = $(ref);
- return insertNodes(element, function (element) { return ref.nextSibling
- ? before(ref.nextSibling, element)
- : append(ref.parentNode, element); }
- );
- }
-
- function insertNodes(element, fn) {
- element = isString(element) ? fragment(element) : element;
- return element
- ? 'length' in element
- ? toNodes(element).map(fn)
- : fn(element)
- : null;
- }
-
- function remove$1(element) {
- toNodes(element).forEach(function (element) { return element.parentNode && element.parentNode.removeChild(element); });
- }
-
- function wrapAll(element, structure) {
-
- structure = toNode(before(element, structure));
-
- while (structure.firstChild) {
- structure = structure.firstChild;
- }
-
- append(structure, element);
-
- return structure;
- }
-
- function wrapInner(element, structure) {
- return toNodes(toNodes(element).map(function (element) { return element.hasChildNodes ? wrapAll(toNodes(element.childNodes), structure) : append(element, structure); }
- ));
- }
-
- function unwrap(element) {
- toNodes(element)
- .map(parent)
- .filter(function (value, index, self) { return self.indexOf(value) === index; })
- .forEach(function (parent) {
- before(parent, parent.childNodes);
- remove$1(parent);
- });
- }
-
- var fragmentRe = /^\s*<(\w+|!)[^>]*>/;
- var singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
-
- function fragment(html) {
-
- var matches = singleTagRe.exec(html);
- if (matches) {
- return document.createElement(matches[1]);
- }
-
- var container = document.createElement('div');
- if (fragmentRe.test(html)) {
- container.insertAdjacentHTML('beforeend', html.trim());
- } else {
- container.textContent = html;
- }
-
- return container.childNodes.length > 1 ? toNodes(container.childNodes) : container.firstChild;
-
- }
-
- function apply$1(node, fn) {
-
- if (!isElement(node)) {
- return;
- }
-
- fn(node);
- node = node.firstElementChild;
- while (node) {
- var next = node.nextElementSibling;
- apply$1(node, fn);
- node = next;
- }
- }
-
- function $(selector, context) {
- return isHtml(selector)
- ? toNode(fragment(selector))
- : find(selector, context);
- }
-
- function $$(selector, context) {
- return isHtml(selector)
- ? toNodes(fragment(selector))
- : findAll(selector, context);
- }
-
- function isHtml(str) {
- return isString(str) && (str[0] === '<' || str.match(/^\s*));
- }
-
- function addClass(element) {
- var args = [], len = arguments.length - 1;
- while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
- apply(element, args, 'add');
- }
-
- function removeClass(element) {
- var args = [], len = arguments.length - 1;
- while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
- apply(element, args, 'remove');
- }
-
- function removeClasses(element, cls) {
- attr(element, 'class', function (value) { return (value || '').replace(new RegExp(("\\b" + cls + "\\b"), 'g'), ''); });
- }
-
- function replaceClass(element) {
- var args = [], len = arguments.length - 1;
- while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
- args[0] && removeClass(element, args[0]);
- args[1] && addClass(element, args[1]);
- }
-
- function hasClass(element, cls) {
- var assign;
-
- (assign = getClasses(cls), cls = assign[0]);
- var nodes = toNodes(element);
- for (var n = 0; n < nodes.length; n++) {
- if (cls && nodes[n].classList.contains(cls)) {
- return true;
- }
- }
- return false;
- }
-
- function toggleClass(element, cls, force) {
-
- cls = getClasses(cls);
-
- var nodes = toNodes(element);
- for (var n = 0; n < nodes.length; n++) {
- var list = nodes[n].classList;
- for (var i = 0; i < cls.length; i++) {
- if (isUndefined(force)) {
- list.toggle(cls[i]);
- } else if (supports.Force) {
- list.toggle(cls[i], !!force);
- } else {
- list[force ? 'add' : 'remove'](cls[i]);
- }
- }
- }
- }
-
- function apply(element, args, fn) {
- var ref;
-
-
- args = args.reduce(function (args, arg) { return args.concat(getClasses(arg)); }, []);
-
- var nodes = toNodes(element);
- var loop = function ( n ) {
- if (supports.Multiple) {
- (ref = nodes[n].classList)[fn].apply(ref, args);
- } else {
- args.forEach(function (cls) { return nodes[n].classList[fn](cls); });
- }
- };
-
- for (var n = 0; n < nodes.length; n++) loop( n );
- }
-
- function getClasses(str) {
- return String(str).split(/\s|,/).filter(Boolean);
- }
-
- // IE 11
- var supports = {
-
- get Multiple() {
- return this.get('Multiple');
- },
-
- get Force() {
- return this.get('Force');
- },
-
- get: function(key) {
-
- var ref = document.createElement('_');
- var classList = ref.classList;
- classList.add('a', 'b');
- classList.toggle('c', false);
- supports = {
- Multiple: classList.contains('b'),
- Force: !classList.contains('c')
- };
-
- return supports[key];
- }
-
- };
-
- var cssNumber = {
- 'animation-iteration-count': true,
- 'column-count': true,
- 'fill-opacity': true,
- 'flex-grow': true,
- 'flex-shrink': true,
- 'font-weight': true,
- 'line-height': true,
- 'opacity': true,
- 'order': true,
- 'orphans': true,
- 'stroke-dasharray': true,
- 'stroke-dashoffset': true,
- 'widows': true,
- 'z-index': true,
- 'zoom': true
- };
-
- function css(element, property, value, priority) {
- if ( priority === void 0 ) priority = '';
-
-
- return toNodes(element).map(function (element) {
-
- if (isString(property)) {
-
- property = propName(property);
-
- if (isUndefined(value)) {
- return getStyle(element, property);
- } else if (!value && !isNumber(value)) {
- element.style.removeProperty(property);
- } else {
- element.style.setProperty(property, isNumeric(value) && !cssNumber[property] ? (value + "px") : value, priority);
- }
-
- } else if (isArray(property)) {
-
- var styles = getStyles(element);
-
- return property.reduce(function (props, property) {
- props[property] = styles[propName(property)];
- return props;
- }, {});
-
- } else if (isObject(property)) {
- priority = value;
- each(property, function (value, property) { return css(element, property, value, priority); });
- }
-
- return element;
-
- })[0];
-
- }
-
- function getStyles(element, pseudoElt) {
- return toWindow(element).getComputedStyle(element, pseudoElt);
- }
-
- function getStyle(element, property, pseudoElt) {
- return getStyles(element, pseudoElt)[property];
- }
-
- var parseCssVar = memoize(function (name) {
- /* usage in css: .uk-name:before { content:"xyz" } */
-
- var element = append(document.documentElement, document.createElement('div'));
-
- addClass(element, ("uk-" + name));
-
- name = getStyle(element, 'content', ':before').replace(/^["'](.*)["']$/, '$1');
-
- remove$1(element);
-
- return name;
- });
-
- function getCssVar(name) {
- return !isIE
- ? getStyles(document.documentElement).getPropertyValue(("--uk-" + name))
- : parseCssVar(name);
- }
-
- // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
- var propName = memoize(function (name) { return vendorPropName(name); });
-
- var cssPrefixes = ['webkit', 'moz', 'ms'];
-
- function vendorPropName(name) {
-
- name = hyphenate(name);
-
- var ref = document.documentElement;
- var style = ref.style;
-
- if (name in style) {
- return name;
- }
-
- var i = cssPrefixes.length, prefixedName;
-
- while (i--) {
- prefixedName = "-" + (cssPrefixes[i]) + "-" + name;
- if (prefixedName in style) {
- return prefixedName;
- }
- }
- }
-
- function transition(element, props, duration, timing) {
- if ( duration === void 0 ) duration = 400;
- if ( timing === void 0 ) timing = 'linear';
-
-
- return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) {
-
- for (var name in props) {
- var value = css(element, name);
- if (value === '') {
- css(element, name, value);
- }
- }
-
- var timer = setTimeout(function () { return trigger(element, 'transitionend'); }, duration);
-
- once(element, 'transitionend transitioncanceled', function (ref) {
- var type = ref.type;
-
- clearTimeout(timer);
- removeClass(element, 'uk-transition');
- css(element, {
- transitionProperty: '',
- transitionDuration: '',
- transitionTimingFunction: ''
- });
- type === 'transitioncanceled' ? reject() : resolve(element);
- }, {self: true});
-
- addClass(element, 'uk-transition');
- css(element, assign({
- transitionProperty: Object.keys(props).map(propName).join(','),
- transitionDuration: (duration + "ms"),
- transitionTimingFunction: timing
- }, props));
-
- }); }
- ));
-
- }
-
- var Transition = {
-
- start: transition,
-
- stop: function(element) {
- trigger(element, 'transitionend');
- return Promise$1.resolve();
- },
-
- cancel: function(element) {
- trigger(element, 'transitioncanceled');
- },
-
- inProgress: function(element) {
- return hasClass(element, 'uk-transition');
- }
-
- };
-
- var animationPrefix = 'uk-animation-';
-
- function animate$1(element, animation, duration, origin, out) {
- if ( duration === void 0 ) duration = 200;
-
-
- return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) {
-
- trigger(element, 'animationcanceled');
- var timer = setTimeout(function () { return trigger(element, 'animationend'); }, duration);
-
- once(element, 'animationend animationcanceled', function (ref) {
- var type = ref.type;
-
-
- clearTimeout(timer);
-
- type === 'animationcanceled' ? reject() : resolve(element);
-
- css(element, 'animationDuration', '');
- removeClasses(element, (animationPrefix + "\\S*"));
-
- }, {self: true});
-
- css(element, 'animationDuration', (duration + "ms"));
- addClass(element, animation, animationPrefix + (out ? 'leave' : 'enter'));
-
- if (startsWith(animation, animationPrefix)) {
- origin && addClass(element, ("uk-transform-origin-" + origin));
- out && addClass(element, (animationPrefix + "reverse"));
- }
-
- }); }
- ));
-
- }
-
- var inProgress = new RegExp((animationPrefix + "(enter|leave)"));
- var Animation = {
-
- in: animate$1,
-
- out: function(element, animation, duration, origin) {
- return animate$1(element, animation, duration, origin, true);
- },
-
- inProgress: function(element) {
- return inProgress.test(attr(element, 'class'));
- },
-
- cancel: function(element) {
- trigger(element, 'animationcanceled');
- }
-
- };
-
- var dirs$1 = {
- width: ['left', 'right'],
- height: ['top', 'bottom']
- };
-
- function dimensions(element) {
-
- var rect = isElement(element)
- ? toNode(element).getBoundingClientRect()
- : {height: height(element), width: width(element), top: 0, left: 0};
-
- return {
- height: rect.height,
- width: rect.width,
- top: rect.top,
- left: rect.left,
- bottom: rect.top + rect.height,
- right: rect.left + rect.width
- };
- }
-
- function offset(element, coordinates) {
-
- var currentOffset = dimensions(element);
- var ref = toWindow(element);
- var pageYOffset = ref.pageYOffset;
- var pageXOffset = ref.pageXOffset;
- var offsetBy = {height: pageYOffset, width: pageXOffset};
-
- for (var dir in dirs$1) {
- for (var i in dirs$1[dir]) {
- currentOffset[dirs$1[dir][i]] += offsetBy[dir];
- }
- }
-
- if (!coordinates) {
- return currentOffset;
- }
-
- var pos = css(element, 'position');
-
- each(css(element, ['left', 'top']), function (value, prop) { return css(element, prop, coordinates[prop]
- - currentOffset[prop]
- + toFloat(pos === 'absolute' && value === 'auto'
- ? position(element)[prop]
- : value)
- ); }
- );
- }
-
- function position(element) {
-
- var ref = offset(element);
- var top = ref.top;
- var left = ref.left;
-
- var ref$1 = toNode(element);
- var ref$1_ownerDocument = ref$1.ownerDocument;
- var body = ref$1_ownerDocument.body;
- var documentElement = ref$1_ownerDocument.documentElement;
- var offsetParent = ref$1.offsetParent;
- var parent = offsetParent || documentElement;
-
- while (parent && (parent === body || parent === documentElement) && css(parent, 'position') === 'static') {
- parent = parent.parentNode;
- }
-
- if (isElement(parent)) {
- var parentOffset = offset(parent);
- top -= parentOffset.top + toFloat(css(parent, 'borderTopWidth'));
- left -= parentOffset.left + toFloat(css(parent, 'borderLeftWidth'));
- }
-
- return {
- top: top - toFloat(css(element, 'marginTop')),
- left: left - toFloat(css(element, 'marginLeft'))
- };
- }
-
- function offsetPosition(element) {
- var offset = [0, 0];
-
- element = toNode(element);
-
- do {
-
- offset[0] += element.offsetTop;
- offset[1] += element.offsetLeft;
-
- if (css(element, 'position') === 'fixed') {
- var win = toWindow(element);
- offset[0] += win.pageYOffset;
- offset[1] += win.pageXOffset;
- return offset;
- }
-
- } while ((element = element.offsetParent));
-
- return offset;
- }
-
- var height = dimension('height');
- var width = dimension('width');
-
- function dimension(prop) {
- var propName = ucfirst(prop);
- return function (element, value) {
-
- if (isUndefined(value)) {
-
- if (isWindow(element)) {
- return element[("inner" + propName)];
- }
-
- if (isDocument(element)) {
- var doc = element.documentElement;
- return Math.max(doc[("offset" + propName)], doc[("scroll" + propName)]);
- }
-
- element = toNode(element);
-
- value = css(element, prop);
- value = value === 'auto' ? element[("offset" + propName)] : toFloat(value) || 0;
-
- return value - boxModelAdjust(element, prop);
-
- } else {
-
- return css(element, prop, !value && value !== 0
- ? ''
- : +value + boxModelAdjust(element, prop) + 'px'
- );
-
- }
-
- };
- }
-
- function boxModelAdjust(element, prop, sizing) {
- if ( sizing === void 0 ) sizing = 'border-box';
-
- return css(element, 'boxSizing') === sizing
- ? dirs$1[prop].map(ucfirst).reduce(function (value, prop) { return value
- + toFloat(css(element, ("padding" + prop)))
- + toFloat(css(element, ("border" + prop + "Width"))); }
- , 0)
- : 0;
- }
-
- function flipPosition(pos) {
- for (var dir in dirs$1) {
- for (var i in dirs$1[dir]) {
- if (dirs$1[dir][i] === pos) {
- return dirs$1[dir][1 - i];
- }
- }
- }
- return pos;
- }
-
- function toPx(value, property, element) {
- if ( property === void 0 ) property = 'width';
- if ( element === void 0 ) element = window;
-
- return isNumeric(value)
- ? +value
- : endsWith(value, 'vh')
- ? percent(height(toWindow(element)), value)
- : endsWith(value, 'vw')
- ? percent(width(toWindow(element)), value)
- : endsWith(value, '%')
- ? percent(dimensions(element)[property], value)
- : toFloat(value);
- }
-
- function percent(base, value) {
- return base * toFloat(value) / 100;
- }
-
- /*
- Based on:
- Copyright (c) 2016 Wilson Page wilsonpage@me.com
- https://github.com/wilsonpage/fastdom
- */
-
- var fastdom = {
-
- reads: [],
- writes: [],
-
- read: function(task) {
- this.reads.push(task);
- scheduleFlush();
- return task;
- },
-
- write: function(task) {
- this.writes.push(task);
- scheduleFlush();
- return task;
- },
-
- clear: function(task) {
- remove(this.reads, task);
- remove(this.writes, task);
- },
-
- flush: flush
-
- };
-
- function flush(recursion) {
- if ( recursion === void 0 ) recursion = 1;
-
- runTasks(fastdom.reads);
- runTasks(fastdom.writes.splice(0));
-
- fastdom.scheduled = false;
-
- if (fastdom.reads.length || fastdom.writes.length) {
- scheduleFlush(recursion + 1);
- }
- }
-
- var RECURSION_LIMIT = 4;
- function scheduleFlush(recursion) {
-
- if (fastdom.scheduled) {
- return;
- }
-
- fastdom.scheduled = true;
- if (recursion && recursion < RECURSION_LIMIT) {
- Promise$1.resolve().then(function () { return flush(recursion); });
- } else {
- requestAnimationFrame(function () { return flush(); });
- }
-
- }
-
- function runTasks(tasks) {
- var task;
- while ((task = tasks.shift())) {
- try {
- task();
- } catch (e) {
- console.error(e);
- }
- }
- }
-
- function remove(array, item) {
- var index = array.indexOf(item);
- return ~index && array.splice(index, 1);
- }
-
- function MouseTracker() {}
-
- MouseTracker.prototype = {
-
- positions: [],
-
- init: function() {
- var this$1 = this;
-
-
- this.positions = [];
-
- var position;
- this.unbind = on(document, 'mousemove', function (e) { return position = getEventPos(e); });
- this.interval = setInterval(function () {
-
- if (!position) {
- return;
- }
-
- this$1.positions.push(position);
-
- if (this$1.positions.length > 5) {
- this$1.positions.shift();
- }
- }, 50);
-
- },
-
- cancel: function() {
- this.unbind && this.unbind();
- this.interval && clearInterval(this.interval);
- },
-
- movesTo: function(target) {
-
- if (this.positions.length < 2) {
- return false;
- }
-
- var p = target.getBoundingClientRect();
- var left = p.left;
- var right = p.right;
- var top = p.top;
- var bottom = p.bottom;
-
- var ref = this.positions;
- var prevPosition = ref[0];
- var position = last(this.positions);
- var path = [prevPosition, position];
-
- if (pointInRect(position, p)) {
- return false;
- }
-
- var diagonals = [[{x: left, y: top}, {x: right, y: bottom}], [{x: left, y: bottom}, {x: right, y: top}]];
-
- return diagonals.some(function (diagonal) {
- var intersection = intersect(path, diagonal);
- return intersection && pointInRect(intersection, p);
- });
- }
-
- };
-
- // Inspired by http://paulbourke.net/geometry/pointlineplane/
- function intersect(ref, ref$1) {
- var ref_0 = ref[0];
- var x1 = ref_0.x;
- var y1 = ref_0.y;
- var ref_1 = ref[1];
- var x2 = ref_1.x;
- var y2 = ref_1.y;
- var ref$1_0 = ref$1[0];
- var x3 = ref$1_0.x;
- var y3 = ref$1_0.y;
- var ref$1_1 = ref$1[1];
- var x4 = ref$1_1.x;
- var y4 = ref$1_1.y;
-
-
- var denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
-
- // Lines are parallel
- if (denominator === 0) {
- return false;
- }
-
- var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;
-
- if (ua < 0) {
- return false;
- }
-
- // Return an object with the x and y coordinates of the intersection
- return {x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1)};
- }
-
- var strats = {};
-
- strats.events =
- strats.created =
- strats.beforeConnect =
- strats.connected =
- strats.beforeDisconnect =
- strats.disconnected =
- strats.destroy = concatStrat;
-
- // args strategy
- strats.args = function (parentVal, childVal) {
- return childVal !== false && concatStrat(childVal || parentVal);
- };
-
- // update strategy
- strats.update = function (parentVal, childVal) {
- return sortBy$1(concatStrat(parentVal, isFunction(childVal) ? {read: childVal} : childVal), 'order');
- };
-
- // property strategy
- strats.props = function (parentVal, childVal) {
-
- if (isArray(childVal)) {
- childVal = childVal.reduce(function (value, key) {
- value[key] = String;
- return value;
- }, {});
- }
-
- return strats.methods(parentVal, childVal);
- };
-
- // extend strategy
- strats.computed =
- strats.methods = function (parentVal, childVal) {
- return childVal
- ? parentVal
- ? assign({}, parentVal, childVal)
- : childVal
- : parentVal;
- };
-
- // data strategy
- strats.data = function (parentVal, childVal, vm) {
-
- if (!vm) {
-
- if (!childVal) {
- return parentVal;
- }
-
- if (!parentVal) {
- return childVal;
- }
-
- return function (vm) {
- return mergeFnData(parentVal, childVal, vm);
- };
-
- }
-
- return mergeFnData(parentVal, childVal, vm);
- };
-
- function mergeFnData(parentVal, childVal, vm) {
- return strats.computed(
- isFunction(parentVal)
- ? parentVal.call(vm, vm)
- : parentVal,
- isFunction(childVal)
- ? childVal.call(vm, vm)
- : childVal
- );
- }
-
- // concat strategy
- function concatStrat(parentVal, childVal) {
-
- parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;
-
- return childVal
- ? parentVal
- ? parentVal.concat(childVal)
- : isArray(childVal)
- ? childVal
- : [childVal]
- : parentVal;
- }
-
- // default strategy
- function defaultStrat(parentVal, childVal) {
- return isUndefined(childVal) ? parentVal : childVal;
- }
-
- function mergeOptions(parent, child, vm) {
-
- var options = {};
-
- if (isFunction(child)) {
- child = child.options;
- }
-
- if (child.extends) {
- parent = mergeOptions(parent, child.extends, vm);
- }
-
- if (child.mixins) {
- for (var i = 0, l = child.mixins.length; i < l; i++) {
- parent = mergeOptions(parent, child.mixins[i], vm);
- }
- }
-
- for (var key in parent) {
- mergeKey(key);
- }
-
- for (var key$1 in child) {
- if (!hasOwn(parent, key$1)) {
- mergeKey(key$1);
- }
- }
-
- function mergeKey(key) {
- options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);
- }
-
- return options;
- }
-
- function parseOptions(options, args) {
- var obj;
-
- if ( args === void 0 ) args = [];
-
- try {
-
- return !options
- ? {}
- : startsWith(options, '{')
- ? JSON.parse(options)
- : args.length && !includes(options, ':')
- ? (( obj = {}, obj[args[0]] = options, obj ))
- : options.split(';').reduce(function (options, option) {
- var ref = option.split(/:(.*)/);
- var key = ref[0];
- var value = ref[1];
- if (key && !isUndefined(value)) {
- options[key.trim()] = value.trim();
- }
- return options;
- }, {});
-
- } catch (e) {
- return {};
- }
-
- }
-
- function play(el) {
-
- if (isIFrame(el)) {
- call(el, {func: 'playVideo', method: 'play'});
- }
-
- if (isHTML5(el)) {
- try {
- el.play().catch(noop);
- } catch (e) {}
- }
-
- }
-
- function pause(el) {
-
- if (isIFrame(el)) {
- call(el, {func: 'pauseVideo', method: 'pause'});
- }
-
- if (isHTML5(el)) {
- el.pause();
- }
-
- }
-
- function mute(el) {
-
- if (isIFrame(el)) {
- call(el, {func: 'mute', method: 'setVolume', value: 0});
- }
-
- if (isHTML5(el)) {
- el.muted = true;
- }
-
- }
-
- function isHTML5(el) {
- return el && el.tagName === 'VIDEO';
- }
-
- function isIFrame(el) {
- return el && el.tagName === 'IFRAME' && (isYoutube(el) || isVimeo(el));
- }
-
- function isYoutube(el) {
- return !!el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/);
- }
-
- function isVimeo(el) {
- return !!el.src.match(/vimeo\.com\/video\/.*/);
- }
-
- function call(el, cmd) {
- enableApi(el).then(function () { return post(el, cmd); });
- }
-
- function post(el, cmd) {
- try {
- el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*');
- } catch (e) {}
- }
-
- var stateKey$1 = '_ukPlayer';
- var counter = 0;
- function enableApi(el) {
-
- if (el[stateKey$1]) {
- return el[stateKey$1];
- }
-
- var youtube = isYoutube(el);
- var vimeo = isVimeo(el);
-
- var id = ++counter;
- var poller;
-
- return el[stateKey$1] = new Promise$1(function (resolve) {
-
- youtube && once(el, 'load', function () {
- var listener = function () { return post(el, {event: 'listening', id: id}); };
- poller = setInterval(listener, 100);
- listener();
- });
-
- once(window, 'message', resolve, false, function (ref) {
- var data = ref.data;
-
-
- try {
- data = JSON.parse(data);
- return data && (youtube && data.id === id && data.event === 'onReady' || vimeo && Number(data.player_id) === id);
- } catch (e) {}
-
- });
-
- el.src = "" + (el.src) + (includes(el.src, '?') ? '&' : '?') + (youtube ? 'enablejsapi=1' : ("api=1&player_id=" + id));
-
- }).then(function () { return clearInterval(poller); });
- }
-
- function isInView(element, offsetTop, offsetLeft) {
- if ( offsetTop === void 0 ) offsetTop = 0;
- if ( offsetLeft === void 0 ) offsetLeft = 0;
-
-
- if (!isVisible(element)) {
- return false;
- }
-
- return intersectRect.apply(void 0, scrollParents(element).map(function (parent) {
-
- var ref = offset(getViewport$1(parent));
- var top = ref.top;
- var left = ref.left;
- var bottom = ref.bottom;
- var right = ref.right;
-
- return {
- top: top - offsetTop,
- left: left - offsetLeft,
- bottom: bottom + offsetTop,
- right: right + offsetLeft
- };
- }).concat(offset(element)));
- }
-
- function scrollTop(element, top) {
-
- if (isWindow(element) || isDocument(element)) {
- element = getScrollingElement(element);
- } else {
- element = toNode(element);
- }
-
- element.scrollTop = top;
- }
-
- function scrollIntoView(element, ref) {
- if ( ref === void 0 ) ref = {};
- var offsetBy = ref.offset; if ( offsetBy === void 0 ) offsetBy = 0;
-
-
- if (!isVisible(element)) {
- return;
- }
-
- var parents = scrollParents(element);
- var diff = 0;
- return parents.reduce(function (fn, scrollElement, i) {
-
- var scrollTop = scrollElement.scrollTop;
- var scrollHeight = scrollElement.scrollHeight;
- var maxScroll = scrollHeight - getViewportClientHeight(scrollElement);
-
- var top = Math.ceil(
- offset(parents[i - 1] || element).top
- - offset(getViewport$1(scrollElement)).top
- - offsetBy
- + diff
- + scrollTop
- );
-
- if (top > maxScroll) {
- diff = top - maxScroll;
- top = maxScroll;
- } else {
- diff = 0;
- }
-
- return function () { return scrollTo(scrollElement, top - scrollTop).then(fn); };
-
- }, function () { return Promise$1.resolve(); })();
-
- function scrollTo(element, top) {
- return new Promise$1(function (resolve) {
-
- var scroll = element.scrollTop;
- var duration = getDuration(Math.abs(top));
- var start = Date.now();
-
- (function step() {
-
- var percent = ease(clamp((Date.now() - start) / duration));
-
- scrollTop(element, scroll + top * percent);
-
- // scroll more if we have not reached our destination
- if (percent !== 1) {
- requestAnimationFrame(step);
- } else {
- resolve();
- }
-
- })();
- });
- }
-
- function getDuration(dist) {
- return 40 * Math.pow(dist, .375);
- }
-
- function ease(k) {
- return 0.5 * (1 - Math.cos(Math.PI * k));
- }
-
- }
-
- function scrolledOver(element, heightOffset) {
- if ( heightOffset === void 0 ) heightOffset = 0;
-
-
- if (!isVisible(element)) {
- return 0;
- }
-
- var ref = scrollParents(element, /auto|scroll/, true);
- var scrollElement = ref[0];
- var scrollHeight = scrollElement.scrollHeight;
- var scrollTop = scrollElement.scrollTop;
- var clientHeight = getViewportClientHeight(scrollElement);
- var viewportTop = offsetPosition(element)[0] - scrollTop - offsetPosition(scrollElement)[0];
- var viewportDist = Math.min(clientHeight, viewportTop + scrollTop);
-
- var top = viewportTop - viewportDist;
- var dist = Math.min(
- element.offsetHeight + heightOffset + viewportDist,
- scrollHeight - (viewportTop + scrollTop),
- scrollHeight - clientHeight
- );
-
- return clamp(-1 * top / dist);
- }
-
- function scrollParents(element, overflowRe, scrollable) {
- if ( overflowRe === void 0 ) overflowRe = /auto|scroll|hidden/;
- if ( scrollable === void 0 ) scrollable = false;
-
- var scrollEl = getScrollingElement(element);
-
- var ancestors = parents(element).reverse();
- ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);
-
- var fixedIndex = findIndex(ancestors, function (el) { return css(el, 'position') === 'fixed'; });
- if (~fixedIndex) {
- ancestors = ancestors.slice(fixedIndex);
- }
-
- return [scrollEl].concat(ancestors.filter(function (parent) { return overflowRe.test(css(parent, 'overflow')) && (!scrollable || parent.scrollHeight > getViewportClientHeight(parent)); })
- ).reverse();
- }
-
- function getViewport$1(scrollElement) {
- return scrollElement === getScrollingElement(scrollElement) ? window : scrollElement;
- }
-
- // iOS 12 returns as scrollingElement
- function getViewportClientHeight(scrollElement) {
- return (scrollElement === getScrollingElement(scrollElement) ? document.documentElement : scrollElement).clientHeight;
- }
-
- function getScrollingElement(element) {
- var ref = toWindow(element);
- var document = ref.document;
- return document.scrollingElement || document.documentElement;
- }
-
- var dirs = {
- width: ['x', 'left', 'right'],
- height: ['y', 'top', 'bottom']
- };
-
- function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) {
-
- elAttach = getPos(elAttach);
- targetAttach = getPos(targetAttach);
-
- var flipped = {element: elAttach, target: targetAttach};
-
- if (!element || !target) {
- return flipped;
- }
-
- var dim = offset(element);
- var targetDim = offset(target);
- var position = targetDim;
-
- moveTo(position, elAttach, dim, -1);
- moveTo(position, targetAttach, targetDim, 1);
-
- elOffset = getOffsets(elOffset, dim.width, dim.height);
- targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);
-
- elOffset['x'] += targetOffset['x'];
- elOffset['y'] += targetOffset['y'];
-
- position.left += elOffset['x'];
- position.top += elOffset['y'];
-
- if (flip) {
-
- var boundaries = scrollParents(element).map(getViewport$1);
-
- if (boundary && !includes(boundaries, boundary)) {
- boundaries.unshift(boundary);
- }
-
- boundaries = boundaries.map(function (el) { return offset(el); });
-
- each(dirs, function (ref, prop) {
- var dir = ref[0];
- var align = ref[1];
- var alignFlip = ref[2];
-
-
- if (!(flip === true || includes(flip, dir))) {
- return;
- }
-
- boundaries.some(function (boundary) {
-
- var elemOffset = elAttach[dir] === align
- ? -dim[prop]
- : elAttach[dir] === alignFlip
- ? dim[prop]
- : 0;
-
- var targetOffset = targetAttach[dir] === align
- ? targetDim[prop]
- : targetAttach[dir] === alignFlip
- ? -targetDim[prop]
- : 0;
-
- if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) {
-
- var centerOffset = dim[prop] / 2;
- var centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
-
- return elAttach[dir] === 'center' && (
- apply(centerOffset, centerTargetOffset)
- || apply(-centerOffset, -centerTargetOffset)
- ) || apply(elemOffset, targetOffset);
-
- }
-
- function apply(elemOffset, targetOffset) {
-
- var newVal = toFloat((position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4));
-
- if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
- position[align] = newVal;
-
- ['element', 'target'].forEach(function (el) {
- flipped[el][dir] = !elemOffset
- ? flipped[el][dir]
- : flipped[el][dir] === dirs[prop][1]
- ? dirs[prop][2]
- : dirs[prop][1];
- });
-
- return true;
- }
-
- }
-
- });
-
- });
- }
-
- offset(element, position);
-
- return flipped;
- }
-
- function moveTo(position, attach, dim, factor) {
- each(dirs, function (ref, prop) {
- var dir = ref[0];
- var align = ref[1];
- var alignFlip = ref[2];
-
- if (attach[dir] === alignFlip) {
- position[align] += dim[prop] * factor;
- } else if (attach[dir] === 'center') {
- position[align] += dim[prop] * factor / 2;
- }
- });
- }
-
- function getPos(pos) {
-
- var x = /left|center|right/;
- var y = /top|center|bottom/;
-
- pos = (pos || '').split(' ');
-
- if (pos.length === 1) {
- pos = x.test(pos[0])
- ? pos.concat('center')
- : y.test(pos[0])
- ? ['center'].concat(pos)
- : ['center', 'center'];
- }
-
- return {
- x: x.test(pos[0]) ? pos[0] : 'center',
- y: y.test(pos[1]) ? pos[1] : 'center'
- };
- }
-
- function getOffsets(offsets, width, height) {
-
- var ref = (offsets || '').split(' ');
- var x = ref[0];
- var y = ref[1];
-
- return {
- x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,
- y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0
- };
- }
-
- var util = /*#__PURE__*/Object.freeze({
- __proto__: null,
- ajax: ajax,
- getImage: getImage,
- transition: transition,
- Transition: Transition,
- animate: animate$1,
- Animation: Animation,
- attr: attr,
- hasAttr: hasAttr,
- removeAttr: removeAttr,
- data: data,
- addClass: addClass,
- removeClass: removeClass,
- removeClasses: removeClasses,
- replaceClass: replaceClass,
- hasClass: hasClass,
- toggleClass: toggleClass,
- dimensions: dimensions,
- offset: offset,
- position: position,
- offsetPosition: offsetPosition,
- height: height,
- width: width,
- boxModelAdjust: boxModelAdjust,
- flipPosition: flipPosition,
- toPx: toPx,
- ready: ready,
- empty: empty,
- html: html,
- prepend: prepend,
- append: append,
- before: before,
- after: after,
- remove: remove$1,
- wrapAll: wrapAll,
- wrapInner: wrapInner,
- unwrap: unwrap,
- fragment: fragment,
- apply: apply$1,
- $: $,
- $$: $$,
- inBrowser: inBrowser,
- isIE: isIE,
- isRtl: isRtl,
- hasTouch: hasTouch,
- pointerDown: pointerDown,
- pointerMove: pointerMove,
- pointerUp: pointerUp,
- pointerEnter: pointerEnter,
- pointerLeave: pointerLeave,
- pointerCancel: pointerCancel,
- on: on,
- off: off,
- once: once,
- trigger: trigger,
- createEvent: createEvent,
- toEventTargets: toEventTargets,
- isTouch: isTouch,
- getEventPos: getEventPos,
- fastdom: fastdom,
- isVoidElement: isVoidElement,
- isVisible: isVisible,
- selInput: selInput,
- isInput: isInput,
- isFocusable: isFocusable,
- parent: parent,
- filter: filter$1,
- matches: matches,
- closest: closest,
- within: within,
- parents: parents,
- children: children,
- index: index,
- hasOwn: hasOwn,
- hyphenate: hyphenate,
- camelize: camelize,
- ucfirst: ucfirst,
- startsWith: startsWith,
- endsWith: endsWith,
- includes: includes,
- findIndex: findIndex,
- isArray: isArray,
- isFunction: isFunction,
- isObject: isObject,
- isPlainObject: isPlainObject,
- isWindow: isWindow,
- isDocument: isDocument,
- isNode: isNode,
- isElement: isElement,
- isBoolean: isBoolean,
- isString: isString,
- isNumber: isNumber,
- isNumeric: isNumeric,
- isEmpty: isEmpty,
- isUndefined: isUndefined,
- toBoolean: toBoolean,
- toNumber: toNumber,
- toFloat: toFloat,
- toArray: toArray,
- toNode: toNode,
- toNodes: toNodes,
- toWindow: toWindow,
- toMs: toMs,
- isEqual: isEqual,
- swap: swap,
- assign: assign,
- last: last,
- each: each,
- sortBy: sortBy$1,
- uniqueBy: uniqueBy,
- clamp: clamp,
- noop: noop,
- intersectRect: intersectRect,
- pointInRect: pointInRect,
- Dimensions: Dimensions,
- getIndex: getIndex,
- memoize: memoize,
- MouseTracker: MouseTracker,
- mergeOptions: mergeOptions,
- parseOptions: parseOptions,
- play: play,
- pause: pause,
- mute: mute,
- positionAt: positionAt,
- Promise: Promise$1,
- Deferred: Deferred,
- query: query,
- queryAll: queryAll,
- find: find,
- findAll: findAll,
- escape: escape,
- css: css,
- getCssVar: getCssVar,
- propName: propName,
- isInView: isInView,
- scrollTop: scrollTop,
- scrollIntoView: scrollIntoView,
- scrolledOver: scrolledOver,
- scrollParents: scrollParents,
- getViewport: getViewport$1,
- getViewportClientHeight: getViewportClientHeight
- });
-
- function globalAPI (UIkit) {
-
- var DATA = UIkit.data;
-
- UIkit.use = function (plugin) {
-
- if (plugin.installed) {
- return;
- }
-
- plugin.call(null, this);
- plugin.installed = true;
-
- return this;
- };
-
- UIkit.mixin = function (mixin, component) {
- component = (isString(component) ? UIkit.component(component) : component) || this;
- component.options = mergeOptions(component.options, mixin);
- };
-
- UIkit.extend = function (options) {
-
- options = options || {};
-
- var Super = this;
- var Sub = function UIkitComponent(options) {
- this._init(options);
- };
-
- Sub.prototype = Object.create(Super.prototype);
- Sub.prototype.constructor = Sub;
- Sub.options = mergeOptions(Super.options, options);
-
- Sub.super = Super;
- Sub.extend = Super.extend;
-
- return Sub;
- };
-
- UIkit.update = function (element, e) {
-
- element = element ? toNode(element) : document.body;
-
- parents(element).reverse().forEach(function (element) { return update(element[DATA], e); });
- apply$1(element, function (element) { return update(element[DATA], e); });
-
- };
-
- var container;
- Object.defineProperty(UIkit, 'container', {
-
- get: function() {
- return container || document.body;
- },
-
- set: function(element) {
- container = $(element);
- }
-
- });
-
- function update(data, e) {
-
- if (!data) {
- return;
- }
-
- for (var name in data) {
- if (data[name]._connected) {
- data[name]._callUpdate(e);
- }
- }
-
- }
- }
-
- function hooksAPI (UIkit) {
-
- UIkit.prototype._callHook = function (hook) {
- var this$1 = this;
-
-
- var handlers = this.$options[hook];
-
- if (handlers) {
- handlers.forEach(function (handler) { return handler.call(this$1); });
- }
- };
-
- UIkit.prototype._callConnected = function () {
-
- if (this._connected) {
- return;
- }
-
- this._data = {};
- this._computeds = {};
-
- this._initProps();
-
- this._callHook('beforeConnect');
- this._connected = true;
-
- this._initEvents();
- this._initObservers();
-
- this._callHook('connected');
- this._callUpdate();
- };
-
- UIkit.prototype._callDisconnected = function () {
-
- if (!this._connected) {
- return;
- }
-
- this._callHook('beforeDisconnect');
- this._disconnectObservers();
- this._unbindEvents();
- this._callHook('disconnected');
-
- this._connected = false;
- delete this._watch;
-
- };
-
- UIkit.prototype._callUpdate = function (e) {
- var this$1 = this;
- if ( e === void 0 ) e = 'update';
-
-
- if (!this._connected) {
- return;
- }
-
- if (e === 'update' || e === 'resize') {
- this._callWatches();
- }
-
- if (!this.$options.update) {
- return;
- }
-
- if (!this._updates) {
- this._updates = new Set();
- fastdom.read(function () {
- if (this$1._connected) {
- runUpdates.call(this$1, this$1._updates);
- }
- delete this$1._updates;
- });
- }
-
- this._updates.add(e.type || e);
- };
-
- UIkit.prototype._callWatches = function () {
- var this$1 = this;
-
-
- if (this._watch) {
- return;
- }
-
- var initial = !hasOwn(this, '_watch');
-
- this._watch = fastdom.read(function () {
- if (this$1._connected) {
- runWatches.call(this$1, initial);
- }
- this$1._watch = null;
-
- });
-
- };
-
- function runUpdates(types) {
- var this$1 = this;
-
-
- var updates = this.$options.update;
-
- var loop = function ( i ) {
- var ref = updates[i];
- var read = ref.read;
- var write = ref.write;
- var events = ref.events;
-
- if (!types.has('update') && (!events || !events.some(function (type) { return types.has(type); }))) {
- return;
- }
-
- var result = (void 0);
- if (read) {
-
- result = read.call(this$1, this$1._data, types);
-
- if (result && isPlainObject(result)) {
- assign(this$1._data, result);
- }
- }
-
- if (write && result !== false) {
- fastdom.write(function () { return write.call(this$1, this$1._data, types); });
- }
-
- };
-
- for (var i = 0; i < updates.length; i++) loop( i );
- }
-
- function runWatches(initial) {
-
- var ref = this;
- var computed = ref.$options.computed;
- var _computeds = ref._computeds;
-
- for (var key in computed) {
-
- var hasPrev = hasOwn(_computeds, key);
- var prev = _computeds[key];
-
- delete _computeds[key];
-
- var ref$1 = computed[key];
- var watch = ref$1.watch;
- var immediate = ref$1.immediate;
- if (watch && (
- initial && immediate
- || hasPrev && !isEqual(prev, this[key])
- )) {
- watch.call(this, this[key], prev);
- }
-
- }
- }
- }
-
- function stateAPI (UIkit) {
-
- var uid = 0;
-
- UIkit.prototype._init = function (options) {
-
- options = options || {};
- options.data = normalizeData(options, this.constructor.options);
-
- this.$options = mergeOptions(this.constructor.options, options, this);
- this.$el = null;
- this.$props = {};
-
- this._uid = uid++;
- this._initData();
- this._initMethods();
- this._initComputeds();
- this._callHook('created');
-
- if (options.el) {
- this.$mount(options.el);
- }
- };
-
- UIkit.prototype._initData = function () {
-
- var ref = this.$options;
- var data = ref.data; if ( data === void 0 ) data = {};
-
- for (var key in data) {
- this.$props[key] = this[key] = data[key];
- }
- };
-
- UIkit.prototype._initMethods = function () {
-
- var ref = this.$options;
- var methods = ref.methods;
-
- if (methods) {
- for (var key in methods) {
- this[key] = methods[key].bind(this);
- }
- }
- };
-
- UIkit.prototype._initComputeds = function () {
-
- var ref = this.$options;
- var computed = ref.computed;
-
- this._computeds = {};
-
- if (computed) {
- for (var key in computed) {
- registerComputed(this, key, computed[key]);
- }
- }
- };
-
- UIkit.prototype._initProps = function (props) {
-
- var key;
-
- props = props || getProps(this.$options, this.$name);
-
- for (key in props) {
- if (!isUndefined(props[key])) {
- this.$props[key] = props[key];
- }
- }
-
- var exclude = [this.$options.computed, this.$options.methods];
- for (key in this.$props) {
- if (key in props && notIn(exclude, key)) {
- this[key] = this.$props[key];
- }
- }
- };
-
- UIkit.prototype._initEvents = function () {
- var this$1 = this;
-
-
- this._events = [];
-
- var ref = this.$options;
- var events = ref.events;
-
- if (events) {
-
- events.forEach(function (event) {
-
- if (!hasOwn(event, 'handler')) {
- for (var key in event) {
- registerEvent(this$1, event[key], key);
- }
- } else {
- registerEvent(this$1, event);
- }
-
- });
- }
- };
-
- UIkit.prototype._unbindEvents = function () {
- this._events.forEach(function (unbind) { return unbind(); });
- delete this._events;
- };
-
- UIkit.prototype._initObservers = function () {
- this._observers = [
- initChildListObserver(this),
- initPropsObserver(this)
- ];
- };
-
- UIkit.prototype._disconnectObservers = function () {
- this._observers.forEach(function (observer) { return observer && observer.disconnect(); }
- );
- };
-
- function getProps(opts, name) {
-
- var data$1 = {};
- var args = opts.args; if ( args === void 0 ) args = [];
- var props = opts.props; if ( props === void 0 ) props = {};
- var el = opts.el;
-
- if (!props) {
- return data$1;
- }
-
- for (var key in props) {
- var prop = hyphenate(key);
- var value = data(el, prop);
-
- if (isUndefined(value)) {
- continue;
- }
-
- value = props[key] === Boolean && value === ''
- ? true
- : coerce(props[key], value);
-
- if (prop === 'target' && (!value || startsWith(value, '_'))) {
- continue;
- }
-
- data$1[key] = value;
- }
-
- var options = parseOptions(data(el, name), args);
-
- for (var key$1 in options) {
- var prop$1 = camelize(key$1);
- if (props[prop$1] !== undefined) {
- data$1[prop$1] = coerce(props[prop$1], options[key$1]);
- }
- }
-
- return data$1;
- }
-
- function registerComputed(component, key, cb) {
- Object.defineProperty(component, key, {
-
- enumerable: true,
-
- get: function() {
-
- var _computeds = component._computeds;
- var $props = component.$props;
- var $el = component.$el;
-
- if (!hasOwn(_computeds, key)) {
- _computeds[key] = (cb.get || cb).call(component, $props, $el);
- }
-
- return _computeds[key];
- },
-
- set: function(value) {
-
- var _computeds = component._computeds;
-
- _computeds[key] = cb.set ? cb.set.call(component, value) : value;
-
- if (isUndefined(_computeds[key])) {
- delete _computeds[key];
- }
- }
-
- });
- }
-
- function registerEvent(component, event, key) {
-
- if (!isPlainObject(event)) {
- event = ({name: key, handler: event});
- }
-
- var name = event.name;
- var el = event.el;
- var handler = event.handler;
- var capture = event.capture;
- var passive = event.passive;
- var delegate = event.delegate;
- var filter = event.filter;
- var self = event.self;
- el = isFunction(el)
- ? el.call(component)
- : el || component.$el;
-
- if (isArray(el)) {
- el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); });
- return;
- }
-
- if (!el || filter && !filter.call(component)) {
- return;
- }
-
- component._events.push(
- on(
- el,
- name,
- !delegate
- ? null
- : isString(delegate)
- ? delegate
- : delegate.call(component),
- isString(handler) ? component[handler] : handler.bind(component),
- {passive: passive, capture: capture, self: self}
- )
- );
-
- }
-
- function notIn(options, key) {
- return options.every(function (arr) { return !arr || !hasOwn(arr, key); });
- }
-
- function coerce(type, value) {
-
- if (type === Boolean) {
- return toBoolean(value);
- } else if (type === Number) {
- return toNumber(value);
- } else if (type === 'list') {
- return toList(value);
- }
-
- return type ? type(value) : value;
- }
-
- function toList(value) {
- return isArray(value)
- ? value
- : isString(value)
- ? value.split(/,(?![^(]*\))/).map(function (value) { return isNumeric(value)
- ? toNumber(value)
- : toBoolean(value.trim()); })
- : [value];
- }
-
- function normalizeData(ref, ref$1) {
- var data = ref.data;
- var args = ref$1.args;
- var props = ref$1.props; if ( props === void 0 ) props = {};
-
- data = isArray(data)
- ? !isEmpty(args)
- ? data.slice(0, args.length).reduce(function (data, value, index) {
- if (isPlainObject(value)) {
- assign(data, value);
- } else {
- data[args[index]] = value;
- }
- return data;
- }, {})
- : undefined
- : data;
-
- if (data) {
- for (var key in data) {
- if (isUndefined(data[key])) {
- delete data[key];
- } else {
- data[key] = props[key] ? coerce(props[key], data[key]) : data[key];
- }
- }
- }
-
- return data;
- }
-
- function initChildListObserver(component) {
- var ref = component.$options;
- var el = ref.el;
-
- var observer = new MutationObserver(function () { return component.$emit(); });
- observer.observe(el, {
- childList: true,
- subtree: true
- });
-
- return observer;
- }
-
- function initPropsObserver(component) {
-
- var $name = component.$name;
- var $options = component.$options;
- var $props = component.$props;
- var attrs = $options.attrs;
- var props = $options.props;
- var el = $options.el;
-
- if (!props || attrs === false) {
- return;
- }
-
- var attributes = isArray(attrs) ? attrs : Object.keys(props);
- var filter = attributes.map(function (key) { return hyphenate(key); }).concat($name);
-
- var observer = new MutationObserver(function (records) {
- var data = getProps($options, $name);
- if (records.some(function (ref) {
- var attributeName = ref.attributeName;
-
- var prop = attributeName.replace('data-', '');
- return (prop === $name ? attributes : [camelize(prop), camelize(attributeName)]).some(function (prop) { return !isUndefined(data[prop]) && data[prop] !== $props[prop]; }
- );
- })) {
- component.$reset();
- }
- });
-
- observer.observe(el, {
- attributes: true,
- attributeFilter: filter.concat(filter.map(function (key) { return ("data-" + key); }))
- });
-
- return observer;
- }
- }
-
- function instanceAPI (UIkit) {
-
- var DATA = UIkit.data;
-
- UIkit.prototype.$create = function (component, element, data) {
- return UIkit[component](element, data);
- };
-
- UIkit.prototype.$mount = function (el) {
-
- var ref = this.$options;
- var name = ref.name;
-
- if (!el[DATA]) {
- el[DATA] = {};
- }
-
- if (el[DATA][name]) {
- return;
- }
-
- el[DATA][name] = this;
-
- this.$el = this.$options.el = this.$options.el || el;
-
- if (within(el, document)) {
- this._callConnected();
- }
- };
-
- UIkit.prototype.$reset = function () {
- this._callDisconnected();
- this._callConnected();
- };
-
- UIkit.prototype.$destroy = function (removeEl) {
- if ( removeEl === void 0 ) removeEl = false;
-
-
- var ref = this.$options;
- var el = ref.el;
- var name = ref.name;
-
- if (el) {
- this._callDisconnected();
- }
-
- this._callHook('destroy');
-
- if (!el || !el[DATA]) {
- return;
- }
-
- delete el[DATA][name];
-
- if (!isEmpty(el[DATA])) {
- delete el[DATA];
- }
-
- if (removeEl) {
- remove$1(this.$el);
- }
- };
-
- UIkit.prototype.$emit = function (e) {
- this._callUpdate(e);
- };
-
- UIkit.prototype.$update = function (element, e) {
- if ( element === void 0 ) element = this.$el;
-
- UIkit.update(element, e);
- };
-
- UIkit.prototype.$getComponent = UIkit.getComponent;
-
- var componentName = memoize(function (name) { return UIkit.prefix + hyphenate(name); });
- Object.defineProperties(UIkit.prototype, {
-
- $container: Object.getOwnPropertyDescriptor(UIkit, 'container'),
-
- $name: {
-
- get: function() {
- return componentName(this.$options.name);
- }
-
- }
-
- });
-
- }
-
- function componentAPI (UIkit) {
-
- var DATA = UIkit.data;
-
- var components = {};
-
- UIkit.component = function (name, options) {
-
- var id = hyphenate(name);
-
- name = camelize(id);
-
- if (!options) {
-
- if (isPlainObject(components[name])) {
- components[name] = UIkit.extend(components[name]);
- }
-
- return components[name];
-
- }
-
- UIkit[name] = function (element, data) {
- var i = arguments.length, argsArray = Array(i);
- while ( i-- ) argsArray[i] = arguments[i];
-
-
- var component = UIkit.component(name);
-
- return component.options.functional
- ? new component({data: isPlainObject(element) ? element : [].concat( argsArray )})
- : !element ? init(element) : $$(element).map(init)[0];
-
- function init(element) {
-
- var instance = UIkit.getComponent(element, name);
-
- if (instance) {
- if (!data) {
- return instance;
- } else {
- instance.$destroy();
- }
- }
-
- return new component({el: element, data: data});
-
- }
-
- };
-
- var opt = isPlainObject(options) ? assign({}, options) : options.options;
-
- opt.name = name;
-
- if (opt.install) {
- opt.install(UIkit, opt, name);
- }
-
- if (UIkit._initialized && !opt.functional) {
- fastdom.read(function () { return UIkit[name](("[uk-" + id + "],[data-uk-" + id + "]")); });
- }
-
- return components[name] = isPlainObject(options) ? opt : options;
- };
-
- UIkit.getComponents = function (element) { return element && element[DATA] || {}; };
- UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; };
-
- UIkit.connect = function (node) {
-
- if (node[DATA]) {
- for (var name in node[DATA]) {
- node[DATA][name]._callConnected();
- }
- }
-
- for (var i = 0; i < node.attributes.length; i++) {
-
- var name$1 = getComponentName(node.attributes[i].name);
-
- if (name$1 && name$1 in components) {
- UIkit[name$1](node);
- }
-
- }
-
- };
-
- UIkit.disconnect = function (node) {
- for (var name in node[DATA]) {
- node[DATA][name]._callDisconnected();
- }
- };
-
- }
-
- var getComponentName = memoize(function (attribute) {
- return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-')
- ? camelize(attribute.replace('data-uk-', '').replace('uk-', ''))
- : false;
- });
-
- var UIkit = function (options) {
- this._init(options);
- };
-
- UIkit.util = util;
- UIkit.data = '__uikit__';
- UIkit.prefix = 'uk-';
- UIkit.options = {};
- UIkit.version = '3.7.0';
-
- globalAPI(UIkit);
- hooksAPI(UIkit);
- stateAPI(UIkit);
- componentAPI(UIkit);
- instanceAPI(UIkit);
-
- function Core (UIkit) {
-
- if (!inBrowser) {
- return;
- }
-
- // throttle 'resize'
- var pendingResize;
- var handleResize = function () {
- if (pendingResize) {
- return;
- }
- pendingResize = true;
- fastdom.write(function () { return pendingResize = false; });
- UIkit.update(null, 'resize');
- };
-
- on(window, 'load resize', handleResize);
- on(document, 'loadedmetadata load', handleResize, true);
-
- if ('ResizeObserver' in window) {
- (new ResizeObserver(handleResize)).observe(document.documentElement);
- }
-
- // throttle `scroll` event (Safari triggers multiple `scroll` events per frame)
- var pending;
- on(window, 'scroll', function (e) {
-
- if (pending) {
- return;
- }
- pending = true;
- fastdom.write(function () { return pending = false; });
-
- UIkit.update(null, e.type);
-
- }, {passive: true, capture: true});
-
- var started = 0;
- on(document, 'animationstart', function (ref) {
- var target = ref.target;
-
- if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {
-
- started++;
- css(document.documentElement, 'overflowX', 'hidden');
- setTimeout(function () {
- if (!--started) {
- css(document.documentElement, 'overflowX', '');
- }
- }, toMs(css(target, 'animationDuration')) + 100);
- }
- }, true);
-
- on(document, pointerDown, function (e) {
-
- if (!isTouch(e)) {
- return;
- }
-
- // Handle Swipe Gesture
- var pos = getEventPos(e);
- var target = 'tagName' in e.target ? e.target : parent(e.target);
- once(document, (pointerUp + " " + pointerCancel + " scroll"), function (e) {
-
- var ref = getEventPos(e);
- var x = ref.x;
- var y = ref.y;
-
- // swipe
- if (e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
-
- setTimeout(function () {
- trigger(target, 'swipe');
- trigger(target, ("swipe" + (swipeDirection(pos.x, pos.y, x, y))));
- });
-
- }
-
- });
-
- }, {passive: true});
-
- }
-
- function swipeDirection(x1, y1, x2, y2) {
- return Math.abs(x1 - x2) >= Math.abs(y1 - y2)
- ? x1 - x2 > 0
- ? 'Left'
- : 'Right'
- : y1 - y2 > 0
- ? 'Up'
- : 'Down';
- }
-
- function boot (UIkit) {
-
- var connect = UIkit.connect;
- var disconnect = UIkit.disconnect;
-
- if (!inBrowser || !window.MutationObserver) {
- return;
- }
-
- fastdom.read(function () {
-
- if (document.body) {
- apply$1(document.body, connect);
- }
-
- new MutationObserver(function (records) { return records.forEach(applyChildListMutation); }
- ).observe(document, {
- childList: true,
- subtree: true
- });
-
- new MutationObserver(function (records) { return records.forEach(applyAttributeMutation); }
- ).observe(document, {
- attributes: true,
- subtree: true
- });
-
- UIkit._initialized = true;
- });
-
- function applyChildListMutation(ref) {
- var addedNodes = ref.addedNodes;
- var removedNodes = ref.removedNodes;
-
- for (var i = 0; i < addedNodes.length; i++) {
- apply$1(addedNodes[i], connect);
- }
-
- for (var i$1 = 0; i$1 < removedNodes.length; i$1++) {
- apply$1(removedNodes[i$1], disconnect);
- }
- }
-
- function applyAttributeMutation(ref) {
- var target = ref.target;
- var attributeName = ref.attributeName;
-
-
- var name = getComponentName(attributeName);
-
- if (!name || !(name in UIkit)) {
- return;
- }
-
- if (hasAttr(target, attributeName)) {
- UIkit[name](target);
- return;
- }
-
- var component = UIkit.getComponent(target, name);
-
- if (component) {
- component.$destroy();
- }
-
- }
-
- }
-
- var Class = {
-
- connected: function() {
- !hasClass(this.$el, this.$name) && addClass(this.$el, this.$name);
- }
-
- };
-
- var Togglable = {
-
- props: {
- cls: Boolean,
- animation: 'list',
- duration: Number,
- origin: String,
- transition: String
- },
-
- data: {
- cls: false,
- animation: [false],
- duration: 200,
- origin: false,
- transition: 'linear',
- clsEnter: 'uk-togglabe-enter',
- clsLeave: 'uk-togglabe-leave',
-
- initProps: {
- overflow: '',
- height: '',
- paddingTop: '',
- paddingBottom: '',
- marginTop: '',
- marginBottom: ''
- },
-
- hideProps: {
- overflow: 'hidden',
- height: 0,
- paddingTop: 0,
- paddingBottom: 0,
- marginTop: 0,
- marginBottom: 0
- }
-
- },
-
- computed: {
-
- hasAnimation: function(ref) {
- var animation = ref.animation;
-
- return !!animation[0];
- },
-
- hasTransition: function(ref) {
- var animation = ref.animation;
-
- return this.hasAnimation && animation[0] === true;
- }
-
- },
-
- methods: {
-
- toggleElement: function(targets, toggle, animate) {
- var this$1 = this;
-
- return new Promise$1(function (resolve) { return Promise$1.all(toNodes(targets).map(function (el) {
-
- var show = isBoolean(toggle) ? toggle : !this$1.isToggled(el);
-
- if (!trigger(el, ("before" + (show ? 'show' : 'hide')), [this$1])) {
- return Promise$1.reject();
- }
-
- var promise = (
- isFunction(animate)
- ? animate
- : animate === false || !this$1.hasAnimation
- ? this$1._toggle
- : this$1.hasTransition
- ? toggleHeight(this$1)
- : toggleAnimation(this$1)
- )(el, show);
-
- var cls = show ? this$1.clsEnter : this$1.clsLeave;
-
- addClass(el, cls);
-
- trigger(el, show ? 'show' : 'hide', [this$1]);
-
- var done = function () {
- removeClass(el, cls);
- trigger(el, show ? 'shown' : 'hidden', [this$1]);
- this$1.$update(el);
- };
-
- return promise ? promise.then(done, function () {
- removeClass(el, cls);
- return Promise$1.reject();
- }) : done();
-
- })).then(resolve, noop); }
- );
- },
-
- isToggled: function(el) {
- if ( el === void 0 ) el = this.$el;
-
- return hasClass(el, this.clsEnter)
- ? true
- : hasClass(el, this.clsLeave)
- ? false
- : this.cls
- ? hasClass(el, this.cls.split(' ')[0])
- : !hasAttr(el, 'hidden');
- },
-
- _toggle: function(el, toggled) {
-
- if (!el) {
- return;
- }
-
- toggled = Boolean(toggled);
-
- var changed;
- if (this.cls) {
- changed = includes(this.cls, ' ') || toggled !== hasClass(el, this.cls);
- changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled);
- } else {
- changed = toggled === el.hidden;
- changed && (el.hidden = !toggled);
- }
-
- $$('[autofocus]', el).some(function (el) { return isVisible(el) ? el.focus() || true : el.blur(); });
-
- if (changed) {
- trigger(el, 'toggled', [toggled, this]);
- this.$update(el);
- }
- }
-
- }
-
- };
-
- function toggleHeight(ref) {
- var isToggled = ref.isToggled;
- var duration = ref.duration;
- var initProps = ref.initProps;
- var hideProps = ref.hideProps;
- var transition = ref.transition;
- var _toggle = ref._toggle;
-
- return function (el, show) {
-
- var inProgress = Transition.inProgress(el);
- var inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0;
- var currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0;
-
- Transition.cancel(el);
-
- if (!isToggled(el)) {
- _toggle(el, true);
- }
-
- height(el, '');
-
- // Update child components first
- fastdom.flush();
-
- var endHeight = height(el) + (inProgress ? 0 : inner);
- height(el, currentHeight);
-
- return (show
- ? Transition.start(el, assign({}, initProps, {overflow: 'hidden', height: endHeight}), Math.round(duration * (1 - currentHeight / endHeight)), transition)
- : Transition.start(el, hideProps, Math.round(duration * (currentHeight / endHeight)), transition).then(function () { return _toggle(el, false); })
- ).then(function () { return css(el, initProps); });
-
- };
- }
-
- function toggleAnimation(cmp) {
- return function (el, show) {
-
- Animation.cancel(el);
-
- var animation = cmp.animation;
- var duration = cmp.duration;
- var _toggle = cmp._toggle;
-
- if (show) {
- _toggle(el, true);
- return Animation.in(el, animation[0], duration, cmp.origin);
- }
-
- return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then(function () { return _toggle(el, false); });
- };
- }
-
- var Accordion = {
-
- mixins: [Class, Togglable],
-
- props: {
- targets: String,
- active: null,
- collapsible: Boolean,
- multiple: Boolean,
- toggle: String,
- content: String,
- transition: String,
- offset: Number
- },
-
- data: {
- targets: '> *',
- active: false,
- animation: [true],
- collapsible: true,
- multiple: false,
- clsOpen: 'uk-open',
- toggle: '> .uk-accordion-title',
- content: '> .uk-accordion-content',
- transition: 'ease',
- offset: 0
- },
-
- computed: {
-
- items: {
-
- get: function(ref, $el) {
- var targets = ref.targets;
-
- return $$(targets, $el);
- },
-
- watch: function(items, prev) {
- var this$1 = this;
-
-
- items.forEach(function (el) { return hide($(this$1.content, el), !hasClass(el, this$1.clsOpen)); });
-
- if (prev || hasClass(items, this.clsOpen)) {
- return;
- }
-
- var active = this.active !== false && items[Number(this.active)]
- || !this.collapsible && items[0];
-
- if (active) {
- this.toggle(active, false);
- }
-
- },
-
- immediate: true
-
- },
-
- toggles: function(ref) {
- var toggle = ref.toggle;
-
- return this.items.map(function (item) { return $(toggle, item); });
- }
-
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return ((this.targets) + " " + (this.$props.toggle));
- },
-
- handler: function(e) {
- e.preventDefault();
- this.toggle(index(this.toggles, e.current));
- }
-
- }
-
- ],
-
- methods: {
-
- toggle: function(item, animate) {
- var this$1 = this;
-
-
- var items = [this.items[getIndex(item, this.items)]];
- var activeItems = filter$1(this.items, ("." + (this.clsOpen)));
-
- if (!this.multiple && !includes(activeItems, items[0])) {
- items = items.concat(activeItems);
- }
-
- if (!this.collapsible && activeItems.length < 2 && !filter$1(items, (":not(." + (this.clsOpen) + ")")).length) {
- return;
- }
-
- items.forEach(function (el) { return this$1.toggleElement(el, !hasClass(el, this$1.clsOpen), function (el, show) {
-
- toggleClass(el, this$1.clsOpen, show);
- attr($(this$1.$props.toggle, el), 'aria-expanded', show);
-
- var content = $(("" + (el._wrapper ? '> * ' : '') + (this$1.content)), el);
-
- if (animate === false || !this$1.hasTransition) {
- hide(content, !show);
- return;
- }
-
- if (!el._wrapper) {
- el._wrapper = wrapAll(content, (""));
- }
-
- hide(content, false);
- return toggleHeight(this$1)(el._wrapper, show).then(function () {
- hide(content, !show);
- delete el._wrapper;
- unwrap(content);
-
- if (show) {
- var toggle = $(this$1.$props.toggle, el);
- if (!isInView(toggle)) {
- scrollIntoView(toggle, {offset: this$1.offset});
- }
- }
- });
- }); });
- }
-
- }
-
- };
-
- function hide(el, hide) {
- el && (el.hidden = hide);
- }
-
- var alert = {
-
- mixins: [Class, Togglable],
-
- args: 'animation',
-
- props: {
- close: String
- },
-
- data: {
- animation: [true],
- selClose: '.uk-alert-close',
- duration: 150,
- hideProps: assign({opacity: 0}, Togglable.data.hideProps)
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return this.selClose;
- },
-
- handler: function(e) {
- e.preventDefault();
- this.close();
- }
-
- }
-
- ],
-
- methods: {
-
- close: function() {
- var this$1 = this;
-
- this.toggleElement(this.$el).then(function () { return this$1.$destroy(true); });
- }
-
- }
-
- };
-
- var Video = {
-
- args: 'autoplay',
-
- props: {
- automute: Boolean,
- autoplay: Boolean
- },
-
- data: {
- automute: false,
- autoplay: true
- },
-
- computed: {
-
- inView: function(ref) {
- var autoplay = ref.autoplay;
-
- return autoplay === 'inview';
- }
-
- },
-
- connected: function() {
-
- if (this.inView && !hasAttr(this.$el, 'preload')) {
- this.$el.preload = 'none';
- }
-
- if (this.automute) {
- mute(this.$el);
- }
-
- },
-
- update: {
-
- read: function() {
- return {
- visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden',
- inView: this.inView && isInView(this.$el)
- };
- },
-
- write: function(ref) {
- var visible = ref.visible;
- var inView = ref.inView;
-
-
- if (!visible || this.inView && !inView) {
- pause(this.$el);
- } else if (this.autoplay === true || this.inView && inView) {
- play(this.$el);
- }
-
- },
-
- events: ['resize', 'scroll']
-
- }
-
- };
-
- var cover = {
-
- mixins: [Class, Video],
-
- props: {
- width: Number,
- height: Number
- },
-
- data: {
- automute: true
- },
-
- update: {
-
- read: function() {
-
- var el = this.$el;
- var ref = getPositionedParent(el) || parent(el);
- var height = ref.offsetHeight;
- var width = ref.offsetWidth;
- var dim = Dimensions.cover(
- {
- width: this.width || el.naturalWidth || el.videoWidth || el.clientWidth,
- height: this.height || el.naturalHeight || el.videoHeight || el.clientHeight
- },
- {
- width: width + (width % 2 ? 1 : 0),
- height: height + (height % 2 ? 1 : 0)
- }
- );
-
- if (!dim.width || !dim.height) {
- return false;
- }
-
- return dim;
- },
-
- write: function(ref) {
- var height = ref.height;
- var width = ref.width;
-
- css(this.$el, {height: height, width: width});
- },
-
- events: ['resize']
-
- }
-
- };
-
- function getPositionedParent(el) {
- while ((el = parent(el))) {
- if (css(el, 'position') !== 'static') {
- return el;
- }
- }
- }
-
- var Container = {
-
- props: {
- container: Boolean
- },
-
- data: {
- container: true
- },
-
- computed: {
-
- container: function(ref) {
- var container = ref.container;
-
- return container === true && this.$container || container && $(container);
- }
-
- }
-
- };
-
- var Position = {
-
- props: {
- pos: String,
- offset: null,
- flip: Boolean,
- clsPos: String
- },
-
- data: {
- pos: ("bottom-" + (!isRtl ? 'left' : 'right')),
- flip: true,
- offset: false,
- clsPos: ''
- },
-
- computed: {
-
- pos: function(ref) {
- var pos = ref.pos;
-
- return (pos + (!includes(pos, '-') ? '-center' : '')).split('-');
- },
-
- dir: function() {
- return this.pos[0];
- },
-
- align: function() {
- return this.pos[1];
- }
-
- },
-
- methods: {
-
- positionAt: function(element, target, boundary) {
-
- removeClasses(element, ((this.clsPos) + "-(top|bottom|left|right)(-[a-z]+)?"));
-
- var ref = this;
- var offset$1 = ref.offset;
- var axis = this.getAxis();
-
- if (!isNumeric(offset$1)) {
- var node = $(offset$1);
- offset$1 = node
- ? offset(node)[axis === 'x' ? 'left' : 'top'] - offset(target)[axis === 'x' ? 'right' : 'bottom']
- : 0;
- }
-
- var ref$1 = positionAt(
- element,
- target,
- axis === 'x' ? ((flipPosition(this.dir)) + " " + (this.align)) : ((this.align) + " " + (flipPosition(this.dir))),
- axis === 'x' ? ((this.dir) + " " + (this.align)) : ((this.align) + " " + (this.dir)),
- axis === 'x' ? ("" + (this.dir === 'left' ? -offset$1 : offset$1)) : (" " + (this.dir === 'top' ? -offset$1 : offset$1)),
- null,
- this.flip,
- boundary
- ).target;
- var x = ref$1.x;
- var y = ref$1.y;
-
- this.dir = axis === 'x' ? x : y;
- this.align = axis === 'x' ? y : x;
-
- toggleClass(element, ((this.clsPos) + "-" + (this.dir) + "-" + (this.align)), this.offset === false);
-
- },
-
- getAxis: function() {
- return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';
- }
-
- }
-
- };
-
- var active$1;
-
- var drop = {
-
- mixins: [Container, Position, Togglable],
-
- args: 'pos',
-
- props: {
- mode: 'list',
- toggle: Boolean,
- boundary: Boolean,
- boundaryAlign: Boolean,
- delayShow: Number,
- delayHide: Number,
- clsDrop: String
- },
-
- data: {
- mode: ['click', 'hover'],
- toggle: '- *',
- boundary: true,
- boundaryAlign: false,
- delayShow: 0,
- delayHide: 800,
- clsDrop: false,
- animation: ['uk-animation-fade'],
- cls: 'uk-open',
- container: false
- },
-
- computed: {
-
- boundary: function(ref, $el) {
- var boundary = ref.boundary;
-
- return boundary === true ? window : query(boundary, $el);
- },
-
- clsDrop: function(ref) {
- var clsDrop = ref.clsDrop;
-
- return clsDrop || ("uk-" + (this.$options.name));
- },
-
- clsPos: function() {
- return this.clsDrop;
- }
-
- },
-
- created: function() {
- this.tracker = new MouseTracker();
- },
-
- connected: function() {
-
- addClass(this.$el, this.clsDrop);
-
- if (this.toggle && !this.target) {
- this.target = this.$create('toggle', query(this.toggle, this.$el), {
- target: this.$el,
- mode: this.mode
- });
- }
-
- },
-
- disconnected: function() {
- if (this.isActive()) {
- active$1 = null;
- }
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return ("." + (this.clsDrop) + "-close");
- },
-
- handler: function(e) {
- e.preventDefault();
- this.hide(false);
- }
-
- },
-
- {
-
- name: 'click',
-
- delegate: function() {
- return 'a[href^="#"]';
- },
-
- handler: function(ref) {
- var defaultPrevented = ref.defaultPrevented;
- var hash = ref.current.hash;
-
- if (!defaultPrevented && hash && !within(hash, this.$el)) {
- this.hide(false);
- }
- }
-
- },
-
- {
-
- name: 'beforescroll',
-
- handler: function() {
- this.hide(false);
- }
-
- },
-
- {
-
- name: 'toggle',
-
- self: true,
-
- handler: function(e, toggle) {
-
- e.preventDefault();
-
- if (this.isToggled()) {
- this.hide(false);
- } else {
- this.show(toggle.$el, false);
- }
- }
-
- },
-
- {
-
- name: 'toggleshow',
-
- self: true,
-
- handler: function(e, toggle) {
- e.preventDefault();
- this.show(toggle.$el);
- }
-
- },
-
- {
-
- name: 'togglehide',
-
- self: true,
-
- handler: function(e) {
- e.preventDefault();
- this.hide();
- }
-
- },
-
- {
-
- name: (pointerEnter + " focusin"),
-
- filter: function() {
- return includes(this.mode, 'hover');
- },
-
- handler: function(e) {
- if (!isTouch(e)) {
- this.clearTimers();
- }
- }
-
- },
-
- {
-
- name: (pointerLeave + " focusout"),
-
- filter: function() {
- return includes(this.mode, 'hover');
- },
-
- handler: function(e) {
- if (!isTouch(e) && e.relatedTarget) {
- this.hide();
- }
- }
-
- },
-
- {
-
- name: 'toggled',
-
- self: true,
-
- handler: function(e, toggled) {
-
- if (!toggled) {
- return;
- }
-
- this.clearTimers();
- this.position();
- }
-
- },
-
- {
-
- name: 'show',
-
- self: true,
-
- handler: function() {
- var this$1 = this;
-
-
- active$1 = this;
-
- this.tracker.init();
-
- once(this.$el, 'hide', on(document, pointerDown, function (ref) {
- var target = ref.target;
-
- return !within(target, this$1.$el) && once(document, (pointerUp + " " + pointerCancel + " scroll"), function (ref) {
- var defaultPrevented = ref.defaultPrevented;
- var type = ref.type;
- var newTarget = ref.target;
-
- if (!defaultPrevented && type === pointerUp && target === newTarget && !(this$1.target && within(target, this$1.target))) {
- this$1.hide(false);
- }
- }, true);
- }
- ), {self: true});
-
- once(this.$el, 'hide', on(document, 'keydown', function (e) {
- if (e.keyCode === 27) {
- this$1.hide(false);
- }
- }), {self: true});
-
- }
-
- },
-
- {
-
- name: 'beforehide',
-
- self: true,
-
- handler: function() {
- this.clearTimers();
- }
-
- },
-
- {
-
- name: 'hide',
-
- handler: function(ref) {
- var target = ref.target;
-
-
- if (this.$el !== target) {
- active$1 = active$1 === null && within(target, this.$el) && this.isToggled() ? this : active$1;
- return;
- }
-
- active$1 = this.isActive() ? null : active$1;
- this.tracker.cancel();
- }
-
- }
-
- ],
-
- update: {
-
- write: function() {
-
- if (this.isToggled() && !hasClass(this.$el, this.clsEnter)) {
- this.position();
- }
-
- },
-
- events: ['resize']
-
- },
-
- methods: {
-
- show: function(target, delay) {
- var this$1 = this;
- if ( target === void 0 ) target = this.target;
- if ( delay === void 0 ) delay = true;
-
-
- if (this.isToggled() && target && this.target && target !== this.target) {
- this.hide(false);
- }
-
- this.target = target;
-
- this.clearTimers();
-
- if (this.isActive()) {
- return;
- }
-
- if (active$1) {
-
- if (delay && active$1.isDelaying) {
- this.showTimer = setTimeout(this.show, 10);
- return;
- }
-
- var prev;
- while (active$1 && prev !== active$1 && !within(this.$el, active$1.$el)) {
- prev = active$1;
- active$1.hide(false);
- }
-
- }
-
- if (this.container && parent(this.$el) !== this.container) {
- append(this.container, this.$el);
- }
-
- this.showTimer = setTimeout(function () { return this$1.toggleElement(this$1.$el, true); }, delay && this.delayShow || 0);
-
- },
-
- hide: function(delay) {
- var this$1 = this;
- if ( delay === void 0 ) delay = true;
-
-
- var hide = function () { return this$1.toggleElement(this$1.$el, false, false); };
-
- this.clearTimers();
-
- this.isDelaying = getPositionedElements(this.$el).some(function (el) { return this$1.tracker.movesTo(el); });
-
- if (delay && this.isDelaying) {
- this.hideTimer = setTimeout(this.hide, 50);
- } else if (delay && this.delayHide) {
- this.hideTimer = setTimeout(hide, this.delayHide);
- } else {
- hide();
- }
- },
-
- clearTimers: function() {
- clearTimeout(this.showTimer);
- clearTimeout(this.hideTimer);
- this.showTimer = null;
- this.hideTimer = null;
- this.isDelaying = false;
- },
-
- isActive: function() {
- return active$1 === this;
- },
-
- position: function() {
-
- removeClass(this.$el, ((this.clsDrop) + "-stack"));
- toggleClass(this.$el, ((this.clsDrop) + "-boundary"), this.boundaryAlign);
-
- var boundary = offset(this.boundary);
- var alignTo = this.boundaryAlign ? boundary : offset(this.target);
-
- if (this.align === 'justify') {
- var prop = this.getAxis() === 'y' ? 'width' : 'height';
- css(this.$el, prop, alignTo[prop]);
- } else if (this.boundary && this.$el.offsetWidth > Math.max(boundary.right - alignTo.left, alignTo.right - boundary.left)) {
- addClass(this.$el, ((this.clsDrop) + "-stack"));
- }
-
- this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.target, this.boundary);
-
- }
-
- }
-
- };
-
- function getPositionedElements(el) {
- var result = [];
- apply$1(el, function (el) { return css(el, 'position') !== 'static' && result.push(el); });
- return result;
- }
-
- var formCustom = {
-
- mixins: [Class],
-
- args: 'target',
-
- props: {
- target: Boolean
- },
-
- data: {
- target: false
- },
-
- computed: {
-
- input: function(_, $el) {
- return $(selInput, $el);
- },
-
- state: function() {
- return this.input.nextElementSibling;
- },
-
- target: function(ref, $el) {
- var target = ref.target;
-
- return target && (target === true
- && parent(this.input) === $el
- && this.input.nextElementSibling
- || query(target, $el));
- }
-
- },
-
- update: function() {
-
- var ref = this;
- var target = ref.target;
- var input = ref.input;
-
- if (!target) {
- return;
- }
-
- var option;
- var prop = isInput(target) ? 'value' : 'textContent';
- var prev = target[prop];
- var value = input.files && input.files[0]
- ? input.files[0].name
- : matches(input, 'select') && (option = $$('option', input).filter(function (el) { return el.selected; })[0]) // eslint-disable-line prefer-destructuring
- ? option.textContent
- : input.value;
-
- if (prev !== value) {
- target[prop] = value;
- }
-
- },
-
- events: [
-
- {
- name: 'change',
-
- handler: function() {
- this.$update();
- }
- },
-
- {
- name: 'reset',
-
- el: function() {
- return closest(this.$el, 'form');
- },
-
- handler: function() {
- this.$update();
- }
- }
-
- ]
-
- };
-
- // Deprecated
- var gif = {
-
- update: {
-
- read: function(data) {
-
- var inview = isInView(this.$el);
-
- if (!inview || data.isInView === inview) {
- return false;
- }
-
- data.isInView = inview;
- },
-
- write: function() {
- this.$el.src = '' + this.$el.src; // force self-assign
- },
-
- events: ['scroll', 'resize']
- }
-
- };
-
- var Margin = {
-
- props: {
- margin: String,
- firstColumn: Boolean
- },
-
- data: {
- margin: 'uk-margin-small-top',
- firstColumn: 'uk-first-column'
- },
-
- update: {
-
- read: function() {
-
- var rows = getRows(this.$el.children);
-
- return {
- rows: rows,
- columns: getColumns(rows)
- };
- },
-
- write: function(ref) {
- var columns = ref.columns;
- var rows = ref.rows;
-
- for (var i = 0; i < rows.length; i++) {
- for (var j = 0; j < rows[i].length; j++) {
- toggleClass(rows[i][j], this.margin, i !== 0);
- toggleClass(rows[i][j], this.firstColumn, !!~columns[0].indexOf(rows[i][j]));
- }
- }
- },
-
- events: ['resize']
-
- }
-
- };
-
- function getRows(items) {
- return sortBy(items, 'top', 'bottom');
- }
-
- function getColumns(rows) {
-
- var columns = [];
-
- for (var i = 0; i < rows.length; i++) {
- var sorted = sortBy(rows[i], 'left', 'right');
- for (var j = 0; j < sorted.length; j++) {
- columns[j] = !columns[j] ? sorted[j] : columns[j].concat(sorted[j]);
- }
- }
-
- return isRtl
- ? columns.reverse()
- : columns;
- }
-
- function sortBy(items, startProp, endProp) {
-
- var sorted = [[]];
-
- for (var i = 0; i < items.length; i++) {
-
- var el = items[i];
-
- if (!isVisible(el)) {
- continue;
- }
-
- var dim = getOffset(el);
-
- for (var j = sorted.length - 1; j >= 0; j--) {
-
- var current = sorted[j];
-
- if (!current[0]) {
- current.push(el);
- break;
- }
-
- var startDim = (void 0);
- if (current[0].offsetParent === el.offsetParent) {
- startDim = getOffset(current[0]);
- } else {
- dim = getOffset(el, true);
- startDim = getOffset(current[0], true);
- }
-
- if (dim[startProp] >= startDim[endProp] - 1 && dim[startProp] !== startDim[startProp]) {
- sorted.push([el]);
- break;
- }
-
- if (dim[endProp] - 1 > startDim[startProp] || dim[startProp] === startDim[startProp]) {
- current.push(el);
- break;
- }
-
- if (j === 0) {
- sorted.unshift([el]);
- break;
- }
-
- }
-
- }
-
- return sorted;
- }
-
- function getOffset(element, offset) {
- var assign;
-
- if ( offset === void 0 ) offset = false;
-
- var offsetTop = element.offsetTop;
- var offsetLeft = element.offsetLeft;
- var offsetHeight = element.offsetHeight;
- var offsetWidth = element.offsetWidth;
-
- if (offset) {
- (assign = offsetPosition(element), offsetTop = assign[0], offsetLeft = assign[1]);
- }
-
- return {
- top: offsetTop,
- left: offsetLeft,
- bottom: offsetTop + offsetHeight,
- right: offsetLeft + offsetWidth
- };
- }
-
- var grid = {
-
- extends: Margin,
-
- mixins: [Class],
-
- name: 'grid',
-
- props: {
- masonry: Boolean,
- parallax: Number
- },
-
- data: {
- margin: 'uk-grid-margin',
- clsStack: 'uk-grid-stack',
- masonry: false,
- parallax: 0
- },
-
- connected: function() {
- this.masonry && addClass(this.$el, 'uk-flex-top uk-flex-wrap-top');
- },
-
- update: [
-
- {
-
- write: function(ref) {
- var columns = ref.columns;
-
- toggleClass(this.$el, this.clsStack, columns.length < 2);
- },
-
- events: ['resize']
-
- },
-
- {
-
- read: function(data) {
-
- var columns = data.columns;
- var rows = data.rows;
-
- // Filter component makes elements positioned absolute
- if (!columns.length || !this.masonry && !this.parallax || positionedAbsolute(this.$el)) {
- data.translates = false;
- return false;
- }
-
- var translates = false;
-
- var nodes = children(this.$el);
- var columnHeights = getColumnHeights(columns);
- var margin = getMarginTop(nodes, this.margin) * (rows.length - 1);
- var elHeight = Math.max.apply(Math, columnHeights) + margin;
-
- if (this.masonry) {
- columns = columns.map(function (column) { return sortBy$1(column, 'offsetTop'); });
- translates = getTranslates(rows, columns);
- }
-
- var padding = Math.abs(this.parallax);
- if (padding) {
- padding = columnHeights.reduce(function (newPadding, hgt, i) { return Math.max(newPadding, hgt + margin + (i % 2 ? padding : padding / 8) - elHeight); }
- , 0);
- }
-
- return {padding: padding, columns: columns, translates: translates, height: translates ? elHeight : ''};
-
- },
-
- write: function(ref) {
- var height = ref.height;
- var padding = ref.padding;
-
-
- css(this.$el, 'paddingBottom', padding || '');
- height !== false && css(this.$el, 'height', height);
-
- },
-
- events: ['resize']
-
- },
-
- {
-
- read: function(ref) {
- var height$1 = ref.height;
-
-
- if (positionedAbsolute(this.$el)) {
- return false;
- }
-
- return {
- scrolled: this.parallax
- ? scrolledOver(this.$el, height$1 ? height$1 - height(this.$el) : 0) * Math.abs(this.parallax)
- : false
- };
- },
-
- write: function(ref) {
- var columns = ref.columns;
- var scrolled = ref.scrolled;
- var translates = ref.translates;
-
-
- if (scrolled === false && !translates) {
- return;
- }
-
- columns.forEach(function (column, i) { return column.forEach(function (el, j) { return css(el, 'transform', !scrolled && !translates ? '' : ("translateY(" + ((translates && -translates[i][j]) + (scrolled ? i % 2 ? scrolled : scrolled / 8 : 0)) + "px)")); }
- ); }
- );
-
- },
-
- events: ['scroll', 'resize']
-
- }
-
- ]
-
- };
-
- function positionedAbsolute(el) {
- return children(el).some(function (el) { return css(el, 'position') === 'absolute'; });
- }
-
- function getTranslates(rows, columns) {
-
- var rowHeights = rows.map(function (row) { return Math.max.apply(Math, row.map(function (el) { return el.offsetHeight; })); }
- );
-
- return columns.map(function (elements) {
- var prev = 0;
- return elements.map(function (element, row) { return prev += row
- ? rowHeights[row - 1] - elements[row - 1].offsetHeight
- : 0; }
- );
- });
- }
-
- function getMarginTop(nodes, cls) {
-
- var ref = nodes.filter(function (el) { return hasClass(el, cls); });
- var node = ref[0];
-
- return toFloat(node
- ? css(node, 'marginTop')
- : css(nodes[0], 'paddingLeft'));
- }
-
- function getColumnHeights(columns) {
- return columns.map(function (column) { return column.reduce(function (sum, el) { return sum + el.offsetHeight; }, 0); }
- );
- }
-
- // IE 11 fix (min-height on a flex container won't apply to its flex items)
- var FlexBug = isIE ? {
-
- props: {
- selMinHeight: String
- },
-
- data: {
- selMinHeight: false,
- forceHeight: false
- },
-
- computed: {
-
- elements: function(ref, $el) {
- var selMinHeight = ref.selMinHeight;
-
- return selMinHeight ? $$(selMinHeight, $el) : [$el];
- }
-
- },
-
- update: [
-
- {
-
- read: function() {
- css(this.elements, 'height', '');
- },
-
- order: -5,
-
- events: ['resize']
-
- },
-
- {
-
- write: function() {
- var this$1 = this;
-
- this.elements.forEach(function (el) {
- var height = toFloat(css(el, 'minHeight'));
- if (height && (this$1.forceHeight || Math.round(height + boxModelAdjust(el, 'height', 'content-box')) >= el.offsetHeight)) {
- css(el, 'height', height);
- }
- });
- },
-
- order: 5,
-
- events: ['resize']
-
- }
-
- ]
-
- } : {};
-
- var heightMatch = {
-
- mixins: [FlexBug],
-
- args: 'target',
-
- props: {
- target: String,
- row: Boolean
- },
-
- data: {
- target: '> *',
- row: true,
- forceHeight: true
- },
-
- computed: {
-
- elements: function(ref, $el) {
- var target = ref.target;
-
- return $$(target, $el);
- }
-
- },
-
- update: {
-
- read: function() {
- return {
- rows: (this.row ? getRows(this.elements) : [this.elements]).map(match$1)
- };
- },
-
- write: function(ref) {
- var rows = ref.rows;
-
- rows.forEach(function (ref) {
- var heights = ref.heights;
- var elements = ref.elements;
-
- return elements.forEach(function (el, i) { return css(el, 'minHeight', heights[i]); }
- );
- }
- );
- },
-
- events: ['resize']
-
- }
-
- };
-
- function match$1(elements) {
-
- if (elements.length < 2) {
- return {heights: [''], elements: elements};
- }
-
- var heights = elements.map(getHeight);
- var max = Math.max.apply(Math, heights);
- var hasMinHeight = elements.some(function (el) { return el.style.minHeight; });
- var hasShrunk = elements.some(function (el, i) { return !el.style.minHeight && heights[i] < max; });
-
- if (hasMinHeight && hasShrunk) {
- css(elements, 'minHeight', '');
- heights = elements.map(getHeight);
- max = Math.max.apply(Math, heights);
- }
-
- heights = elements.map(function (el, i) { return heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max; }
- );
-
- return {heights: heights, elements: elements};
- }
-
- function getHeight(element) {
-
- var style = false;
- if (!isVisible(element)) {
- style = element.style.display;
- css(element, 'display', 'block', 'important');
- }
-
- var height = dimensions(element).height - boxModelAdjust(element, 'height', 'content-box');
-
- if (style !== false) {
- css(element, 'display', style);
- }
-
- return height;
- }
-
- var heightViewport = {
-
- mixins: [FlexBug],
-
- props: {
- expand: Boolean,
- offsetTop: Boolean,
- offsetBottom: Boolean,
- minHeight: Number
- },
-
- data: {
- expand: false,
- offsetTop: false,
- offsetBottom: false,
- minHeight: 0
- },
-
- update: {
-
- read: function(ref) {
- var prev = ref.minHeight;
-
-
- if (!isVisible(this.$el)) {
- return false;
- }
-
- var minHeight = '';
- var box = boxModelAdjust(this.$el, 'height', 'content-box');
-
- if (this.expand) {
-
- minHeight = height(window) - (dimensions(document.documentElement).height - dimensions(this.$el).height) - box || '';
-
- } else {
-
- // on mobile devices (iOS and Android) window.innerHeight !== 100vh
- minHeight = 'calc(100vh';
-
- if (this.offsetTop) {
-
- var ref$1 = offset(this.$el);
- var top = ref$1.top;
- minHeight += top > 0 && top < height(window) / 2 ? (" - " + top + "px") : '';
-
- }
-
- if (this.offsetBottom === true) {
-
- minHeight += " - " + (dimensions(this.$el.nextElementSibling).height) + "px";
-
- } else if (isNumeric(this.offsetBottom)) {
-
- minHeight += " - " + (this.offsetBottom) + "vh";
-
- } else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) {
-
- minHeight += " - " + (toFloat(this.offsetBottom)) + "px";
-
- } else if (isString(this.offsetBottom)) {
-
- minHeight += " - " + (dimensions(query(this.offsetBottom, this.$el)).height) + "px";
-
- }
-
- minHeight += (box ? (" - " + box + "px") : '') + ")";
-
- }
-
- return {minHeight: minHeight, prev: prev};
- },
-
- write: function(ref) {
- var minHeight = ref.minHeight;
- var prev = ref.prev;
-
-
- css(this.$el, {minHeight: minHeight});
-
- if (minHeight !== prev) {
- this.$update(this.$el, 'resize');
- }
-
- if (this.minHeight && toFloat(css(this.$el, 'minHeight')) < this.minHeight) {
- css(this.$el, 'minHeight', this.minHeight);
- }
-
- },
-
- events: ['resize']
-
- }
-
- };
-
- var SVG = {
-
- args: 'src',
-
- props: {
- id: Boolean,
- icon: String,
- src: String,
- style: String,
- width: Number,
- height: Number,
- ratio: Number,
- class: String,
- strokeAnimation: Boolean,
- focusable: Boolean, // IE 11
- attributes: 'list'
- },
-
- data: {
- ratio: 1,
- include: ['style', 'class', 'focusable'],
- class: '',
- strokeAnimation: false
- },
-
- beforeConnect: function() {
- this.class += ' uk-svg';
- },
-
- connected: function() {
- var this$1 = this;
- var assign;
-
-
- if (!this.icon && includes(this.src, '#')) {
- (assign = this.src.split('#'), this.src = assign[0], this.icon = assign[1]);
- }
-
- this.svg = this.getSvg().then(function (el) {
-
- if (this$1._connected) {
-
- var svg = insertSVG(el, this$1.$el);
-
- if (this$1.svgEl && svg !== this$1.svgEl) {
- remove$1(this$1.svgEl);
- }
-
- this$1.applyAttributes(svg, el);
- this$1.$emit();
- return this$1.svgEl = svg;
- }
-
- }, noop);
-
- },
-
- disconnected: function() {
- var this$1 = this;
-
-
- this.svg.then(function (svg) {
- if (!this$1._connected) {
-
- if (isVoidElement(this$1.$el)) {
- this$1.$el.hidden = false;
- }
-
- remove$1(svg);
- this$1.svgEl = null;
- }
- });
-
- this.svg = null;
-
- },
-
- update: {
-
- read: function() {
- return !!(this.strokeAnimation && this.svgEl && isVisible(this.svgEl));
- },
-
- write: function() {
- applyAnimation(this.svgEl);
- },
-
- type: ['resize']
-
- },
-
- methods: {
-
- getSvg: function() {
- var this$1 = this;
-
- return loadSVG(this.src).then(function (svg) { return parseSVG(svg, this$1.icon) || Promise$1.reject('SVG not found.'); }
- );
- },
-
- applyAttributes: function(el, ref) {
- var this$1 = this;
-
-
- for (var prop in this.$options.props) {
- if (includes(this.include, prop) && (prop in this)) {
- attr(el, prop, this[prop]);
- }
- }
-
- for (var attribute in this.attributes) {
- var ref$1 = this.attributes[attribute].split(':', 2);
- var prop$1 = ref$1[0];
- var value = ref$1[1];
- attr(el, prop$1, value);
- }
-
- if (!this.id) {
- removeAttr(el, 'id');
- }
-
- var props = ['width', 'height'];
- var dimensions = props.map(function (prop) { return this$1[prop]; });
-
- if (!dimensions.some(function (val) { return val; })) {
- dimensions = props.map(function (prop) { return attr(ref, prop); });
- }
-
- var viewBox = attr(ref, 'viewBox');
- if (viewBox && !dimensions.some(function (val) { return val; })) {
- dimensions = viewBox.split(' ').slice(2);
- }
-
- dimensions.forEach(function (val, i) { return attr(el, props[i], toFloat(val) * this$1.ratio || null); }
- );
-
- }
-
- }
-
- };
-
- var loadSVG = memoize(function (src) { return new Promise$1(function (resolve, reject) {
-
- if (!src) {
- reject();
- return;
- }
-
- if (startsWith(src, 'data:')) {
- resolve(decodeURIComponent(src.split(',')[1]));
- } else {
-
- ajax(src).then(
- function (xhr) { return resolve(xhr.response); },
- function () { return reject('SVG not found.'); }
- );
-
- }
- }); }
- );
-
- function parseSVG(svg, icon) {
-
- if (icon && includes(svg, '
/g;
- var symbols = {};
-
- function parseSymbols(svg, icon) {
-
- if (!symbols[svg]) {
-
- symbols[svg] = {};
-
- symbolRe.lastIndex = 0;
-
- var match;
- while ((match = symbolRe.exec(svg))) {
- symbols[svg][match[3]] = "";
- }
-
- }
-
- return symbols[svg][icon];
- }
-
- function applyAnimation(el) {
-
- var length = getMaxPathLength(el);
-
- if (length) {
- el.style.setProperty('--uk-animation-stroke', length);
- }
-
- }
-
- function getMaxPathLength(el) {
- return Math.ceil(Math.max.apply(Math, [ 0 ].concat( $$('[stroke]', el).map(function (stroke) {
- try {
- return stroke.getTotalLength();
- } catch (e) {
- return 0;
- }
- }) )));
- }
-
- function insertSVG(el, root) {
-
- if (isVoidElement(root) || root.tagName === 'CANVAS') {
-
- root.hidden = true;
-
- var next = root.nextElementSibling;
- return equals(el, next)
- ? next
- : after(root, el);
-
- }
-
- var last = root.lastElementChild;
- return equals(el, last)
- ? last
- : append(root, el);
- }
-
- function equals(el, other) {
- return isSVG(el) && isSVG(other) && innerHTML(el) === innerHTML(other);
- }
-
- function isSVG(el) {
- return el && el.tagName === 'svg';
- }
-
- function innerHTML(el) {
- return (el.innerHTML || (new XMLSerializer()).serializeToString(el).replace(/(.*?)<\/svg>/g, '$1')).replace(/\s/g, '');
- }
-
- var closeIcon = " ";
-
- var closeLarge = " ";
-
- var marker = " ";
-
- var navbarToggleIcon = " ";
-
- var overlayIcon = " ";
-
- var paginationNext = " ";
-
- var paginationPrevious = " ";
-
- var searchIcon = " ";
-
- var searchLarge = " ";
-
- var searchNavbar = " ";
-
- var slidenavNext = " ";
-
- var slidenavNextLarge = " ";
-
- var slidenavPrevious = " ";
-
- var slidenavPreviousLarge = " ";
-
- var spinner = " ";
-
- var totop = " ";
-
- var icons = {
- spinner: spinner,
- totop: totop,
- marker: marker,
- 'close-icon': closeIcon,
- 'close-large': closeLarge,
- 'navbar-toggle-icon': navbarToggleIcon,
- 'overlay-icon': overlayIcon,
- 'pagination-next': paginationNext,
- 'pagination-previous': paginationPrevious,
- 'search-icon': searchIcon,
- 'search-large': searchLarge,
- 'search-navbar': searchNavbar,
- 'slidenav-next': slidenavNext,
- 'slidenav-next-large': slidenavNextLarge,
- 'slidenav-previous': slidenavPrevious,
- 'slidenav-previous-large': slidenavPreviousLarge
- };
-
- var Icon = {
-
- install: install$3,
-
- extends: SVG,
-
- args: 'icon',
-
- props: ['icon'],
-
- data: {
- include: ['focusable']
- },
-
- isIcon: true,
-
- beforeConnect: function() {
- addClass(this.$el, 'uk-icon');
- },
-
- methods: {
-
- getSvg: function() {
-
- var icon = getIcon(this.icon);
-
- if (!icon) {
- return Promise$1.reject('Icon not found.');
- }
-
- return Promise$1.resolve(icon);
- }
-
- }
-
- };
-
- var IconComponent = {
-
- args: false,
-
- extends: Icon,
-
- data: function (vm) { return ({
- icon: hyphenate(vm.constructor.options.name)
- }); },
-
- beforeConnect: function() {
- addClass(this.$el, this.$name);
- }
-
- };
-
- var Slidenav = {
-
- extends: IconComponent,
-
- beforeConnect: function() {
- addClass(this.$el, 'uk-slidenav');
- },
-
- computed: {
-
- icon: function(ref, $el) {
- var icon = ref.icon;
-
- return hasClass($el, 'uk-slidenav-large')
- ? (icon + "-large")
- : icon;
- }
-
- }
-
- };
-
- var Search = {
-
- extends: IconComponent,
-
- computed: {
-
- icon: function(ref, $el) {
- var icon = ref.icon;
-
- return hasClass($el, 'uk-search-icon') && parents($el, '.uk-search-large').length
- ? 'search-large'
- : parents($el, '.uk-search-navbar').length
- ? 'search-navbar'
- : icon;
- }
-
- }
-
- };
-
- var Close = {
-
- extends: IconComponent,
-
- computed: {
-
- icon: function() {
- return ("close-" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'));
- }
-
- }
-
- };
-
- var Spinner = {
-
- extends: IconComponent,
-
- connected: function() {
- var this$1 = this;
-
- this.svg.then(function (svg) { return svg && this$1.ratio !== 1 && css($('circle', svg), 'strokeWidth', 1 / this$1.ratio); });
- }
-
- };
-
- var parsed = {};
- function install$3(UIkit) {
- UIkit.icon.add = function (name, svg) {
- var obj;
-
-
- var added = isString(name) ? (( obj = {}, obj[name] = svg, obj )) : name;
- each(added, function (svg, name) {
- icons[name] = svg;
- delete parsed[name];
- });
-
- if (UIkit._initialized) {
- apply$1(document.body, function (el) { return each(UIkit.getComponents(el), function (cmp) {
- cmp.$options.isIcon && cmp.icon in added && cmp.$reset();
- }); }
- );
- }
- };
- }
-
- function getIcon(icon) {
-
- if (!icons[icon]) {
- return null;
- }
-
- if (!parsed[icon]) {
- parsed[icon] = $((icons[applyRtl(icon)] || icons[icon]).trim());
- }
-
- return parsed[icon].cloneNode(true);
- }
-
- function applyRtl(icon) {
- return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon;
- }
-
- var img = {
-
- args: 'dataSrc',
-
- props: {
- dataSrc: String,
- dataSrcset: Boolean,
- sizes: String,
- width: Number,
- height: Number,
- offsetTop: String,
- offsetLeft: String,
- target: String
- },
-
- data: {
- dataSrc: '',
- dataSrcset: false,
- sizes: false,
- width: false,
- height: false,
- offsetTop: '50vh',
- offsetLeft: '50vw',
- target: false
- },
-
- computed: {
-
- cacheKey: function(ref) {
- var dataSrc = ref.dataSrc;
-
- return ((this.$name) + "." + dataSrc);
- },
-
- width: function(ref) {
- var width = ref.width;
- var dataWidth = ref.dataWidth;
-
- return width || dataWidth;
- },
-
- height: function(ref) {
- var height = ref.height;
- var dataHeight = ref.dataHeight;
-
- return height || dataHeight;
- },
-
- sizes: function(ref) {
- var sizes = ref.sizes;
- var dataSizes = ref.dataSizes;
-
- return sizes || dataSizes;
- },
-
- isImg: function(_, $el) {
- return isImg($el);
- },
-
- target: {
-
- get: function(ref) {
- var target = ref.target;
-
- return [this.$el ].concat( queryAll(target, this.$el));
- },
-
- watch: function() {
- this.observe();
- }
-
- },
-
- offsetTop: function(ref) {
- var offsetTop = ref.offsetTop;
-
- return toPx(offsetTop, 'height');
- },
-
- offsetLeft: function(ref) {
- var offsetLeft = ref.offsetLeft;
-
- return toPx(offsetLeft, 'width');
- }
-
- },
-
- connected: function() {
-
- if (!window.IntersectionObserver) {
- setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
- return;
- }
-
- if (storage[this.cacheKey]) {
- setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
- } else if (this.isImg && this.width && this.height) {
- setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
- }
-
- this.observer = new IntersectionObserver(this.load, {
- rootMargin: ((this.offsetTop) + "px " + (this.offsetLeft) + "px")
- });
-
- requestAnimationFrame(this.observe);
-
- },
-
- disconnected: function() {
- this.observer && this.observer.disconnect();
- },
-
- update: {
-
- read: function(ref) {
- var this$1 = this;
- var image = ref.image;
-
-
- if (!this.observer) {
- return false;
- }
-
- if (!image && document.readyState === 'complete') {
- this.load(this.observer.takeRecords());
- }
-
- if (this.isImg) {
- return false;
- }
-
- image && image.then(function (img) { return img && img.currentSrc !== '' && setSrcAttrs(this$1.$el, currentSrc(img)); });
-
- },
-
- write: function(data) {
-
- if (this.dataSrcset && window.devicePixelRatio !== 1) {
-
- var bgSize = css(this.$el, 'backgroundSize');
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
- data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
- css(this.$el, 'backgroundSize', ((data.bgSize) + "px"));
- }
-
- }
-
- },
-
- events: ['resize']
-
- },
-
- methods: {
-
- load: function(entries) {
- var this$1 = this;
-
-
- // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
- if (!entries.some(function (entry) { return isUndefined(entry.isIntersecting) || entry.isIntersecting; })) {
- return;
- }
-
- this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {
-
- setSrcAttrs(this$1.$el, currentSrc(img), img.srcset, img.sizes);
- storage[this$1.cacheKey] = currentSrc(img);
- return img;
-
- }, function (e) { return trigger(this$1.$el, new e.constructor(e.type, e)); });
-
- this.observer.disconnect();
- },
-
- observe: function() {
- var this$1 = this;
-
- if (this._connected && !this._data.image) {
- this.target.forEach(function (el) { return this$1.observer.observe(el); });
- }
- }
-
- }
-
- };
-
- function setSrcAttrs(el, src, srcset, sizes) {
-
- if (isImg(el)) {
- sizes && (el.sizes = sizes);
- srcset && (el.srcset = srcset);
- src && (el.src = src);
- } else if (src) {
-
- var change = !includes(el.style.backgroundImage, src);
- if (change) {
- css(el, 'backgroundImage', ("url("https://github.com/+%20(escape(src)) + ")"));
- trigger(el, createEvent('load', false));
- }
-
- }
-
- }
-
- function getPlaceholderImage(width, height, sizes) {
- var assign;
-
-
- if (sizes) {
- ((assign = Dimensions.ratio({width: width, height: height}, 'width', toPx(sizesToPixel(sizes))), width = assign.width, height = assign.height));
- }
-
- return ("data:image/svg+xml;utf8, ");
- }
-
- var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
- function sizesToPixel(sizes) {
- var matches;
-
- sizesRe.lastIndex = 0;
-
- while ((matches = sizesRe.exec(sizes))) {
- if (!matches[1] || window.matchMedia(matches[1]).matches) {
- matches = evaluateSize(matches[2]);
- break;
- }
- }
-
- return matches || '100vw';
- }
-
- var sizeRe = /\d+(?:\w+|%)/g;
- var additionRe = /[+-]?(\d+)/g;
- function evaluateSize(size) {
- return startsWith(size, 'calc')
- ? size
- .slice(5, -1)
- .replace(sizeRe, function (size) { return toPx(size); })
- .replace(/ /g, '')
- .match(additionRe)
- .reduce(function (a, b) { return a + +b; }, 0)
- : size;
- }
-
- var srcSetRe = /\s+\d+w\s*(?:,|$)/g;
- function getSourceSize(srcset, sizes) {
- var srcSize = toPx(sizesToPixel(sizes));
- var descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort(function (a, b) { return a - b; });
-
- return descriptors.filter(function (size) { return size >= srcSize; })[0] || descriptors.pop() || '';
- }
-
- function isImg(el) {
- return el.tagName === 'IMG';
- }
-
- function currentSrc(el) {
- return el.currentSrc || el.src;
- }
-
- var key = '__test__';
- var storage;
-
- // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
- try {
- storage = window.sessionStorage || {};
- storage[key] = 1;
- delete storage[key];
- } catch (e) {
- storage = {};
- }
-
- var Media = {
-
- props: {
- media: Boolean
- },
-
- data: {
- media: false
- },
-
- computed: {
-
- matchMedia: function() {
- var media = toMedia(this.media);
- return !media || window.matchMedia(media).matches;
- }
-
- }
-
- };
-
- function toMedia(value) {
-
- if (isString(value)) {
- if (value[0] === '@') {
- var name = "breakpoint-" + (value.substr(1));
- value = toFloat(getCssVar(name));
- } else if (isNaN(value)) {
- return value;
- }
- }
-
- return value && !isNaN(value) ? ("(min-width: " + value + "px)") : false;
- }
-
- var leader = {
-
- mixins: [Class, Media],
-
- props: {
- fill: String
- },
-
- data: {
- fill: '',
- clsWrapper: 'uk-leader-fill',
- clsHide: 'uk-leader-hide',
- attrFill: 'data-fill'
- },
-
- computed: {
-
- fill: function(ref) {
- var fill = ref.fill;
-
- return fill || getCssVar('leader-fill-content');
- }
-
- },
-
- connected: function() {
- var assign;
-
- (assign = wrapInner(this.$el, ("")), this.wrapper = assign[0]);
- },
-
- disconnected: function() {
- unwrap(this.wrapper.childNodes);
- },
-
- update: {
-
- read: function(ref) {
- var changed = ref.changed;
- var width = ref.width;
-
-
- var prev = width;
-
- width = Math.floor(this.$el.offsetWidth / 2);
-
- return {
- width: width,
- fill: this.fill,
- changed: changed || prev !== width,
- hide: !this.matchMedia
- };
- },
-
- write: function(data) {
-
- toggleClass(this.wrapper, this.clsHide, data.hide);
-
- if (data.changed) {
- data.changed = false;
- attr(this.wrapper, this.attrFill, new Array(data.width).join(data.fill));
- }
-
- },
-
- events: ['resize']
-
- }
-
- };
-
- var active = [];
-
- var Modal = {
-
- mixins: [Class, Container, Togglable],
-
- props: {
- selPanel: String,
- selClose: String,
- escClose: Boolean,
- bgClose: Boolean,
- stack: Boolean
- },
-
- data: {
- cls: 'uk-open',
- escClose: true,
- bgClose: true,
- overlay: true,
- stack: false
- },
-
- computed: {
-
- panel: function(ref, $el) {
- var selPanel = ref.selPanel;
-
- return $(selPanel, $el);
- },
-
- transitionElement: function() {
- return this.panel;
- },
-
- bgClose: function(ref) {
- var bgClose = ref.bgClose;
-
- return bgClose && this.panel;
- }
-
- },
-
- beforeDisconnect: function() {
- if (this.isToggled()) {
- this.toggleElement(this.$el, false, false);
- }
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return this.selClose;
- },
-
- handler: function(e) {
- e.preventDefault();
- this.hide();
- }
-
- },
-
- {
-
- name: 'toggle',
-
- self: true,
-
- handler: function(e) {
-
- if (e.defaultPrevented) {
- return;
- }
-
- e.preventDefault();
-
- if (this.isToggled() === includes(active, this)) {
- this.toggle();
- }
- }
-
- },
-
- {
- name: 'beforeshow',
-
- self: true,
-
- handler: function(e) {
-
- if (includes(active, this)) {
- return false;
- }
-
- if (!this.stack && active.length) {
- Promise$1.all(active.map(function (modal) { return modal.hide(); })).then(this.show);
- e.preventDefault();
- } else {
- active.push(this);
- }
- }
-
- },
-
- {
-
- name: 'show',
-
- self: true,
-
- handler: function() {
- var this$1 = this;
-
-
- var docEl = document.documentElement;
-
- if (width(window) > docEl.clientWidth && this.overlay) {
- css(document.body, 'overflowY', 'scroll');
- }
-
- if (this.stack) {
- css(this.$el, 'zIndex', toFloat(css(this.$el, 'zIndex')) + active.length);
- }
-
- addClass(docEl, this.clsPage);
-
- if (this.bgClose) {
- once(this.$el, 'hide', on(document, pointerDown, function (ref) {
- var target = ref.target;
-
-
- if (last(active) !== this$1 || this$1.overlay && !within(target, this$1.$el) || within(target, this$1.panel)) {
- return;
- }
-
- once(document, (pointerUp + " " + pointerCancel + " scroll"), function (ref) {
- var defaultPrevented = ref.defaultPrevented;
- var type = ref.type;
- var newTarget = ref.target;
-
- if (!defaultPrevented && type === pointerUp && target === newTarget) {
- this$1.hide();
- }
- }, true);
-
- }), {self: true});
- }
-
- if (this.escClose) {
- once(this.$el, 'hide', on(document, 'keydown', function (e) {
- if (e.keyCode === 27 && last(active) === this$1) {
- this$1.hide();
- }
- }), {self: true});
- }
- }
-
- },
-
- {
-
- name: 'hidden',
-
- self: true,
-
- handler: function() {
- var this$1 = this;
-
-
- if (includes(active, this)) {
- active.splice(active.indexOf(this), 1);
- }
-
- if (!active.length) {
- css(document.body, 'overflowY', '');
- }
-
- css(this.$el, 'zIndex', '');
-
- if (!active.some(function (modal) { return modal.clsPage === this$1.clsPage; })) {
- removeClass(document.documentElement, this.clsPage);
- }
-
- }
-
- }
-
- ],
-
- methods: {
-
- toggle: function() {
- return this.isToggled() ? this.hide() : this.show();
- },
-
- show: function() {
- var this$1 = this;
-
- if (this.container && parent(this.$el) !== this.container) {
- append(this.container, this.$el);
- return new Promise$1(function (resolve) { return requestAnimationFrame(function () { return this$1.show().then(resolve); }
- ); }
- );
- }
-
- return this.toggleElement(this.$el, true, animate(this));
- },
-
- hide: function() {
- return this.toggleElement(this.$el, false, animate(this));
- }
-
- }
-
- };
-
- function animate(ref) {
- var transitionElement = ref.transitionElement;
- var _toggle = ref._toggle;
-
- return function (el, show) { return new Promise$1(function (resolve, reject) { return once(el, 'show hide', function () {
- el._reject && el._reject();
- el._reject = reject;
-
- _toggle(el, show);
-
- var off = once(transitionElement, 'transitionstart', function () {
- once(transitionElement, 'transitionend transitioncancel', resolve, {self: true});
- clearTimeout(timer);
- }, {self: true});
-
- var timer = setTimeout(function () {
- off();
- resolve();
- }, toMs(css(transitionElement, 'transitionDuration')));
-
- }); }
- ).then(function () { return delete el._reject; }); };
- }
-
- var modal = {
-
- install: install$2,
-
- mixins: [Modal],
-
- data: {
- clsPage: 'uk-modal-page',
- selPanel: '.uk-modal-dialog',
- selClose: '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full'
- },
-
- events: [
-
- {
- name: 'show',
-
- self: true,
-
- handler: function() {
-
- if (hasClass(this.panel, 'uk-margin-auto-vertical')) {
- addClass(this.$el, 'uk-flex');
- } else {
- css(this.$el, 'display', 'block');
- }
-
- height(this.$el); // force reflow
- }
- },
-
- {
- name: 'hidden',
-
- self: true,
-
- handler: function() {
-
- css(this.$el, 'display', '');
- removeClass(this.$el, 'uk-flex');
-
- }
- }
-
- ]
-
- };
-
- function install$2(ref) {
- var modal = ref.modal;
-
-
- modal.dialog = function (content, options) {
-
- var dialog = modal(
- (""),
- options
- );
-
- dialog.show();
-
- on(dialog.$el, 'hidden', function () { return Promise$1.resolve().then(function () { return dialog.$destroy(true); }
- ); }, {self: true}
- );
-
- return dialog;
- };
-
- modal.alert = function (message, options) {
- return openDialog(
- function (ref) {
- var labels = ref.labels;
-
- return ("" + (isString(message) ? message : html(message)) + "
");
- },
- options,
- function (deferred) { return deferred.resolve(); }
- );
- };
-
- modal.confirm = function (message, options) {
- return openDialog(
- function (ref) {
- var labels = ref.labels;
-
- return ("");
- },
- options,
- function (deferred) { return deferred.reject(); }
- );
- };
-
- modal.prompt = function (message, value, options) {
- return openDialog(
- function (ref) {
- var labels = ref.labels;
-
- return ("");
- },
- options,
- function (deferred) { return deferred.resolve(null); },
- function (dialog) { return $('input', dialog.$el).value; }
- );
- };
-
- modal.labels = {
- ok: 'Ok',
- cancel: 'Cancel'
- };
-
- function openDialog(tmpl, options, hideFn, submitFn) {
-
- options = assign({bgClose: false, escClose: true, labels: modal.labels}, options);
-
- var dialog = modal.dialog(tmpl(options), options);
- var deferred = new Deferred();
-
- var resolved = false;
-
- on(dialog.$el, 'submit', 'form', function (e) {
- e.preventDefault();
- deferred.resolve(submitFn && submitFn(dialog));
- resolved = true;
- dialog.hide();
- });
-
- on(dialog.$el, 'hide', function () { return !resolved && hideFn(deferred); });
-
- deferred.promise.dialog = dialog;
-
- return deferred.promise;
- }
-
- }
-
- var nav = {
-
- extends: Accordion,
-
- data: {
- targets: '> .uk-parent',
- toggle: '> a',
- content: '> ul'
- }
-
- };
-
- var navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle';
-
- var navbar = {
-
- mixins: [Class, Container, FlexBug],
-
- props: {
- dropdown: String,
- mode: 'list',
- align: String,
- offset: Number,
- boundary: Boolean,
- boundaryAlign: Boolean,
- clsDrop: String,
- delayShow: Number,
- delayHide: Number,
- dropbar: Boolean,
- dropbarMode: String,
- dropbarAnchor: Boolean,
- duration: Number
- },
-
- data: {
- dropdown: navItem,
- align: !isRtl ? 'left' : 'right',
- clsDrop: 'uk-navbar-dropdown',
- mode: undefined,
- offset: undefined,
- delayShow: undefined,
- delayHide: undefined,
- boundaryAlign: undefined,
- flip: 'x',
- boundary: true,
- dropbar: false,
- dropbarMode: 'slide',
- dropbarAnchor: false,
- duration: 200,
- forceHeight: true,
- selMinHeight: navItem,
- container: false
- },
-
- computed: {
-
- boundary: function(ref, $el) {
- var boundary = ref.boundary;
- var boundaryAlign = ref.boundaryAlign;
-
- return (boundary === true || boundaryAlign) ? $el : boundary;
- },
-
- dropbarAnchor: function(ref, $el) {
- var dropbarAnchor = ref.dropbarAnchor;
-
- return query(dropbarAnchor, $el);
- },
-
- pos: function(ref) {
- var align = ref.align;
-
- return ("bottom-" + align);
- },
-
- dropbar: {
-
- get: function(ref) {
- var dropbar = ref.dropbar;
-
-
- if (!dropbar) {
- return null;
- }
-
- dropbar = this._dropbar || query(dropbar, this.$el) || $('+ .uk-navbar-dropbar', this.$el);
-
- return dropbar ? dropbar : (this._dropbar = $('
'));
-
- },
-
- watch: function(dropbar) {
- addClass(dropbar, 'uk-navbar-dropbar');
- },
-
- immediate: true
-
- },
-
- dropContainer: function(_, $el) {
- return this.container || $el;
- },
-
- dropdowns: {
-
- get: function(ref, $el) {
- var clsDrop = ref.clsDrop;
-
- var dropdowns = $$(("." + clsDrop), $el);
-
- if (this.container !== $el) {
- $$(("." + clsDrop), this.container).forEach(function (el) { return !includes(dropdowns, el) && dropdowns.push(el); });
- }
-
- return dropdowns;
- },
-
- watch: function(dropdowns) {
- var this$1 = this;
-
- this.$create(
- 'drop',
- dropdowns.filter(function (el) { return !this$1.getDropdown(el); }),
- assign({}, this.$props, {boundary: this.boundary, pos: this.pos, offset: this.dropbar || this.offset})
- );
- },
-
- immediate: true
-
- }
-
- },
-
- disconnected: function() {
- this.dropbar && remove$1(this.dropbar);
- delete this._dropbar;
- },
-
- events: [
-
- {
- name: 'mouseover',
-
- delegate: function() {
- return this.dropdown;
- },
-
- handler: function(ref) {
- var current = ref.current;
-
- var active = this.getActive();
- if (active && active.target && !within(active.target, current) && !active.tracker.movesTo(active.$el)) {
- active.hide(false);
- }
- }
-
- },
-
- {
- name: 'mouseleave',
-
- el: function() {
- return this.dropbar;
- },
-
- handler: function() {
- var active = this.getActive();
-
- if (active && !this.dropdowns.some(function (el) { return matches(el, ':hover'); })) {
- active.hide();
- }
- }
- },
-
- {
- name: 'beforeshow',
-
- el: function() {
- return this.dropContainer;
- },
-
- filter: function() {
- return this.dropbar;
- },
-
- handler: function() {
-
- if (!parent(this.dropbar)) {
- after(this.dropbarAnchor || this.$el, this.dropbar);
- }
-
- }
- },
-
- {
- name: 'show',
-
- el: function() {
- return this.dropContainer;
- },
-
- filter: function() {
- return this.dropbar;
- },
-
- handler: function(_, ref) {
- var $el = ref.$el;
- var dir = ref.dir;
-
- if (!hasClass($el, this.clsDrop)) {
- return;
- }
-
- if (this.dropbarMode === 'slide') {
- addClass(this.dropbar, 'uk-navbar-dropbar-slide');
- }
-
- this.clsDrop && addClass($el, ((this.clsDrop) + "-dropbar"));
-
- if (dir === 'bottom') {
- this.transitionTo($el.offsetHeight + toFloat(css($el, 'marginTop')) + toFloat(css($el, 'marginBottom')), $el);
- }
- }
- },
-
- {
- name: 'beforehide',
-
- el: function() {
- return this.dropContainer;
- },
-
- filter: function() {
- return this.dropbar;
- },
-
- handler: function(e, ref) {
- var $el = ref.$el;
-
-
- var active = this.getActive();
-
- if (matches(this.dropbar, ':hover') && active && active.$el === $el) {
- e.preventDefault();
- }
- }
- },
-
- {
- name: 'hide',
-
- el: function() {
- return this.dropContainer;
- },
-
- filter: function() {
- return this.dropbar;
- },
-
- handler: function(_, ref) {
- var $el = ref.$el;
-
- if (!hasClass($el, this.clsDrop)) {
- return;
- }
-
- var active = this.getActive();
-
- if (!active || active && active.$el === $el) {
- this.transitionTo(0);
- }
- }
- }
-
- ],
-
- methods: {
-
- getActive: function() {
- return active$1 && includes(active$1.mode, 'hover') && within(active$1.target, this.$el) && active$1;
- },
-
- transitionTo: function(newHeight, el) {
- var this$1 = this;
-
-
- var ref = this;
- var dropbar = ref.dropbar;
- var oldHeight = isVisible(dropbar) ? height(dropbar) : 0;
-
- el = oldHeight < newHeight && el;
-
- css(el, 'clip', ("rect(0," + (el.offsetWidth) + "px," + oldHeight + "px,0)"));
-
- height(dropbar, oldHeight);
-
- Transition.cancel([el, dropbar]);
- return Promise$1.all([
- Transition.start(dropbar, {height: newHeight}, this.duration),
- Transition.start(el, {clip: ("rect(0," + (el.offsetWidth) + "px," + newHeight + "px,0)")}, this.duration)
- ])
- .catch(noop)
- .then(function () {
- css(el, {clip: ''});
- this$1.$update(dropbar);
- });
- },
-
- getDropdown: function(el) {
- return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');
- }
-
- }
-
- };
-
- var offcanvas = {
-
- mixins: [Modal],
-
- args: 'mode',
-
- props: {
- mode: String,
- flip: Boolean,
- overlay: Boolean
- },
-
- data: {
- mode: 'slide',
- flip: false,
- overlay: false,
- clsPage: 'uk-offcanvas-page',
- clsContainer: 'uk-offcanvas-container',
- selPanel: '.uk-offcanvas-bar',
- clsFlip: 'uk-offcanvas-flip',
- clsContainerAnimation: 'uk-offcanvas-container-animation',
- clsSidebarAnimation: 'uk-offcanvas-bar-animation',
- clsMode: 'uk-offcanvas',
- clsOverlay: 'uk-offcanvas-overlay',
- selClose: '.uk-offcanvas-close',
- container: false
- },
-
- computed: {
-
- clsFlip: function(ref) {
- var flip = ref.flip;
- var clsFlip = ref.clsFlip;
-
- return flip ? clsFlip : '';
- },
-
- clsOverlay: function(ref) {
- var overlay = ref.overlay;
- var clsOverlay = ref.clsOverlay;
-
- return overlay ? clsOverlay : '';
- },
-
- clsMode: function(ref) {
- var mode = ref.mode;
- var clsMode = ref.clsMode;
-
- return (clsMode + "-" + mode);
- },
-
- clsSidebarAnimation: function(ref) {
- var mode = ref.mode;
- var clsSidebarAnimation = ref.clsSidebarAnimation;
-
- return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation;
- },
-
- clsContainerAnimation: function(ref) {
- var mode = ref.mode;
- var clsContainerAnimation = ref.clsContainerAnimation;
-
- return mode !== 'push' && mode !== 'reveal' ? '' : clsContainerAnimation;
- },
-
- transitionElement: function(ref) {
- var mode = ref.mode;
-
- return mode === 'reveal' ? parent(this.panel) : this.panel;
- }
-
- },
-
- update: {
-
- read: function() {
- if (this.isToggled() && !isVisible(this.$el)) {
- this.hide();
- }
- },
-
- events: ['resize']
-
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return 'a[href^="#"]';
- },
-
- handler: function(ref) {
- var hash = ref.current.hash;
- var defaultPrevented = ref.defaultPrevented;
-
- if (!defaultPrevented && hash && $(hash, document.body)) {
- this.hide();
- }
- }
-
- },
-
- {
- name: 'touchstart',
-
- passive: true,
-
- el: function() {
- return this.panel;
- },
-
- handler: function(ref) {
- var targetTouches = ref.targetTouches;
-
-
- if (targetTouches.length === 1) {
- this.clientY = targetTouches[0].clientY;
- }
-
- }
-
- },
-
- {
- name: 'touchmove',
-
- self: true,
- passive: false,
-
- filter: function() {
- return this.overlay;
- },
-
- handler: function(e) {
- e.cancelable && e.preventDefault();
- }
-
- },
-
- {
- name: 'touchmove',
-
- passive: false,
-
- el: function() {
- return this.panel;
- },
-
- handler: function(e) {
-
- if (e.targetTouches.length !== 1) {
- return;
- }
-
- var clientY = e.targetTouches[0].clientY - this.clientY;
- var ref = this.panel;
- var scrollTop = ref.scrollTop;
- var scrollHeight = ref.scrollHeight;
- var clientHeight = ref.clientHeight;
-
- if (clientHeight >= scrollHeight
- || scrollTop === 0 && clientY > 0
- || scrollHeight - scrollTop <= clientHeight && clientY < 0
- ) {
- e.cancelable && e.preventDefault();
- }
-
- }
-
- },
-
- {
- name: 'show',
-
- self: true,
-
- handler: function() {
-
- if (this.mode === 'reveal' && !hasClass(parent(this.panel), this.clsMode)) {
- wrapAll(this.panel, '');
- addClass(parent(this.panel), this.clsMode);
- }
-
- css(document.documentElement, 'overflowY', this.overlay ? 'hidden' : '');
- addClass(document.body, this.clsContainer, this.clsFlip);
- css(document.body, 'touch-action', 'pan-y pinch-zoom');
- css(this.$el, 'display', 'block');
- addClass(this.$el, this.clsOverlay);
- addClass(this.panel, this.clsSidebarAnimation, this.mode !== 'reveal' ? this.clsMode : '');
-
- height(document.body); // force reflow
- addClass(document.body, this.clsContainerAnimation);
-
- this.clsContainerAnimation && suppressUserScale();
-
-
- }
- },
-
- {
- name: 'hide',
-
- self: true,
-
- handler: function() {
- removeClass(document.body, this.clsContainerAnimation);
- css(document.body, 'touch-action', '');
- }
- },
-
- {
- name: 'hidden',
-
- self: true,
-
- handler: function() {
-
- this.clsContainerAnimation && resumeUserScale();
-
- if (this.mode === 'reveal') {
- unwrap(this.panel);
- }
-
- removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);
- removeClass(this.$el, this.clsOverlay);
- css(this.$el, 'display', '');
- removeClass(document.body, this.clsContainer, this.clsFlip);
-
- css(document.documentElement, 'overflowY', '');
-
- }
- },
-
- {
- name: 'swipeLeft swipeRight',
-
- handler: function(e) {
-
- if (this.isToggled() && endsWith(e.type, 'Left') ^ this.flip) {
- this.hide();
- }
-
- }
- }
-
- ]
-
- };
-
- // Chrome in responsive mode zooms page upon opening offcanvas
- function suppressUserScale() {
- getViewport().content += ',user-scalable=0';
- }
-
- function resumeUserScale() {
- var viewport = getViewport();
- viewport.content = viewport.content.replace(/,user-scalable=0$/, '');
- }
-
- function getViewport() {
- return $('meta[name="viewport"]', document.head) || append(document.head, '
');
- }
-
- var overflowAuto = {
-
- mixins: [Class],
-
- props: {
- selContainer: String,
- selContent: String
- },
-
- data: {
- selContainer: '.uk-modal',
- selContent: '.uk-modal-dialog'
- },
-
- computed: {
-
- container: function(ref, $el) {
- var selContainer = ref.selContainer;
-
- return closest($el, selContainer);
- },
-
- content: function(ref, $el) {
- var selContent = ref.selContent;
-
- return closest($el, selContent);
- }
-
- },
-
- connected: function() {
- css(this.$el, 'minHeight', 150);
- },
-
- update: {
-
- read: function() {
-
- if (!this.content || !this.container || !isVisible(this.$el)) {
- return false;
- }
-
- return {
- current: toFloat(css(this.$el, 'maxHeight')),
- max: Math.max(150, height(this.container) - (dimensions(this.content).height - height(this.$el)))
- };
- },
-
- write: function(ref) {
- var current = ref.current;
- var max = ref.max;
-
- css(this.$el, 'maxHeight', max);
- if (Math.round(current) !== Math.round(max)) {
- trigger(this.$el, 'resize');
- }
- },
-
- events: ['resize']
-
- }
-
- };
-
- var responsive = {
-
- props: ['width', 'height'],
-
- connected: function() {
- addClass(this.$el, 'uk-responsive-width');
- },
-
- update: {
-
- read: function() {
- return isVisible(this.$el) && this.width && this.height
- ? {width: width(parent(this.$el)), height: this.height}
- : false;
- },
-
- write: function(dim) {
- height(this.$el, Dimensions.contain({
- height: this.height,
- width: this.width
- }, dim).height);
- },
-
- events: ['resize']
-
- }
-
- };
-
- var scroll = {
-
- props: {
- offset: Number
- },
-
- data: {
- offset: 0
- },
-
- methods: {
-
- scrollTo: function(el) {
- var this$1 = this;
-
-
- el = el && $(el) || document.body;
-
- if (trigger(this.$el, 'beforescroll', [this, el])) {
- scrollIntoView(el, {offset: this.offset}).then(function () { return trigger(this$1.$el, 'scrolled', [this$1, el]); }
- );
- }
-
- }
-
- },
-
- events: {
-
- click: function(e) {
-
- if (e.defaultPrevented) {
- return;
- }
-
- e.preventDefault();
- this.scrollTo(("#" + (escape(decodeURIComponent((this.$el.hash || '').substr(1))))));
- }
-
- }
-
- };
-
- var stateKey = '_ukScrollspy';
- var scrollspy = {
-
- args: 'cls',
-
- props: {
- cls: String,
- target: String,
- hidden: Boolean,
- offsetTop: Number,
- offsetLeft: Number,
- repeat: Boolean,
- delay: Number
- },
-
- data: function () { return ({
- cls: false,
- target: false,
- hidden: true,
- offsetTop: 0,
- offsetLeft: 0,
- repeat: false,
- delay: 0,
- inViewClass: 'uk-scrollspy-inview'
- }); },
-
- computed: {
-
- elements: {
-
- get: function(ref, $el) {
- var target = ref.target;
-
- return target ? $$(target, $el) : [$el];
- },
-
- watch: function(elements) {
- if (this.hidden) {
- css(filter$1(elements, (":not(." + (this.inViewClass) + ")")), 'visibility', 'hidden');
- }
- },
-
- immediate: true
-
- }
-
- },
-
- disconnected: function() {
- var this$1 = this;
-
- this.elements.forEach(function (el) {
- removeClass(el, this$1.inViewClass, el[stateKey] ? el[stateKey].cls : '');
- delete el[stateKey];
- });
- },
-
- update: [
-
- {
-
- read: function(data$1) {
- var this$1 = this;
-
-
- // Let child components be applied at least once first
- if (!data$1.update) {
- Promise$1.resolve().then(function () {
- this$1.$emit();
- data$1.update = true;
- });
- return false;
- }
-
- this.elements.forEach(function (el) {
-
- if (!el[stateKey]) {
- el[stateKey] = {cls: data(el, 'uk-scrollspy-class') || this$1.cls};
- }
-
- el[stateKey].show = isInView(el, this$1.offsetTop, this$1.offsetLeft);
-
- });
-
- },
-
- write: function(data) {
- var this$1 = this;
-
-
- this.elements.forEach(function (el) {
-
- var state = el[stateKey];
-
- if (state.show && !state.inview && !state.queued) {
-
- state.queued = true;
-
- data.promise = (data.promise || Promise$1.resolve()).then(function () { return new Promise$1(function (resolve) { return setTimeout(resolve, this$1.delay); }
- ); }
- ).then(function () {
- this$1.toggle(el, true);
- setTimeout(function () {
- state.queued = false;
- this$1.$emit();
- }, 300);
- });
-
- } else if (!state.show && state.inview && !state.queued && this$1.repeat) {
-
- this$1.toggle(el, false);
-
- }
-
- });
-
- },
-
- events: ['scroll', 'resize']
-
- }
-
- ],
-
- methods: {
-
- toggle: function(el, inview) {
-
- var state = el[stateKey];
-
- state.off && state.off();
-
- css(el, 'visibility', !inview && this.hidden ? 'hidden' : '');
-
- toggleClass(el, this.inViewClass, inview);
- toggleClass(el, state.cls);
-
- if (/\buk-animation-/.test(state.cls)) {
- state.off = once(el, 'animationcancel animationend', function () { return removeClasses(el, 'uk-animation-\\w*'); }
- );
- }
-
- trigger(el, inview ? 'inview' : 'outview');
-
- state.inview = inview;
-
- this.$update(el);
- }
-
- }
-
- };
-
- var scrollspyNav = {
-
- props: {
- cls: String,
- closest: String,
- scroll: Boolean,
- overflow: Boolean,
- offset: Number
- },
-
- data: {
- cls: 'uk-active',
- closest: false,
- scroll: false,
- overflow: true,
- offset: 0
- },
-
- computed: {
-
- links: {
-
- get: function(_, $el) {
- return $$('a[href^="#"]', $el).filter(function (el) { return el.hash; });
- },
-
- watch: function(links) {
- if (this.scroll) {
- this.$create('scroll', links, {offset: this.offset || 0});
- }
- },
-
- immediate: true
-
- },
-
- targets: function() {
- return $$(this.links.map(function (el) { return escape(el.hash).substr(1); }).join(','));
- },
-
- elements: function(ref) {
- var selector = ref.closest;
-
- return closest(this.links, selector || '*');
- }
-
- },
-
- update: [
-
- {
-
- read: function() {
- var this$1 = this;
-
-
- var ref = this.targets;
- var length = ref.length;
-
- if (!length || !isVisible(this.$el)) {
- return false;
- }
-
- var ref$1 = scrollParents(this.targets, /auto|scroll/, true);
- var scrollElement = ref$1[0];
- var scrollTop = scrollElement.scrollTop;
- var scrollHeight = scrollElement.scrollHeight;
- var max = scrollHeight - getViewportClientHeight(scrollElement);
- var active = false;
-
- if (scrollTop === max) {
- active = length - 1;
- } else {
-
- this.targets.every(function (el, i) {
- if (offset(el).top - offset(getViewport$1(scrollElement)).top - this$1.offset <= 0) {
- active = i;
- return true;
- }
- });
-
- if (active === false && this.overflow) {
- active = 0;
- }
- }
-
- return {active: active};
- },
-
- write: function(ref) {
- var active = ref.active;
-
-
- var changed = active !== false && !hasClass(this.elements[active], this.cls);
-
- this.links.forEach(function (el) { return el.blur(); });
- removeClass(this.elements, this.cls);
- addClass(this.elements[active], this.cls);
-
- if (changed) {
- trigger(this.$el, 'active', [active, this.elements[active]]);
- }
- },
-
- events: ['scroll', 'resize']
-
- }
-
- ]
-
- };
-
- var sticky = {
-
- mixins: [Class, Media],
-
- props: {
- top: null,
- bottom: Boolean,
- offset: String,
- animation: String,
- clsActive: String,
- clsInactive: String,
- clsFixed: String,
- clsBelow: String,
- selTarget: String,
- widthElement: Boolean,
- showOnUp: Boolean,
- targetOffset: Number
- },
-
- data: {
- top: 0,
- bottom: false,
- offset: 0,
- animation: '',
- clsActive: 'uk-active',
- clsInactive: '',
- clsFixed: 'uk-sticky-fixed',
- clsBelow: 'uk-sticky-below',
- selTarget: '',
- widthElement: false,
- showOnUp: false,
- targetOffset: false
- },
-
- computed: {
-
- offset: function(ref) {
- var offset = ref.offset;
-
- return toPx(offset);
- },
-
- selTarget: function(ref, $el) {
- var selTarget = ref.selTarget;
-
- return selTarget && $(selTarget, $el) || $el;
- },
-
- widthElement: function(ref, $el) {
- var widthElement = ref.widthElement;
-
- return query(widthElement, $el) || this.placeholder;
- },
-
- isActive: {
-
- get: function() {
- return hasClass(this.selTarget, this.clsActive);
- },
-
- set: function(value) {
- if (value && !this.isActive) {
- replaceClass(this.selTarget, this.clsInactive, this.clsActive);
- trigger(this.$el, 'active');
- } else if (!value && !hasClass(this.selTarget, this.clsInactive)) {
- replaceClass(this.selTarget, this.clsActive, this.clsInactive);
- trigger(this.$el, 'inactive');
- }
- }
-
- }
-
- },
-
- connected: function() {
- this.placeholder = $('+ .uk-sticky-placeholder', this.$el) || $('
');
- this.isFixed = false;
- this.isActive = false;
- },
-
- disconnected: function() {
-
- if (this.isFixed) {
- this.hide();
- removeClass(this.selTarget, this.clsInactive);
- }
-
- remove$1(this.placeholder);
- this.placeholder = null;
- this.widthElement = null;
- },
-
- events: [
-
- {
-
- name: 'load hashchange popstate',
-
- el: function() {
- return window;
- },
-
- handler: function() {
- var this$1 = this;
-
-
- if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {
- return;
- }
-
- var target = $(location.hash);
-
- if (target) {
- fastdom.read(function () {
-
- var ref = offset(target);
- var top = ref.top;
- var elTop = offset(this$1.$el).top;
- var elHeight = this$1.$el.offsetHeight;
-
- if (this$1.isFixed && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {
- scrollTop(window, top - elHeight - (isNumeric(this$1.targetOffset) ? this$1.targetOffset : 0) - this$1.offset);
- }
-
- });
- }
-
- }
-
- }
-
- ],
-
- update: [
-
- {
-
- read: function(ref, types) {
- var height = ref.height;
-
-
- this.inactive = !this.matchMedia || !isVisible(this.$el);
-
- if (this.inactive) {
- return false;
- }
-
- if (this.isActive && types.has('resize')) {
- this.hide();
- height = this.$el.offsetHeight;
- this.show();
- }
-
- height = !this.isActive ? this.$el.offsetHeight : height;
-
- this.topOffset = offset(this.isFixed ? this.placeholder : this.$el).top;
- this.bottomOffset = this.topOffset + height;
-
- var bottom = parseProp('bottom', this);
-
- this.top = Math.max(toFloat(parseProp('top', this)), this.topOffset) - this.offset;
- this.bottom = bottom && bottom - this.$el.offsetHeight;
- this.width = dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el).width;
-
- return {
- height: height,
- top: offsetPosition(this.placeholder)[0],
- margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
- };
- },
-
- write: function(ref) {
- var height = ref.height;
- var margins = ref.margins;
-
-
- var ref$1 = this;
- var placeholder = ref$1.placeholder;
-
- css(placeholder, assign({height: height}, margins));
-
- if (!within(placeholder, document)) {
- after(this.$el, placeholder);
- placeholder.hidden = true;
- }
-
- this.isActive = !!this.isActive; // force self-assign
-
- },
-
- events: ['resize']
-
- },
-
- {
-
- read: function(ref) {
- var scroll = ref.scroll; if ( scroll === void 0 ) scroll = 0;
-
-
- this.scroll = window.pageYOffset;
-
- return {
- dir: scroll <= this.scroll ? 'down' : 'up',
- scroll: this.scroll
- };
- },
-
- write: function(data, types) {
- var this$1 = this;
-
-
- var now = Date.now();
- var isScrollUpdate = types.has('scroll');
- var initTimestamp = data.initTimestamp; if ( initTimestamp === void 0 ) initTimestamp = 0;
- var dir = data.dir;
- var lastDir = data.lastDir;
- var lastScroll = data.lastScroll;
- var scroll = data.scroll;
- var top = data.top;
-
- data.lastScroll = scroll;
-
- if (scroll < 0 || scroll === lastScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
- return;
- }
-
- if (now - initTimestamp > 300 || dir !== lastDir) {
- data.initScroll = scroll;
- data.initTimestamp = now;
- }
-
- data.lastDir = dir;
-
- if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(lastScroll - scroll) <= 10) {
- return;
- }
-
- if (this.inactive
- || scroll < this.top
- || this.showOnUp && (scroll <= this.top || dir === 'down' && isScrollUpdate || dir === 'up' && !this.isFixed && scroll <= this.bottomOffset)
- ) {
-
- if (!this.isFixed) {
-
- if (Animation.inProgress(this.$el) && top > scroll) {
- Animation.cancel(this.$el);
- this.hide();
- }
-
- return;
- }
-
- this.isFixed = false;
-
- if (this.animation && scroll > this.topOffset) {
- Animation.cancel(this.$el);
- Animation.out(this.$el, this.animation).then(function () { return this$1.hide(); }, noop);
- } else {
- this.hide();
- }
-
- } else if (this.isFixed) {
-
- this.update();
-
- } else if (this.animation) {
-
- Animation.cancel(this.$el);
- this.show();
- Animation.in(this.$el, this.animation).catch(noop);
-
- } else {
- this.show();
- }
-
- },
-
- events: ['resize', 'scroll']
-
- }
-
- ],
-
- methods: {
-
- show: function() {
-
- this.isFixed = true;
- this.update();
- this.placeholder.hidden = false;
-
- },
-
- hide: function() {
-
- this.isActive = false;
- removeClass(this.$el, this.clsFixed, this.clsBelow);
- css(this.$el, {position: '', top: '', width: ''});
- this.placeholder.hidden = true;
-
- },
-
- update: function() {
-
- var active = this.top !== 0 || this.scroll > this.top;
- var top = Math.max(0, this.offset);
-
- if (isNumeric(this.bottom) && this.scroll > this.bottom - this.offset) {
- top = this.bottom - this.scroll;
- }
-
- css(this.$el, {
- position: 'fixed',
- top: (top + "px"),
- width: this.width
- });
-
- this.isActive = active;
- toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);
- addClass(this.$el, this.clsFixed);
-
- }
-
- }
-
- };
-
- function parseProp(prop, ref) {
- var $props = ref.$props;
- var $el = ref.$el;
- var propOffset = ref[(prop + "Offset")];
-
-
- var value = $props[prop];
-
- if (!value) {
- return;
- }
-
- if (isString(value) && value.match(/^-?\d/)) {
-
- return propOffset + toPx(value);
-
- } else {
-
- return offset(value === true ? parent($el) : query(value, $el)).bottom;
-
- }
- }
-
- var Switcher = {
-
- mixins: [Togglable],
-
- args: 'connect',
-
- props: {
- connect: String,
- toggle: String,
- active: Number,
- swiping: Boolean
- },
-
- data: {
- connect: '~.uk-switcher',
- toggle: '> * > :first-child',
- active: 0,
- swiping: true,
- cls: 'uk-active',
- attrItem: 'uk-switcher-item'
- },
-
- computed: {
-
- connects: {
-
- get: function(ref, $el) {
- var connect = ref.connect;
-
- return queryAll(connect, $el);
- },
-
- watch: function(connects) {
- var this$1 = this;
-
-
- if (this.swiping) {
- css(connects, 'touch-action', 'pan-y pinch-zoom');
- }
-
- var index = this.index();
- this.connects.forEach(function (el) { return children(el).forEach(function (child, i) { return toggleClass(child, this$1.cls, i === index); }
- ); }
- );
-
- },
-
- immediate: true
-
- },
-
- toggles: {
-
- get: function(ref, $el) {
- var toggle = ref.toggle;
-
- return $$(toggle, $el).filter(function (el) { return !matches(el, '.uk-disabled *, .uk-disabled, [disabled]'); });
- },
-
- watch: function(toggles) {
- var active = this.index();
- this.show(~active ? active : toggles[this.active] || toggles[0]);
- },
-
- immediate: true
-
- },
-
- children: function() {
- var this$1 = this;
-
- return children(this.$el).filter(function (child) { return this$1.toggles.some(function (toggle) { return within(toggle, child); }); });
- }
-
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return this.toggle;
- },
-
- handler: function(e) {
- e.preventDefault();
- this.show(e.current);
- }
-
- },
-
- {
- name: 'click',
-
- el: function() {
- return this.connects;
- },
-
- delegate: function() {
- return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]");
- },
-
- handler: function(e) {
- e.preventDefault();
- this.show(data(e.current, this.attrItem));
- }
- },
-
- {
- name: 'swipeRight swipeLeft',
-
- filter: function() {
- return this.swiping;
- },
-
- el: function() {
- return this.connects;
- },
-
- handler: function(ref) {
- var type = ref.type;
-
- this.show(endsWith(type, 'Left') ? 'next' : 'previous');
- }
- }
-
- ],
-
- methods: {
-
- index: function() {
- var this$1 = this;
-
- return findIndex(this.children, function (el) { return hasClass(el, this$1.cls); });
- },
-
- show: function(item) {
- var this$1 = this;
-
-
- var prev = this.index();
- var next = getIndex(
- this.children[getIndex(item, this.toggles, prev)],
- children(this.$el)
- );
-
- if (prev === next) {
- return;
- }
-
- this.children.forEach(function (child, i) {
- toggleClass(child, this$1.cls, next === i);
- attr(this$1.toggles[i], 'aria-expanded', next === i);
- });
-
- this.connects.forEach(function (ref) {
- var children = ref.children;
-
- return this$1.toggleElement(toNodes(children).filter(function (child) { return hasClass(child, this$1.cls); }
- ), false, prev >= 0).then(function () { return this$1.toggleElement(children[next], true, prev >= 0); }
- );
- }
- );
- }
-
- }
-
- };
-
- var tab = {
-
- mixins: [Class],
-
- extends: Switcher,
-
- props: {
- media: Boolean
- },
-
- data: {
- media: 960,
- attrItem: 'uk-tab-item'
- },
-
- connected: function() {
-
- var cls = hasClass(this.$el, 'uk-tab-left')
- ? 'uk-tab-left'
- : hasClass(this.$el, 'uk-tab-right')
- ? 'uk-tab-right'
- : false;
-
- if (cls) {
- this.$create('toggle', this.$el, {cls: cls, mode: 'media', media: this.media});
- }
- }
-
- };
-
- var toggle = {
-
- mixins: [Media, Togglable],
-
- args: 'target',
-
- props: {
- href: String,
- target: null,
- mode: 'list',
- queued: Boolean
- },
-
- data: {
- href: false,
- target: false,
- mode: 'click',
- queued: true
- },
-
- connected: function() {
- if (!isFocusable(this.$el)) {
- attr(this.$el, 'tabindex', '0');
- }
- },
-
- computed: {
-
- target: {
-
- get: function(ref, $el) {
- var href = ref.href;
- var target = ref.target;
-
- target = queryAll(target || href, $el);
- return target.length && target || [$el];
- },
-
- watch: function() {
- this.updateAria();
- },
-
- immediate: true
-
- }
-
- },
-
- events: [
-
- {
-
- name: (pointerEnter + " " + pointerLeave + " focus blur"),
-
- filter: function() {
- return includes(this.mode, 'hover');
- },
-
- handler: function(e) {
- if (!isTouch(e)) {
- this.toggle(("toggle" + (includes([pointerEnter, 'focus'], e.type) ? 'show' : 'hide')));
- }
- }
-
- },
-
- {
-
- name: 'click',
-
- filter: function() {
- return includes(this.mode, 'click') || hasTouch && includes(this.mode, 'hover');
- },
-
- handler: function(e) {
-
- var link;
- if (closest(e.target, 'a[href="#"], a[href=""]')
- || (link = closest(e.target, 'a[href]')) && (
- !isToggled(this.target, this.cls)
- || link.hash && matches(this.target, link.hash)
- )
- ) {
- e.preventDefault();
- }
-
- this.toggle();
- }
-
- },
-
- {
-
- name: 'toggled',
-
- self: true,
-
- el: function() {
- return this.target;
- },
-
- handler: function(e, toggled) {
- this.updateAria(toggled);
- }
- }
-
- ],
-
- update: {
-
- read: function() {
- return includes(this.mode, 'media') && this.media
- ? {match: this.matchMedia}
- : false;
- },
-
- write: function(ref) {
- var match = ref.match;
-
-
- var toggled = this.isToggled(this.target);
- if (match ? !toggled : toggled) {
- this.toggle();
- }
-
- },
-
- events: ['resize']
-
- },
-
- methods: {
-
- toggle: function(type) {
- var this$1 = this;
-
-
- if (!trigger(this.target, type || 'toggle', [this])) {
- return;
- }
-
- if (!this.queued) {
- return this.toggleElement(this.target);
- }
-
- var leaving = this.target.filter(function (el) { return hasClass(el, this$1.clsLeave); });
-
- if (leaving.length) {
- this.target.forEach(function (el) {
- var isLeaving = includes(leaving, el);
- this$1.toggleElement(el, isLeaving, isLeaving);
- });
- return;
- }
-
- var toggled = this.target.filter(this.isToggled);
- this.toggleElement(toggled, false).then(function () { return this$1.toggleElement(this$1.target.filter(function (el) { return !includes(toggled, el); }
- ), true); }
- );
-
- },
-
- updateAria: function(toggled) {
- attr(this.$el, 'aria-expanded', isBoolean(toggled)
- ? toggled
- : isToggled(this.target, this.cls)
- );
- }
-
- }
-
- };
-
- // TODO improve isToggled handling
- function isToggled(target, cls) {
- return cls
- ? hasClass(target, cls.split(' ')[0])
- : isVisible(target);
- }
-
- var components$1 = /*#__PURE__*/Object.freeze({
- __proto__: null,
- Accordion: Accordion,
- Alert: alert,
- Cover: cover,
- Drop: drop,
- Dropdown: drop,
- FormCustom: formCustom,
- Gif: gif,
- Grid: grid,
- HeightMatch: heightMatch,
- HeightViewport: heightViewport,
- Icon: Icon,
- Img: img,
- Leader: leader,
- Margin: Margin,
- Modal: modal,
- Nav: nav,
- Navbar: navbar,
- Offcanvas: offcanvas,
- OverflowAuto: overflowAuto,
- Responsive: responsive,
- Scroll: scroll,
- Scrollspy: scrollspy,
- ScrollspyNav: scrollspyNav,
- Sticky: sticky,
- Svg: SVG,
- Switcher: Switcher,
- Tab: tab,
- Toggle: toggle,
- Video: Video,
- Close: Close,
- Spinner: Spinner,
- SlidenavNext: Slidenav,
- SlidenavPrevious: Slidenav,
- SearchIcon: Search,
- Marker: IconComponent,
- NavbarToggleIcon: IconComponent,
- OverlayIcon: IconComponent,
- PaginationNext: IconComponent,
- PaginationPrevious: IconComponent,
- Totop: IconComponent
- });
-
- // register components
- each(components$1, function (component, name) { return UIkit.component(name, component); }
- );
-
- // core functionality
- UIkit.use(Core);
-
- boot(UIkit);
-
- var countdown = {
-
- mixins: [Class],
-
- props: {
- date: String,
- clsWrapper: String
- },
-
- data: {
- date: '',
- clsWrapper: '.uk-countdown-%unit%'
- },
-
- computed: {
-
- date: function(ref) {
- var date = ref.date;
-
- return Date.parse(date);
- },
-
- days: function(ref, $el) {
- var clsWrapper = ref.clsWrapper;
-
- return $(clsWrapper.replace('%unit%', 'days'), $el);
- },
-
- hours: function(ref, $el) {
- var clsWrapper = ref.clsWrapper;
-
- return $(clsWrapper.replace('%unit%', 'hours'), $el);
- },
-
- minutes: function(ref, $el) {
- var clsWrapper = ref.clsWrapper;
-
- return $(clsWrapper.replace('%unit%', 'minutes'), $el);
- },
-
- seconds: function(ref, $el) {
- var clsWrapper = ref.clsWrapper;
-
- return $(clsWrapper.replace('%unit%', 'seconds'), $el);
- },
-
- units: function() {
- var this$1 = this;
-
- return ['days', 'hours', 'minutes', 'seconds'].filter(function (unit) { return this$1[unit]; });
- }
-
- },
-
- connected: function() {
- this.start();
- },
-
- disconnected: function() {
- var this$1 = this;
-
- this.stop();
- this.units.forEach(function (unit) { return empty(this$1[unit]); });
- },
-
- events: [
-
- {
-
- name: 'visibilitychange',
-
- el: function() {
- return document;
- },
-
- handler: function() {
- if (document.hidden) {
- this.stop();
- } else {
- this.start();
- }
- }
-
- }
-
- ],
-
- update: {
-
- write: function() {
- var this$1 = this;
-
-
- var timespan = getTimeSpan(this.date);
-
- if (timespan.total <= 0) {
-
- this.stop();
-
- timespan.days
- = timespan.hours
- = timespan.minutes
- = timespan.seconds
- = 0;
- }
-
- this.units.forEach(function (unit) {
-
- var digits = String(Math.floor(timespan[unit]));
-
- digits = digits.length < 2 ? ("0" + digits) : digits;
-
- var el = this$1[unit];
- if (el.textContent !== digits) {
- digits = digits.split('');
-
- if (digits.length !== el.children.length) {
- html(el, digits.map(function () { return '
'; }).join(''));
- }
-
- digits.forEach(function (digit, i) { return el.children[i].textContent = digit; });
- }
-
- });
-
- }
-
- },
-
- methods: {
-
- start: function() {
-
- this.stop();
-
- if (this.date && this.units.length) {
- this.$update();
- this.timer = setInterval(this.$update, 1000);
- }
-
- },
-
- stop: function() {
-
- if (this.timer) {
- clearInterval(this.timer);
- this.timer = null;
- }
-
- }
-
- }
-
- };
-
- function getTimeSpan(date) {
-
- var total = date - Date.now();
-
- return {
- total: total,
- seconds: total / 1000 % 60,
- minutes: total / 1000 / 60 % 60,
- hours: total / 1000 / 60 / 60 % 24,
- days: total / 1000 / 60 / 60 / 24
- };
- }
-
- var clsLeave = 'uk-transition-leave';
- var clsEnter = 'uk-transition-enter';
-
- function fade(action, target, duration, stagger) {
- if ( stagger === void 0 ) stagger = 0;
-
-
- var index = transitionIndex(target, true);
- var propsIn = {opacity: 1};
- var propsOut = {opacity: 0};
-
- var wrapIndexFn = function (fn) { return function () { return index === transitionIndex(target) ? fn() : Promise$1.reject(); }; };
-
- var leaveFn = wrapIndexFn(function () {
-
- addClass(target, clsLeave);
-
- return Promise$1.all(getTransitionNodes(target).map(function (child, i) { return new Promise$1(function (resolve) { return setTimeout(function () { return Transition.start(child, propsOut, duration / 2, 'ease').then(resolve); }, i * stagger); }
- ); }
- )).then(function () { return removeClass(target, clsLeave); });
-
- });
-
- var enterFn = wrapIndexFn(function () {
-
- var oldHeight = height(target);
-
- addClass(target, clsEnter);
- action();
-
- css(children(target), {opacity: 0});
-
- // Ensure UIkit updates have propagated
- return new Promise$1(function (resolve) { return requestAnimationFrame(function () {
-
- var nodes = children(target);
- var newHeight = height(target);
-
- // Ensure Grid cells do not stretch when height is applied
- css(target, 'alignContent', 'flex-start');
- height(target, oldHeight);
-
- var transitionNodes = getTransitionNodes(target);
- css(nodes, propsOut);
-
- var transitions = transitionNodes.map(function (child, i) { return new Promise$1(function (resolve) { return setTimeout(function () { return Transition.start(child, propsIn, duration / 2, 'ease').then(resolve); }, i * stagger); }
- ); }
- );
-
- if (oldHeight !== newHeight) {
- transitions.push(Transition.start(target, {height: newHeight}, duration / 2 + transitionNodes.length * stagger, 'ease'));
- }
-
- Promise$1.all(transitions).then(function () {
- removeClass(target, clsEnter);
- if (index === transitionIndex(target)) {
- css(target, {height: '', alignContent: ''});
- css(nodes, {opacity: ''});
- delete target.dataset.transition;
- }
- resolve();
- });
- }); }
- );
- });
-
- return hasClass(target, clsLeave)
- ? waitTransitionend(target).then(enterFn)
- : hasClass(target, clsEnter)
- ? waitTransitionend(target).then(leaveFn).then(enterFn)
- : leaveFn().then(enterFn);
- }
-
- function transitionIndex(target, next) {
- if (next) {
- target.dataset.transition = 1 + transitionIndex(target);
- }
-
- return toNumber(target.dataset.transition) || 0;
- }
-
- function waitTransitionend(target) {
- return Promise$1.all(children(target).filter(Transition.inProgress).map(function (el) { return new Promise$1(function (resolve) { return once(el, 'transitionend transitioncanceled', resolve); }); }
- ));
- }
-
- function getTransitionNodes(target) {
- return getRows(children(target)).reduce(function (nodes, row) { return nodes.concat(sortBy$1(row.filter(function (el) { return isInView(el); }), 'offsetLeft')); }, []);
- }
-
- function slide (action, target, duration) {
-
- return new Promise$1(function (resolve) { return requestAnimationFrame(function () {
-
- var nodes = children(target);
-
- // Get current state
- var currentProps = nodes.map(function (el) { return getProps(el, true); });
- var targetProps = css(target, ['height', 'padding']);
-
- // Cancel previous animations
- Transition.cancel(target);
- nodes.forEach(Transition.cancel);
- reset(target);
-
- // Adding, sorting, removing nodes
- action();
-
- // Find new nodes
- nodes = nodes.concat(children(target).filter(function (el) { return !includes(nodes, el); }));
-
- // Wait for update to propagate
- Promise$1.resolve().then(function () {
-
- // Force update
- fastdom.flush();
-
- // Get new state
- var targetPropsTo = css(target, ['height', 'padding']);
- var ref = getTransitionProps(target, nodes, currentProps);
- var propsTo = ref[0];
- var propsFrom = ref[1];
-
- // Reset to previous state
- nodes.forEach(function (el, i) { return propsFrom[i] && css(el, propsFrom[i]); });
- css(target, assign({display: 'block'}, targetProps));
-
- // Start transitions on next frame
- requestAnimationFrame(function () {
-
- var transitions = nodes.map(function (el, i) { return parent(el) === target && Transition.start(el, propsTo[i], duration, 'ease'); }
- ).concat(Transition.start(target, targetPropsTo, duration, 'ease'));
-
- Promise$1.all(transitions).then(function () {
- nodes.forEach(function (el, i) { return parent(el) === target && css(el, 'display', propsTo[i].opacity === 0 ? 'none' : ''); });
- reset(target);
- }, noop).then(resolve);
-
- });
- });
- }); });
- }
-
- function getProps(el, opacity) {
-
- var zIndex = css(el, 'zIndex');
-
- return isVisible(el)
- ? assign({
- display: '',
- opacity: opacity ? css(el, 'opacity') : '0',
- pointerEvents: 'none',
- position: 'absolute',
- zIndex: zIndex === 'auto' ? index(el) : zIndex
- }, getPositionWithMargin(el))
- : false;
- }
-
- function getTransitionProps(target, nodes, currentProps) {
-
- var propsTo = nodes.map(function (el, i) { return parent(el) && i in currentProps
- ? currentProps[i]
- ? isVisible(el)
- ? getPositionWithMargin(el)
- : {opacity: 0}
- : {opacity: isVisible(el) ? 1 : 0}
- : false; });
-
- var propsFrom = propsTo.map(function (props, i) {
-
- var from = parent(nodes[i]) === target && (currentProps[i] || getProps(nodes[i]));
-
- if (!from) {
- return false;
- }
-
- if (!props) {
- delete from.opacity;
- } else if (!('opacity' in props)) {
- var opacity = from.opacity;
-
- if (opacity % 1) {
- props.opacity = 1;
- } else {
- delete from.opacity;
- }
- }
-
- return from;
- });
-
- return [propsTo, propsFrom];
- }
-
- function reset(el) {
- css(el.children, {
- height: '',
- left: '',
- opacity: '',
- pointerEvents: '',
- position: '',
- top: '',
- marginTop: '',
- marginLeft: '',
- transform: '',
- width: '',
- zIndex: ''
- });
- css(el, {height: '', display: '', padding: ''});
- }
-
- function getPositionWithMargin(el) {
- var ref = offset(el);
- var height = ref.height;
- var width = ref.width;
- var ref$1 = position(el);
- var top = ref$1.top;
- var left = ref$1.left;
- var ref$2 = css(el, ['marginTop', 'marginLeft']);
- var marginLeft = ref$2.marginLeft;
- var marginTop = ref$2.marginTop;
-
- return {top: top, left: left, height: height, width: width, marginLeft: marginLeft, marginTop: marginTop, transform: ''};
- }
-
- var Animate = {
-
- props: {
- duration: Number,
- animation: Boolean
- },
-
- data: {
- duration: 150,
- animation: 'slide'
- },
-
- methods: {
-
- animate: function(action, target) {
- var this$1 = this;
- if ( target === void 0 ) target = this.$el;
-
-
- var name = this.animation;
- var animationFn = name === 'fade'
- ? fade
- : name === 'delayed-fade'
- ? function () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
-
- return fade.apply(void 0, args.concat( [40] ));
- }
- : !name
- ? function () {
- action();
- return Promise$1.resolve();
- }
- : slide;
-
- return animationFn(action, target, this.duration)
- .then(function () { return this$1.$update(target, 'resize'); }, noop);
- }
-
- }
- };
-
- var filter = {
-
- mixins: [Animate],
-
- args: 'target',
-
- props: {
- target: Boolean,
- selActive: Boolean
- },
-
- data: {
- target: null,
- selActive: false,
- attrItem: 'uk-filter-control',
- cls: 'uk-active',
- duration: 250
- },
-
- computed: {
-
- toggles: {
-
- get: function(ref, $el) {
- var attrItem = ref.attrItem;
-
- return $$(("[" + attrItem + "],[data-" + attrItem + "]"), $el);
- },
-
- watch: function() {
- var this$1 = this;
-
-
- this.updateState();
-
- if (this.selActive !== false) {
- var actives = $$(this.selActive, this.$el);
- this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, includes(actives, el)); });
- }
-
- },
-
- immediate: true
-
- },
-
- children: {
-
- get: function(ref, $el) {
- var target = ref.target;
-
- return $$((target + " > *"), $el);
- },
-
- watch: function(list, old) {
- if (old && !isEqualList(list, old)) {
- this.updateState();
- }
- },
-
- immediate: true
-
- }
-
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]");
- },
-
- handler: function(e) {
-
- e.preventDefault();
- this.apply(e.current);
-
- }
-
- }
-
- ],
-
- methods: {
-
- apply: function(el) {
- var prevState = this.getState();
- var newState = mergeState(el, this.attrItem, this.getState());
-
- if (!isEqualState(prevState, newState)) {
- this.setState(newState);
- }
- },
-
- getState: function() {
- var this$1 = this;
-
- return this.toggles
- .filter(function (item) { return hasClass(item, this$1.cls); })
- .reduce(function (state, el) { return mergeState(el, this$1.attrItem, state); }, {filter: {'': ''}, sort: []});
- },
-
- setState: function(state, animate) {
- var this$1 = this;
- if ( animate === void 0 ) animate = true;
-
-
- state = assign({filter: {'': ''}, sort: []}, state);
-
- trigger(this.$el, 'beforeFilter', [this, state]);
-
- this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, !!matchFilter(el, this$1.attrItem, state)); });
-
- Promise$1.all($$(this.target, this.$el).map(function (target) {
- var filterFn = function () {
- applyState(state, target, children(target));
- this$1.$update(this$1.$el);
- };
- return animate ? this$1.animate(filterFn, target) : filterFn();
- })).then(function () { return trigger(this$1.$el, 'afterFilter', [this$1]); });
-
- },
-
- updateState: function() {
- var this$1 = this;
-
- fastdom.write(function () { return this$1.setState(this$1.getState(), false); });
- }
-
- }
-
- };
-
- function getFilter(el, attr) {
- return parseOptions(data(el, attr), ['filter']);
- }
-
- function isEqualState(stateA, stateB) {
- return ['filter', 'sort'].every(function (prop) { return isEqual(stateA[prop], stateB[prop]); });
- }
-
- function applyState(state, target, children) {
- var selector = getSelector(state);
-
- children.forEach(function (el) { return css(el, 'display', selector && !matches(el, selector) ? 'none' : ''); });
-
- var ref = state.sort;
- var sort = ref[0];
- var order = ref[1];
-
- if (sort) {
- var sorted = sortItems(children, sort, order);
- if (!isEqual(sorted, children)) {
- append(target, sorted);
- }
- }
- }
-
- function mergeState(el, attr, state) {
-
- var filterBy = getFilter(el, attr);
- var filter = filterBy.filter;
- var group = filterBy.group;
- var sort = filterBy.sort;
- var order = filterBy.order; if ( order === void 0 ) order = 'asc';
-
- if (filter || isUndefined(sort)) {
-
- if (group) {
-
- if (filter) {
- delete state.filter[''];
- state.filter[group] = filter;
- } else {
- delete state.filter[group];
-
- if (isEmpty(state.filter) || '' in state.filter) {
- state.filter = {'': filter || ''};
- }
-
- }
-
- } else {
- state.filter = {'': filter || ''};
- }
-
- }
-
- if (!isUndefined(sort)) {
- state.sort = [sort, order];
- }
-
- return state;
- }
-
- function matchFilter(el, attr, ref) {
- var stateFilter = ref.filter; if ( stateFilter === void 0 ) stateFilter = {'': ''};
- var ref_sort = ref.sort;
- var stateSort = ref_sort[0];
- var stateOrder = ref_sort[1];
-
-
- var ref$1 = getFilter(el, attr);
- var filter = ref$1.filter; if ( filter === void 0 ) filter = '';
- var group = ref$1.group; if ( group === void 0 ) group = '';
- var sort = ref$1.sort;
- var order = ref$1.order; if ( order === void 0 ) order = 'asc';
-
- return isUndefined(sort)
- ? group in stateFilter && filter === stateFilter[group]
- || !filter && group && !(group in stateFilter) && !stateFilter['']
- : stateSort === sort && stateOrder === order;
- }
-
- function isEqualList(listA, listB) {
- return listA.length === listB.length
- && listA.every(function (el) { return ~listB.indexOf(el); });
- }
-
- function getSelector(ref) {
- var filter = ref.filter;
-
- var selector = '';
- each(filter, function (value) { return selector += value || ''; });
- return selector;
- }
-
- function sortItems(nodes, sort, order) {
- return assign([], nodes).sort(function (a, b) { return data(a, sort).localeCompare(data(b, sort), undefined, {numeric: true}) * (order === 'asc' || -1); });
- }
-
- var Animations$2 = {
-
- slide: {
-
- show: function(dir) {
- return [
- {transform: translate(dir * -100)},
- {transform: translate()}
- ];
- },
-
- percent: function(current) {
- return translated(current);
- },
-
- translate: function(percent, dir) {
- return [
- {transform: translate(dir * -100 * percent)},
- {transform: translate(dir * 100 * (1 - percent))}
- ];
- }
-
- }
-
- };
-
- function translated(el) {
- return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) || 0;
- }
-
- function translate(value, unit) {
- if ( value === void 0 ) value = 0;
- if ( unit === void 0 ) unit = '%';
-
- value += value ? unit : '';
- return isIE ? ("translateX(" + value + ")") : ("translate3d(" + value + ", 0, 0)"); // currently not translate3d in IE, translate3d within translate3d does not work while transitioning
- }
-
- function scale3d(value) {
- return ("scale3d(" + value + ", " + value + ", 1)");
- }
-
- var Animations$1 = assign({}, Animations$2, {
-
- fade: {
-
- show: function() {
- return [
- {opacity: 0},
- {opacity: 1}
- ];
- },
-
- percent: function(current) {
- return 1 - css(current, 'opacity');
- },
-
- translate: function(percent) {
- return [
- {opacity: 1 - percent},
- {opacity: percent}
- ];
- }
-
- },
-
- scale: {
-
- show: function() {
- return [
- {opacity: 0, transform: scale3d(1 - .2)},
- {opacity: 1, transform: scale3d(1)}
- ];
- },
-
- percent: function(current) {
- return 1 - css(current, 'opacity');
- },
-
- translate: function(percent) {
- return [
- {opacity: 1 - percent, transform: scale3d(1 - .2 * percent)},
- {opacity: percent, transform: scale3d(1 - .2 + .2 * percent)}
- ];
- }
-
- }
-
- });
-
- function Transitioner$1(prev, next, dir, ref) {
- var animation = ref.animation;
- var easing = ref.easing;
-
-
- var percent = animation.percent;
- var translate = animation.translate;
- var show = animation.show; if ( show === void 0 ) show = noop;
- var props = show(dir);
- var deferred = new Deferred();
-
- return {
-
- dir: dir,
-
- show: function(duration, percent, linear) {
- var this$1 = this;
- if ( percent === void 0 ) percent = 0;
-
-
- var timing = linear ? 'linear' : easing;
- duration -= Math.round(duration * clamp(percent, -1, 1));
-
- this.translate(percent);
-
- triggerUpdate$1(next, 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});
- triggerUpdate$1(prev, 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});
-
- Promise$1.all([
- Transition.start(next, props[1], duration, timing),
- Transition.start(prev, props[0], duration, timing)
- ]).then(function () {
- this$1.reset();
- deferred.resolve();
- }, noop);
-
- return deferred.promise;
- },
-
- cancel: function() {
- Transition.cancel([next, prev]);
- },
-
- reset: function() {
- for (var prop in props[0]) {
- css([next, prev], prop, '');
- }
- },
-
- forward: function(duration, percent) {
- if ( percent === void 0 ) percent = this.percent();
-
- Transition.cancel([next, prev]);
- return this.show(duration, percent, true);
- },
-
- translate: function(percent) {
-
- this.reset();
-
- var props = translate(percent, dir);
- css(next, props[1]);
- css(prev, props[0]);
- triggerUpdate$1(next, 'itemtranslatein', {percent: percent, dir: dir});
- triggerUpdate$1(prev, 'itemtranslateout', {percent: 1 - percent, dir: dir});
-
- },
-
- percent: function() {
- return percent(prev || next, next, dir);
- },
-
- getDistance: function() {
- return prev && prev.offsetWidth;
- }
-
- };
-
- }
-
- function triggerUpdate$1(el, type, data) {
- trigger(el, createEvent(type, false, false, data));
- }
-
- var SliderAutoplay = {
-
- props: {
- autoplay: Boolean,
- autoplayInterval: Number,
- pauseOnHover: Boolean
- },
-
- data: {
- autoplay: false,
- autoplayInterval: 7000,
- pauseOnHover: true
- },
-
- connected: function() {
- this.autoplay && this.startAutoplay();
- },
-
- disconnected: function() {
- this.stopAutoplay();
- },
-
- update: function() {
- attr(this.slides, 'tabindex', '-1');
- },
-
- events: [
-
- {
-
- name: 'visibilitychange',
-
- el: function() {
- return document;
- },
-
- filter: function() {
- return this.autoplay;
- },
-
- handler: function() {
- if (document.hidden) {
- this.stopAutoplay();
- } else {
- this.startAutoplay();
- }
- }
-
- }
-
- ],
-
- methods: {
-
- startAutoplay: function() {
- var this$1 = this;
-
-
- this.stopAutoplay();
-
- this.interval = setInterval(
- function () { return (!this$1.draggable || !$(':focus', this$1.$el))
- && (!this$1.pauseOnHover || !matches(this$1.$el, ':hover'))
- && !this$1.stack.length
- && this$1.show('next'); },
- this.autoplayInterval
- );
-
- },
-
- stopAutoplay: function() {
- this.interval && clearInterval(this.interval);
- }
-
- }
-
- };
-
- var SliderDrag = {
-
- props: {
- draggable: Boolean
- },
-
- data: {
- draggable: true,
- threshold: 10
- },
-
- created: function() {
- var this$1 = this;
-
-
- ['start', 'move', 'end'].forEach(function (key) {
-
- var fn = this$1[key];
- this$1[key] = function (e) {
-
- var pos = getEventPos(e).x * (isRtl ? -1 : 1);
-
- this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos;
- this$1.pos = pos;
-
- fn(e);
- };
-
- });
-
- },
-
- events: [
-
- {
-
- name: pointerDown,
-
- delegate: function() {
- return this.selSlides;
- },
-
- handler: function(e) {
-
- if (!this.draggable
- || !isTouch(e) && hasTextNodesOnly(e.target)
- || closest(e.target, selInput)
- || e.button > 0
- || this.length < 2
- ) {
- return;
- }
-
- this.start(e);
- }
-
- },
-
- {
- name: 'dragstart',
-
- handler: function(e) {
- e.preventDefault();
- }
- }
-
- ],
-
- methods: {
-
- start: function() {
-
- this.drag = this.pos;
-
- if (this._transitioner) {
-
- this.percent = this._transitioner.percent();
- this.drag += this._transitioner.getDistance() * this.percent * this.dir;
-
- this._transitioner.cancel();
- this._transitioner.translate(this.percent);
-
- this.dragging = true;
-
- this.stack = [];
-
- } else {
- this.prevIndex = this.index;
- }
-
- on(document, pointerMove, this.move, {passive: false});
-
- // 'input' event is triggered by video controls
- on(document, (pointerUp + " " + pointerCancel + " input"), this.end, true);
-
- css(this.list, 'userSelect', 'none');
-
- },
-
- move: function(e) {
- var this$1 = this;
-
-
- var distance = this.pos - this.drag;
-
- if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {
- return;
- }
-
- // prevent click event
- css(this.list, 'pointerEvents', 'none');
-
- e.cancelable && e.preventDefault();
-
- this.dragging = true;
- this.dir = (distance < 0 ? 1 : -1);
-
- var ref = this;
- var slides = ref.slides;
- var ref$1 = this;
- var prevIndex = ref$1.prevIndex;
- var dis = Math.abs(distance);
- var nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);
- var width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
-
- while (nextIndex !== prevIndex && dis > width) {
-
- this.drag -= width * this.dir;
-
- prevIndex = nextIndex;
- dis -= width;
- nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);
- width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
-
- }
-
- this.percent = dis / width;
-
- var prev = slides[prevIndex];
- var next = slides[nextIndex];
- var changed = this.index !== nextIndex;
- var edge = prevIndex === nextIndex;
-
- var itemShown;
-
- [this.index, this.prevIndex].filter(function (i) { return !includes([nextIndex, prevIndex], i); }).forEach(function (i) {
- trigger(slides[i], 'itemhidden', [this$1]);
-
- if (edge) {
- itemShown = true;
- this$1.prevIndex = prevIndex;
- }
-
- });
-
- if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {
- trigger(slides[this.index], 'itemshown', [this]);
- }
-
- if (changed) {
- this.prevIndex = prevIndex;
- this.index = nextIndex;
-
- !edge && trigger(prev, 'beforeitemhide', [this]);
- trigger(next, 'beforeitemshow', [this]);
- }
-
- this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
-
- if (changed) {
- !edge && trigger(prev, 'itemhide', [this]);
- trigger(next, 'itemshow', [this]);
- }
-
- },
-
- end: function() {
-
- off(document, pointerMove, this.move, {passive: false});
- off(document, (pointerUp + " " + pointerCancel + " input"), this.end, true);
-
- if (this.dragging) {
-
- this.dragging = null;
-
- if (this.index === this.prevIndex) {
- this.percent = 1 - this.percent;
- this.dir *= -1;
- this._show(false, this.index, true);
- this._transitioner = null;
- } else {
-
- var dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
- this.index = dirChange ? this.index : this.prevIndex;
-
- if (dirChange) {
- this.percent = 1 - this.percent;
- }
-
- this.show(this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? 'next' : 'previous', true);
- }
-
- }
-
- css(this.list, {userSelect: '', pointerEvents: ''});
-
- this.drag
- = this.percent
- = null;
-
- }
-
- }
-
- };
-
- function hasTextNodesOnly(el) {
- return !el.children.length && el.childNodes.length;
- }
-
- var SliderNav = {
-
- data: {
- selNav: false
- },
-
- computed: {
-
- nav: function(ref, $el) {
- var selNav = ref.selNav;
-
- return $(selNav, $el);
- },
-
- selNavItem: function(ref) {
- var attrItem = ref.attrItem;
-
- return ("[" + attrItem + "],[data-" + attrItem + "]");
- },
-
- navItems: function(_, $el) {
- return $$(this.selNavItem, $el);
- }
-
- },
-
- update: {
-
- write: function() {
- var this$1 = this;
-
-
- if (this.nav && this.length !== this.nav.children.length) {
- html(this.nav, this.slides.map(function (_, i) { return ("
"); }).join(''));
- }
-
- this.navItems.concat(this.nav).forEach(function (el) { return el && (el.hidden = !this$1.maxIndex); });
-
- this.updateNav();
-
- },
-
- events: ['resize']
-
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return this.selNavItem;
- },
-
- handler: function(e) {
- e.preventDefault();
- this.show(data(e.current, this.attrItem));
- }
-
- },
-
- {
-
- name: 'itemshow',
- handler: 'updateNav'
-
- }
-
- ],
-
- methods: {
-
- updateNav: function() {
- var this$1 = this;
-
-
- var i = this.getValidIndex();
- this.navItems.forEach(function (el) {
-
- var cmd = data(el, this$1.attrItem);
-
- toggleClass(el, this$1.clsActive, toNumber(cmd) === i);
- toggleClass(el, 'uk-invisible', this$1.finite && (cmd === 'previous' && i === 0 || cmd === 'next' && i >= this$1.maxIndex));
- });
-
- }
-
- }
-
- };
-
- var Slider = {
-
- mixins: [SliderAutoplay, SliderDrag, SliderNav],
-
- props: {
- clsActivated: Boolean,
- easing: String,
- index: Number,
- finite: Boolean,
- velocity: Number,
- selSlides: String
- },
-
- data: function () { return ({
- easing: 'ease',
- finite: false,
- velocity: 1,
- index: 0,
- prevIndex: -1,
- stack: [],
- percent: 0,
- clsActive: 'uk-active',
- clsActivated: false,
- Transitioner: false,
- transitionOptions: {}
- }); },
-
- connected: function() {
- this.prevIndex = -1;
- this.index = this.getValidIndex(this.$props.index);
- this.stack = [];
- },
-
- disconnected: function() {
- removeClass(this.slides, this.clsActive);
- },
-
- computed: {
-
- duration: function(ref, $el) {
- var velocity = ref.velocity;
-
- return speedUp($el.offsetWidth / velocity);
- },
-
- list: function(ref, $el) {
- var selList = ref.selList;
-
- return $(selList, $el);
- },
-
- maxIndex: function() {
- return this.length - 1;
- },
-
- selSlides: function(ref) {
- var selList = ref.selList;
- var selSlides = ref.selSlides;
-
- return (selList + " " + (selSlides || '> *'));
- },
-
- slides: {
-
- get: function() {
- return $$(this.selSlides, this.$el);
- },
-
- watch: function() {
- this.$reset();
- }
-
- },
-
- length: function() {
- return this.slides.length;
- }
-
- },
-
- events: {
-
- itemshown: function() {
- this.$update(this.list);
- }
-
- },
-
- methods: {
-
- show: function(index, force) {
- var this$1 = this;
- if ( force === void 0 ) force = false;
-
-
- if (this.dragging || !this.length) {
- return;
- }
-
- var ref = this;
- var stack = ref.stack;
- var queueIndex = force ? 0 : stack.length;
- var reset = function () {
- stack.splice(queueIndex, 1);
-
- if (stack.length) {
- this$1.show(stack.shift(), true);
- }
- };
-
- stack[force ? 'unshift' : 'push'](index);
-
- if (!force && stack.length > 1) {
-
- if (stack.length === 2) {
- this._transitioner.forward(Math.min(this.duration, 200));
- }
-
- return;
- }
-
- var prevIndex = this.getIndex(this.index);
- var prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];
- var nextIndex = this.getIndex(index, this.index);
- var next = this.slides[nextIndex];
-
- if (prev === next) {
- reset();
- return;
- }
-
- this.dir = getDirection(index, prevIndex);
- this.prevIndex = prevIndex;
- this.index = nextIndex;
-
- if (prev && !trigger(prev, 'beforeitemhide', [this])
- || !trigger(next, 'beforeitemshow', [this, prev])
- ) {
- this.index = this.prevIndex;
- reset();
- return;
- }
-
- var promise = this._show(prev, next, force).then(function () {
-
- prev && trigger(prev, 'itemhidden', [this$1]);
- trigger(next, 'itemshown', [this$1]);
-
- return new Promise$1(function (resolve) {
- fastdom.write(function () {
- stack.shift();
- if (stack.length) {
- this$1.show(stack.shift(), true);
- } else {
- this$1._transitioner = null;
- }
- resolve();
- });
- });
-
- });
-
- prev && trigger(prev, 'itemhide', [this]);
- trigger(next, 'itemshow', [this]);
-
- return promise;
-
- },
-
- getIndex: function(index, prev) {
- if ( index === void 0 ) index = this.index;
- if ( prev === void 0 ) prev = this.index;
-
- return clamp(getIndex(index, this.slides, prev, this.finite), 0, this.maxIndex);
- },
-
- getValidIndex: function(index, prevIndex) {
- if ( index === void 0 ) index = this.index;
- if ( prevIndex === void 0 ) prevIndex = this.prevIndex;
-
- return this.getIndex(index, prevIndex);
- },
-
- _show: function(prev, next, force) {
-
- this._transitioner = this._getTransitioner(
- prev,
- next,
- this.dir,
- assign({
- easing: force
- ? next.offsetWidth < 600
- ? 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */
- : 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */
- : this.easing
- }, this.transitionOptions)
- );
-
- if (!force && !prev) {
- this._translate(1);
- return Promise$1.resolve();
- }
-
- var ref = this.stack;
- var length = ref.length;
- return this._transitioner[length > 1 ? 'forward' : 'show'](length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, this.percent);
-
- },
-
- _getDistance: function(prev, next) {
- return this._getTransitioner(prev, prev !== next && next).getDistance();
- },
-
- _translate: function(percent, prev, next) {
- if ( prev === void 0 ) prev = this.prevIndex;
- if ( next === void 0 ) next = this.index;
-
- var transitioner = this._getTransitioner(prev !== next ? prev : false, next);
- transitioner.translate(percent);
- return transitioner;
- },
-
- _getTransitioner: function(prev, next, dir, options) {
- if ( prev === void 0 ) prev = this.prevIndex;
- if ( next === void 0 ) next = this.index;
- if ( dir === void 0 ) dir = this.dir || 1;
- if ( options === void 0 ) options = this.transitionOptions;
-
- return new this.Transitioner(
- isNumber(prev) ? this.slides[prev] : prev,
- isNumber(next) ? this.slides[next] : next,
- dir * (isRtl ? -1 : 1),
- options
- );
- }
-
- }
-
- };
-
- function getDirection(index, prevIndex) {
- return index === 'next'
- ? 1
- : index === 'previous'
- ? -1
- : index < prevIndex
- ? -1
- : 1;
- }
-
- function speedUp(x) {
- return .5 * x + 300; // parabola through (400,500; 600,600; 1800,1200)
- }
-
- var Slideshow = {
-
- mixins: [Slider],
-
- props: {
- animation: String
- },
-
- data: {
- animation: 'slide',
- clsActivated: 'uk-transition-active',
- Animations: Animations$2,
- Transitioner: Transitioner$1
- },
-
- computed: {
-
- animation: function(ref) {
- var animation = ref.animation;
- var Animations = ref.Animations;
-
- return assign(Animations[animation] || Animations.slide, {name: animation});
- },
-
- transitionOptions: function() {
- return {animation: this.animation};
- }
-
- },
-
- events: {
-
- 'itemshow itemhide itemshown itemhidden': function(ref) {
- var target = ref.target;
-
- this.$update(target);
- },
-
- beforeitemshow: function(ref) {
- var target = ref.target;
-
- addClass(target, this.clsActive);
- },
-
- itemshown: function(ref) {
- var target = ref.target;
-
- addClass(target, this.clsActivated);
- },
-
- itemhidden: function(ref) {
- var target = ref.target;
-
- removeClass(target, this.clsActive, this.clsActivated);
- }
-
- }
-
- };
-
- var LightboxPanel = {
-
- mixins: [Container, Modal, Togglable, Slideshow],
-
- functional: true,
-
- props: {
- delayControls: Number,
- preload: Number,
- videoAutoplay: Boolean,
- template: String
- },
-
- data: function () { return ({
- preload: 1,
- videoAutoplay: false,
- delayControls: 3000,
- items: [],
- cls: 'uk-open',
- clsPage: 'uk-lightbox-page',
- selList: '.uk-lightbox-items',
- attrItem: 'uk-lightbox-item',
- selClose: '.uk-close-large',
- selCaption: '.uk-lightbox-caption',
- pauseOnHover: false,
- velocity: 2,
- Animations: Animations$1,
- template: "
"
- }); },
-
- created: function() {
-
- var $el = $(this.template);
- var list = $(this.selList, $el);
- this.items.forEach(function () { return append(list, '
'); });
-
- this.$mount(append(this.container, $el));
-
- },
-
- computed: {
-
- caption: function(ref, $el) {
- var selCaption = ref.selCaption;
-
- return $(selCaption, $el);
- }
-
- },
-
- events: [
-
- {
-
- name: (pointerMove + " " + pointerDown + " keydown"),
-
- handler: 'showControls'
-
- },
-
- {
-
- name: 'click',
-
- self: true,
-
- delegate: function() {
- return this.selSlides;
- },
-
- handler: function(e) {
-
- if (e.defaultPrevented) {
- return;
- }
-
- this.hide();
- }
-
- },
-
- {
-
- name: 'shown',
-
- self: true,
-
- handler: function() {
- this.showControls();
- }
-
- },
-
- {
-
- name: 'hide',
-
- self: true,
-
- handler: function() {
-
- this.hideControls();
-
- removeClass(this.slides, this.clsActive);
- Transition.stop(this.slides);
-
- }
- },
-
- {
-
- name: 'hidden',
-
- self: true,
-
- handler: function() {
- this.$destroy(true);
- }
-
- },
-
- {
-
- name: 'keyup',
-
- el: function() {
- return document;
- },
-
- handler: function(e) {
-
- if (!this.isToggled(this.$el) || !this.draggable) {
- return;
- }
-
- switch (e.keyCode) {
- case 37:
- this.show('previous');
- break;
- case 39:
- this.show('next');
- break;
- }
- }
- },
-
- {
-
- name: 'beforeitemshow',
-
- handler: function(e) {
-
- if (this.isToggled()) {
- return;
- }
-
- this.draggable = false;
-
- e.preventDefault();
-
- this.toggleElement(this.$el, true, false);
-
- this.animation = Animations$1['scale'];
- removeClass(e.target, this.clsActive);
- this.stack.splice(1, 0, this.index);
-
- }
-
- },
-
- {
-
- name: 'itemshow',
-
- handler: function() {
-
- html(this.caption, this.getItem().caption || '');
-
- for (var j = -this.preload; j <= this.preload; j++) {
- this.loadItem(this.index + j);
- }
-
- }
-
- },
-
- {
-
- name: 'itemshown',
-
- handler: function() {
- this.draggable = this.$props.draggable;
- }
-
- },
-
- {
-
- name: 'itemload',
-
- handler: function(_, item) {
- var this$1 = this;
-
-
- var src = item.source;
- var type = item.type;
- var alt = item.alt; if ( alt === void 0 ) alt = '';
- var poster = item.poster;
- var attrs = item.attrs; if ( attrs === void 0 ) attrs = {};
-
- this.setItem(item, ' ');
-
- if (!src) {
- return;
- }
-
- var matches;
- var iframeAttrs = {
- frameborder: '0',
- allow: 'autoplay',
- allowfullscreen: '',
- style: 'max-width: 100%; box-sizing: border-box;',
- 'uk-responsive': '',
- 'uk-video': ("" + (this.videoAutoplay))
- };
-
- // Image
- if (type === 'image' || src.match(/\.(avif|jpe?g|a?png|gif|svg|webp)($|\?)/i)) {
-
- getImage(src, attrs.srcset, attrs.size).then(
- function (ref) {
- var width = ref.width;
- var height = ref.height;
-
- return this$1.setItem(item, createEl('img', assign({src: src, width: width, height: height, alt: alt}, attrs)));
- },
- function () { return this$1.setError(item); }
- );
-
- // Video
- } else if (type === 'video' || src.match(/\.(mp4|webm|ogv)($|\?)/i)) {
-
- var video = createEl('video', assign({
- src: src,
- poster: poster,
- controls: '',
- playsinline: '',
- 'uk-video': ("" + (this.videoAutoplay))
- }, attrs));
-
- on(video, 'loadedmetadata', function () {
- attr(video, {width: video.videoWidth, height: video.videoHeight});
- this$1.setItem(item, video);
- });
- on(video, 'error', function () { return this$1.setError(item); });
-
- // Iframe
- } else if (type === 'iframe' || src.match(/\.(html|php)($|\?)/i)) {
-
- this.setItem(item, createEl('iframe', assign({
- src: src,
- frameborder: '0',
- allowfullscreen: '',
- class: 'uk-lightbox-iframe'
- }, attrs)));
-
- // YouTube
- } else if ((matches = src.match(/\/\/(?:.*?youtube(-nocookie)?\..*?[?&]v=|youtu\.be\/)([\w-]{11})[&?]?(.*)?/))) {
-
- this.setItem(item, createEl('iframe', assign({
- src: ("https://www.youtube/" + (matches[1] || '') + ".com/embed/" + (matches[2]) + (matches[3] ? ("?" + (matches[3])) : '')),
- width: 1920,
- height: 1080
- }, iframeAttrs, attrs)));
-
- // Vimeo
- } else if ((matches = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/))) {
-
- ajax(("https://vimeo.com/api/oembed.json?maxwidth=1920&url=" + (encodeURI(src))), {
- responseType: 'json',
- withCredentials: false
- }).then(
- function (ref) {
- var ref_response = ref.response;
- var height = ref_response.height;
- var width = ref_response.width;
-
- return this$1.setItem(item, createEl('iframe', assign({
- src: ("https://player.vimeo.com/video/" + (matches[1]) + (matches[2] ? ("?" + (matches[2])) : '')),
- width: width,
- height: height
- }, iframeAttrs, attrs)));
- },
- function () { return this$1.setError(item); }
- );
-
- }
-
- }
-
- }
-
- ],
-
- methods: {
-
- loadItem: function(index) {
- if ( index === void 0 ) index = this.index;
-
-
- var item = this.getItem(index);
-
- if (!this.getSlide(item).childElementCount) {
- trigger(this.$el, 'itemload', [item]);
- }
- },
-
- getItem: function(index) {
- if ( index === void 0 ) index = this.index;
-
- return this.items[getIndex(index, this.slides)];
- },
-
- setItem: function(item, content) {
- trigger(this.$el, 'itemloaded', [this, html(this.getSlide(item), content) ]);
- },
-
- getSlide: function(item) {
- return this.slides[this.items.indexOf(item)];
- },
-
- setError: function(item) {
- this.setItem(item, ' ');
- },
-
- showControls: function() {
-
- clearTimeout(this.controlsTimer);
- this.controlsTimer = setTimeout(this.hideControls, this.delayControls);
-
- addClass(this.$el, 'uk-active', 'uk-transition-active');
-
- },
-
- hideControls: function() {
- removeClass(this.$el, 'uk-active', 'uk-transition-active');
- }
-
- }
-
- };
-
- function createEl(tag, attrs) {
- var el = fragment(("<" + tag + ">"));
- attr(el, attrs);
- return el;
- }
-
- var lightbox = {
-
- install: install$1,
-
- props: {toggle: String},
-
- data: {toggle: 'a'},
-
- computed: {
-
- toggles: {
-
- get: function(ref, $el) {
- var toggle = ref.toggle;
-
- return $$(toggle, $el);
- },
-
- watch: function() {
- this.hide();
- }
-
- }
-
- },
-
- disconnected: function() {
- this.hide();
- },
-
- events: [
-
- {
-
- name: 'click',
-
- delegate: function() {
- return ((this.toggle) + ":not(.uk-disabled)");
- },
-
- handler: function(e) {
- e.preventDefault();
- this.show(e.current);
- }
-
- }
-
- ],
-
- methods: {
-
- show: function(index) {
- var this$1 = this;
-
-
- var items = uniqueBy(this.toggles.map(toItem), 'source');
-
- if (isElement(index)) {
- var ref = toItem(index);
- var source = ref.source;
- index = findIndex(items, function (ref) {
- var src = ref.source;
-
- return source === src;
- });
- }
-
- this.panel = this.panel || this.$create('lightboxPanel', assign({}, this.$props, {items: items}));
-
- on(this.panel.$el, 'hidden', function () { return this$1.panel = false; });
-
- return this.panel.show(index);
-
- },
-
- hide: function() {
-
- return this.panel && this.panel.hide();
-
- }
-
- }
-
- };
-
- function install$1(UIkit, Lightbox) {
-
- if (!UIkit.lightboxPanel) {
- UIkit.component('lightboxPanel', LightboxPanel);
- }
-
- assign(
- Lightbox.props,
- UIkit.component('lightboxPanel').options.props
- );
-
- }
-
- function toItem(el) {
-
- var item = {};
-
- ['href', 'caption', 'type', 'poster', 'alt', 'attrs'].forEach(function (attr) {
- item[attr === 'href' ? 'source' : attr] = data(el, attr);
- });
-
- item.attrs = parseOptions(item.attrs);
-
- return item;
- }
-
- var obj$1;
-
- var notification = {
-
- mixins: [Container],
-
- functional: true,
-
- args: ['message', 'status'],
-
- data: {
- message: '',
- status: '',
- timeout: 5000,
- group: null,
- pos: 'top-center',
- clsContainer: 'uk-notification',
- clsClose: 'uk-notification-close',
- clsMsg: 'uk-notification-message'
- },
-
- install: install,
-
- computed: {
-
- marginProp: function(ref) {
- var pos = ref.pos;
-
- return ("margin" + (startsWith(pos, 'top') ? 'Top' : 'Bottom'));
- },
-
- startProps: function() {
- var obj;
-
- return ( obj = {opacity: 0}, obj[this.marginProp] = -this.$el.offsetHeight, obj );
- }
-
- },
-
- created: function() {
-
- var container = $(("." + (this.clsContainer) + "-" + (this.pos)), this.container)
- || append(this.container, ("
"));
-
- this.$mount(append(container,
- ("")
- ));
-
- },
-
- connected: function() {
- var this$1 = this;
- var obj;
-
-
- var margin = toFloat(css(this.$el, this.marginProp));
- Transition.start(
- css(this.$el, this.startProps),
- ( obj = {opacity: 1}, obj[this.marginProp] = margin, obj )
- ).then(function () {
- if (this$1.timeout) {
- this$1.timer = setTimeout(this$1.close, this$1.timeout);
- }
- });
-
- },
-
- events: ( obj$1 = {
-
- click: function(e) {
- if (closest(e.target, 'a[href="#"],a[href=""]')) {
- e.preventDefault();
- }
- this.close();
- }
-
- }, obj$1[pointerEnter] = function () {
- if (this.timer) {
- clearTimeout(this.timer);
- }
- }, obj$1[pointerLeave] = function () {
- if (this.timeout) {
- this.timer = setTimeout(this.close, this.timeout);
- }
- }, obj$1 ),
-
- methods: {
-
- close: function(immediate) {
- var this$1 = this;
-
-
- var removeFn = function (el) {
-
- var container = parent(el);
-
- trigger(el, 'close', [this$1]);
- remove$1(el);
-
- if (container && !container.hasChildNodes()) {
- remove$1(container);
- }
-
- };
-
- if (this.timer) {
- clearTimeout(this.timer);
- }
-
- if (immediate) {
- removeFn(this.$el);
- } else {
- Transition.start(this.$el, this.startProps).then(removeFn);
- }
- }
-
- }
-
- };
-
- function install(UIkit) {
- UIkit.notification.closeAll = function (group, immediate) {
- apply$1(document.body, function (el) {
- var notification = UIkit.getComponent(el, 'notification');
- if (notification && (!group || group === notification.group)) {
- notification.close(immediate);
- }
- });
- };
- }
-
- var props = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity', 'stroke'];
-
- var Parallax = {
-
- mixins: [Media],
-
- props: props.reduce(function (props, prop) {
- props[prop] = 'list';
- return props;
- }, {}),
-
- data: props.reduce(function (data, prop) {
- data[prop] = undefined;
- return data;
- }, {}),
-
- computed: {
-
- props: function(properties, $el) {
- var this$1 = this;
-
-
- return props.reduce(function (props, prop) {
-
- if (isUndefined(properties[prop])) {
- return props;
- }
-
- var isColor = prop.match(/color/i);
- var isCssProp = isColor || prop === 'opacity';
-
- var pos, bgPos, diff;
- var steps = properties[prop].slice();
-
- if (isCssProp) {
- css($el, prop, '');
- }
-
- if (steps.length < 2) {
- steps.unshift((prop === 'scale'
- ? 1
- : isCssProp
- ? css($el, prop)
- : 0) || 0);
- }
-
- var unit = getUnit(steps);
-
- if (isColor) {
-
- var ref = $el.style;
- var color = ref.color;
- steps = steps.map(function (step) { return parseColor($el, step); });
- $el.style.color = color;
-
- } else if (startsWith(prop, 'bg')) {
-
- var attr = prop === 'bgy' ? 'height' : 'width';
- steps = steps.map(function (step) { return toPx(step, attr, this$1.$el); });
-
- css($el, ("background-position-" + (prop[2])), '');
- bgPos = css($el, 'backgroundPosition').split(' ')[prop[2] === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]
-
- if (this$1.covers) {
-
- var min = Math.min.apply(Math, steps);
- var max = Math.max.apply(Math, steps);
- var down = steps.indexOf(min) < steps.indexOf(max);
-
- diff = max - min;
-
- steps = steps.map(function (step) { return step - (down ? min : max); });
- pos = (down ? -diff : 0) + "px";
-
- } else {
-
- pos = bgPos;
-
- }
-
- } else {
-
- steps = steps.map(toFloat);
-
- }
-
- if (prop === 'stroke') {
-
- if (!steps.some(function (step) { return step; })) {
- return props;
- }
-
- var length = getMaxPathLength(this$1.$el);
- css($el, 'strokeDasharray', length);
-
- if (unit === '%') {
- steps = steps.map(function (step) { return step * length / 100; });
- }
-
- steps = steps.reverse();
-
- prop = 'strokeDashoffset';
- }
-
- props[prop] = {steps: steps, unit: unit, pos: pos, bgPos: bgPos, diff: diff};
-
- return props;
-
- }, {});
-
- },
-
- bgProps: function() {
- var this$1 = this;
-
- return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1.props; });
- },
-
- covers: function(_, $el) {
- return covers($el);
- }
-
- },
-
- disconnected: function() {
- delete this._image;
- },
-
- update: {
-
- read: function(data) {
- var this$1 = this;
-
-
- if (!this.matchMedia) {
- return;
- }
-
- if (!data.image && this.covers && this.bgProps.length) {
- var src = css(this.$el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1');
-
- if (src) {
- var img = new Image();
- img.src = src;
- data.image = img;
-
- if (!img.naturalWidth) {
- img.onload = function () { return this$1.$update(); };
- }
- }
-
- }
-
- var image = data.image;
-
- if (!image || !image.naturalWidth) {
- return;
- }
-
- var dimEl = {
- width: this.$el.offsetWidth,
- height: this.$el.offsetHeight
- };
- var dimImage = {
- width: image.naturalWidth,
- height: image.naturalHeight
- };
-
- var dim = Dimensions.cover(dimImage, dimEl);
-
- this.bgProps.forEach(function (prop) {
-
- var ref = this$1.props[prop];
- var diff = ref.diff;
- var bgPos = ref.bgPos;
- var steps = ref.steps;
- var attr = prop === 'bgy' ? 'height' : 'width';
- var span = dim[attr] - dimEl[attr];
-
- if (span < diff) {
- dimEl[attr] = dim[attr] + diff - span;
- } else if (span > diff) {
-
- var posPercentage = dimEl[attr] / toPx(bgPos, attr, this$1.$el);
-
- if (posPercentage) {
- this$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / posPercentage; });
- }
- }
-
- dim = Dimensions.cover(dimImage, dimEl);
- });
-
- data.dim = dim;
- },
-
- write: function(ref) {
- var dim = ref.dim;
-
-
- if (!this.matchMedia) {
- css(this.$el, {backgroundSize: '', backgroundRepeat: ''});
- return;
- }
-
- dim && css(this.$el, {
- backgroundSize: ((dim.width) + "px " + (dim.height) + "px"),
- backgroundRepeat: 'no-repeat'
- });
-
- },
-
- events: ['resize']
-
- },
-
- methods: {
-
- reset: function() {
- var this$1 = this;
-
- each(this.getCss(0), function (_, prop) { return css(this$1.$el, prop, ''); });
- },
-
- getCss: function(percent) {
-
- var ref = this;
- var props = ref.props;
- return Object.keys(props).reduce(function (css, prop) {
-
- var ref = props[prop];
- var steps = ref.steps;
- var unit = ref.unit;
- var pos = ref.pos;
- var value = getValue(steps, percent);
-
- switch (prop) {
-
- // transforms
- case 'x':
- case 'y': {
- unit = unit || 'px';
- css.transform += " translate" + (ucfirst(prop)) + "(" + (toFloat(value).toFixed(unit === 'px' ? 0 : 2)) + unit + ")";
- break;
- }
- case 'rotate':
- unit = unit || 'deg';
- css.transform += " rotate(" + (value + unit) + ")";
- break;
- case 'scale':
- css.transform += " scale(" + value + ")";
- break;
-
- // bg image
- case 'bgy':
- case 'bgx':
- css[("background-position-" + (prop[2]))] = "calc(" + pos + " + " + value + "px)";
- break;
-
- // color
- case 'color':
- case 'backgroundColor':
- case 'borderColor': {
-
- var ref$1 = getStep(steps, percent);
- var start = ref$1[0];
- var end = ref$1[1];
- var p = ref$1[2];
-
- css[prop] = "rgba(" + (start.map(function (value, i) {
- value = value + p * (end[i] - value);
- return i === 3 ? toFloat(value) : parseInt(value, 10);
- }).join(',')) + ")";
- break;
- }
- // CSS Filter
- case 'blur':
- unit = unit || 'px';
- css.filter += " blur(" + (value + unit) + ")";
- break;
- case 'hue':
- unit = unit || 'deg';
- css.filter += " hue-rotate(" + (value + unit) + ")";
- break;
- case 'fopacity':
- unit = unit || '%';
- css.filter += " opacity(" + (value + unit) + ")";
- break;
- case 'grayscale':
- case 'invert':
- case 'saturate':
- case 'sepia':
- unit = unit || '%';
- css.filter += " " + prop + "(" + (value + unit) + ")";
- break;
- default:
- css[prop] = value;
- }
-
- return css;
-
- }, {transform: '', filter: ''});
-
- }
-
- }
-
- };
-
- function parseColor(el, color) {
- return css(css(el, 'color', color), 'color')
- .split(/[(),]/g)
- .slice(1, -1)
- .concat(1)
- .slice(0, 4)
- .map(toFloat);
- }
-
- function getStep(steps, percent) {
- var count = steps.length - 1;
- var index = Math.min(Math.floor(count * percent), count - 1);
- var step = steps.slice(index, index + 2);
-
- step.push(percent === 1 ? 1 : percent % (1 / count) * count);
-
- return step;
- }
-
- function getValue(steps, percent, digits) {
- if ( digits === void 0 ) digits = 2;
-
- var ref = getStep(steps, percent);
- var start = ref[0];
- var end = ref[1];
- var p = ref[2];
- return (isNumber(start)
- ? start + Math.abs(start - end) * p * (start < end ? 1 : -1)
- : +end
- ).toFixed(digits);
- }
-
- function getUnit(steps) {
- return steps.reduce(function (unit, step) { return isString(step) && step.replace(/-|\d/g, '').trim() || unit; }, '');
- }
-
- function covers(el) {
- var ref = el.style;
- var backgroundSize = ref.backgroundSize;
- var covers = css(css(el, 'backgroundSize', ''), 'backgroundSize') === 'cover';
- el.style.backgroundSize = backgroundSize;
- return covers;
- }
-
- var parallax = {
-
- mixins: [Parallax],
-
- props: {
- target: String,
- viewport: Number,
- easing: Number
- },
-
- data: {
- target: false,
- viewport: 1,
- easing: 1
- },
-
- computed: {
-
- target: function(ref, $el) {
- var target = ref.target;
-
- return getOffsetElement(target && query(target, $el) || $el);
- }
-
- },
-
- update: {
-
- read: function(ref, types) {
- var percent = ref.percent;
-
-
- if (!types.has('scroll')) {
- percent = false;
- }
-
- if (!this.matchMedia) {
- return;
- }
-
- var prev = percent;
- percent = ease(scrolledOver(this.target) / (this.viewport || 1), this.easing);
-
- return {
- percent: percent,
- style: prev !== percent ? this.getCss(percent) : false
- };
- },
-
- write: function(ref) {
- var style = ref.style;
-
-
- if (!this.matchMedia) {
- this.reset();
- return;
- }
-
- style && css(this.$el, style);
-
- },
-
- events: ['scroll', 'resize']
- }
-
- };
-
- function ease(percent, easing) {
- return clamp(percent * (1 - (easing - easing * percent)));
- }
-
- // SVG elements do not inherit from HTMLElement
- function getOffsetElement(el) {
- return el
- ? 'offsetTop' in el
- ? el
- : getOffsetElement(parent(el))
- : document.body;
- }
-
- var SliderReactive = {
-
- update: {
-
- write: function() {
-
- if (this.stack.length || this.dragging) {
- return;
- }
-
- var index = this.getValidIndex(this.index);
-
- if (!~this.prevIndex || this.index !== index) {
- this.show(index);
- }
-
- },
-
- events: ['resize']
-
- }
-
- };
-
- function Transitioner (prev, next, dir, ref) {
- var center = ref.center;
- var easing = ref.easing;
- var list = ref.list;
-
-
- var deferred = new Deferred();
-
- var from = prev
- ? getLeft(prev, list, center)
- : getLeft(next, list, center) + dimensions(next).width * dir;
- var to = next
- ? getLeft(next, list, center)
- : from + dimensions(prev).width * dir * (isRtl ? -1 : 1);
-
- return {
-
- dir: dir,
-
- show: function(duration, percent, linear) {
- if ( percent === void 0 ) percent = 0;
-
-
- var timing = linear ? 'linear' : easing;
- duration -= Math.round(duration * clamp(percent, -1, 1));
-
- this.translate(percent);
-
- percent = prev ? percent : clamp(percent, 0, 1);
- triggerUpdate(this.getItemIn(), 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});
- prev && triggerUpdate(this.getItemIn(true), 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});
-
- Transition
- .start(list, {transform: translate(-to * (isRtl ? -1 : 1), 'px')}, duration, timing)
- .then(deferred.resolve, noop);
-
- return deferred.promise;
-
- },
-
- cancel: function() {
- Transition.cancel(list);
- },
-
- reset: function() {
- css(list, 'transform', '');
- },
-
- forward: function(duration, percent) {
- if ( percent === void 0 ) percent = this.percent();
-
- Transition.cancel(list);
- return this.show(duration, percent, true);
- },
-
- translate: function(percent) {
-
- var distance = this.getDistance() * dir * (isRtl ? -1 : 1);
-
- css(list, 'transform', translate(clamp(
- -to + (distance - distance * percent),
- -getWidth(list),
- dimensions(list).width
- ) * (isRtl ? -1 : 1), 'px'));
-
- var actives = this.getActives();
- var itemIn = this.getItemIn();
- var itemOut = this.getItemIn(true);
-
- percent = prev ? clamp(percent, -1, 1) : 0;
-
- children(list).forEach(function (slide) {
- var isActive = includes(actives, slide);
- var isIn = slide === itemIn;
- var isOut = slide === itemOut;
- var translateIn = isIn || !isOut && (isActive || dir * (isRtl ? -1 : 1) === -1 ^ getElLeft(slide, list) > getElLeft(prev || next));
-
- triggerUpdate(slide, ("itemtranslate" + (translateIn ? 'in' : 'out')), {
- dir: dir,
- percent: isOut
- ? 1 - percent
- : isIn
- ? percent
- : isActive
- ? 1
- : 0
- });
- });
-
- },
-
- percent: function() {
- return Math.abs((css(list, 'transform').split(',')[4] * (isRtl ? -1 : 1) + from) / (to - from));
- },
-
- getDistance: function() {
- return Math.abs(to - from);
- },
-
- getItemIn: function(out) {
- if ( out === void 0 ) out = false;
-
-
- var actives = this.getActives();
- var nextActives = inView(list, getLeft(next || prev, list, center));
-
- if (out) {
- var temp = actives;
- actives = nextActives;
- nextActives = temp;
- }
-
- return nextActives[findIndex(nextActives, function (el) { return !includes(actives, el); })];
-
- },
-
- getActives: function() {
- return inView(list, getLeft(prev || next, list, center));
- }
-
- };
-
- }
-
- function getLeft(el, list, center) {
-
- var left = getElLeft(el, list);
-
- return center
- ? left - centerEl(el, list)
- : Math.min(left, getMax(list));
-
- }
-
- function getMax(list) {
- return Math.max(0, getWidth(list) - dimensions(list).width);
- }
-
- function getWidth(list) {
- return children(list).reduce(function (right, el) { return dimensions(el).width + right; }, 0);
- }
-
- function centerEl(el, list) {
- return dimensions(list).width / 2 - dimensions(el).width / 2;
- }
-
- function getElLeft(el, list) {
- return el && (position(el).left + (isRtl ? dimensions(el).width - dimensions(list).width : 0)) * (isRtl ? -1 : 1) || 0;
- }
-
- function inView(list, listLeft) {
-
- listLeft -= 1;
- var listRight = listLeft + dimensions(list).width + 2;
-
- return children(list).filter(function (slide) {
- var slideLeft = getElLeft(slide, list);
- var slideRight = slideLeft + dimensions(slide).width;
-
- return slideLeft >= listLeft && slideRight <= listRight;
- });
- }
-
- function triggerUpdate(el, type, data) {
- trigger(el, createEvent(type, false, false, data));
- }
-
- var slider = {
-
- mixins: [Class, Slider, SliderReactive],
-
- props: {
- center: Boolean,
- sets: Boolean
- },
-
- data: {
- center: false,
- sets: false,
- attrItem: 'uk-slider-item',
- selList: '.uk-slider-items',
- selNav: '.uk-slider-nav',
- clsContainer: 'uk-slider-container',
- Transitioner: Transitioner
- },
-
- computed: {
-
- avgWidth: function() {
- return getWidth(this.list) / this.length;
- },
-
- finite: function(ref) {
- var finite = ref.finite;
-
- return finite || Math.ceil(getWidth(this.list)) < dimensions(this.list).width + getMaxElWidth(this.list) + this.center;
- },
-
- maxIndex: function() {
-
- if (!this.finite || this.center && !this.sets) {
- return this.length - 1;
- }
-
- if (this.center) {
- return last(this.sets);
- }
-
- var lft = 0;
- var max = getMax(this.list);
- var index = findIndex(this.slides, function (el) {
-
- if (lft >= max) {
- return true;
- }
-
- lft += dimensions(el).width;
-
- });
-
- return ~index ? index : this.length - 1;
- },
-
- sets: function(ref) {
- var this$1 = this;
- var sets = ref.sets;
-
-
- if (!sets) {
- return;
- }
-
- var width = dimensions(this.list).width / (this.center ? 2 : 1);
-
- var left = 0;
- var leftCenter = width;
- var slideLeft = 0;
-
- sets = sortBy$1(this.slides, 'offsetLeft').reduce(function (sets, slide, i) {
-
- var slideWidth = dimensions(slide).width;
- var slideRight = slideLeft + slideWidth;
-
- if (slideRight > left) {
-
- if (!this$1.center && i > this$1.maxIndex) {
- i = this$1.maxIndex;
- }
-
- if (!includes(sets, i)) {
-
- var cmp = this$1.slides[i + 1];
- if (this$1.center && cmp && slideWidth < leftCenter - dimensions(cmp).width / 2) {
- leftCenter -= slideWidth;
- } else {
- leftCenter = width;
- sets.push(i);
- left = slideLeft + width + (this$1.center ? slideWidth / 2 : 0);
- }
-
- }
- }
-
- slideLeft += slideWidth;
-
- return sets;
-
- }, []);
-
- return !isEmpty(sets) && sets;
-
- },
-
- transitionOptions: function() {
- return {
- center: this.center,
- list: this.list
- };
- }
-
- },
-
- connected: function() {
- toggleClass(this.$el, this.clsContainer, !$(("." + (this.clsContainer)), this.$el));
- },
-
- update: {
-
- write: function() {
- var this$1 = this;
-
- this.navItems.forEach(function (el) {
- var index = toNumber(data(el, this$1.attrItem));
- if (index !== false) {
- el.hidden = !this$1.maxIndex || index > this$1.maxIndex || this$1.sets && !includes(this$1.sets, index);
- }
- });
-
- if (this.length && !this.dragging && !this.stack.length) {
- this.reorder();
- this._translate(1);
- }
-
- var actives = this._getTransitioner(this.index).getActives();
- this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActive, includes(actives, slide)); });
-
- if (this.clsActivated && (!this.sets || includes(this.sets, toFloat(this.index)))) {
- this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActivated || '', includes(actives, slide)); });
- }
- },
-
- events: ['resize']
-
- },
-
- events: {
-
- beforeitemshow: function(e) {
-
- if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {
- this.index = this.getValidIndex();
- }
-
- var diff = Math.abs(
- this.index
- - this.prevIndex
- + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)
- );
-
- if (!this.dragging && diff > 1) {
-
- for (var i = 0; i < diff; i++) {
- this.stack.splice(1, 0, this.dir > 0 ? 'next' : 'previous');
- }
-
- e.preventDefault();
- return;
- }
-
- var index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex;
- this.duration = speedUp(this.avgWidth / this.velocity) * (dimensions(this.slides[index]).width / this.avgWidth);
-
- this.reorder();
-
- },
-
- itemshow: function() {
- if (~this.prevIndex) {
- addClass(this._getTransitioner().getItemIn(), this.clsActive);
- }
- }
-
- },
-
- methods: {
-
- reorder: function() {
- var this$1 = this;
-
-
- if (this.finite) {
- css(this.slides, 'order', '');
- return;
- }
-
- var index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;
-
- this.slides.forEach(function (slide, i) { return css(slide, 'order', this$1.dir > 0 && i < index
- ? 1
- : this$1.dir < 0 && i >= this$1.index
- ? -1
- : ''
- ); }
- );
-
- if (!this.center) {
- return;
- }
-
- var next = this.slides[index];
- var width = dimensions(this.list).width / 2 - dimensions(next).width / 2;
- var j = 0;
-
- while (width > 0) {
- var slideIndex = this.getIndex(--j + index, index);
- var slide = this.slides[slideIndex];
-
- css(slide, 'order', slideIndex > index ? -2 : -1);
- width -= dimensions(slide).width;
- }
-
- },
-
- getValidIndex: function(index, prevIndex) {
- if ( index === void 0 ) index = this.index;
- if ( prevIndex === void 0 ) prevIndex = this.prevIndex;
-
-
- index = this.getIndex(index, prevIndex);
-
- if (!this.sets) {
- return index;
- }
-
- var prev;
-
- do {
-
- if (includes(this.sets, index)) {
- return index;
- }
-
- prev = index;
- index = this.getIndex(index + this.dir, prevIndex);
-
- } while (index !== prev);
-
- return index;
- }
-
- }
-
- };
-
- function getMaxElWidth(list) {
- return Math.max.apply(Math, [ 0 ].concat( children(list).map(function (el) { return dimensions(el).width; }) ));
- }
-
- var sliderParallax = {
-
- mixins: [Parallax],
-
- data: {
- selItem: '!li'
- },
-
- computed: {
-
- item: function(ref, $el) {
- var selItem = ref.selItem;
-
- return query(selItem, $el);
- }
-
- },
-
- events: [
-
- {
- name: 'itemin itemout',
-
- self: true,
-
- el: function() {
- return this.item;
- },
-
- handler: function(ref) {
- var this$1 = this;
- var type = ref.type;
- var ref_detail = ref.detail;
- var percent = ref_detail.percent;
- var duration = ref_detail.duration;
- var timing = ref_detail.timing;
- var dir = ref_detail.dir;
-
-
- fastdom.read(function () {
- var propsFrom = this$1.getCss(getCurrentPercent(type, dir, percent));
- var propsTo = this$1.getCss(isIn(type) ? .5 : dir > 0 ? 1 : 0);
- fastdom.write(function () {
- css(this$1.$el, propsFrom);
- Transition.start(this$1.$el, propsTo, duration, timing).catch(noop);
- });
- });
-
- }
- },
-
- {
- name: 'transitioncanceled transitionend',
-
- self: true,
-
- el: function() {
- return this.item;
- },
-
- handler: function() {
- Transition.cancel(this.$el);
- }
-
- },
-
- {
- name: 'itemtranslatein itemtranslateout',
-
- self: true,
-
- el: function() {
- return this.item;
- },
-
- handler: function(ref) {
- var this$1 = this;
- var type = ref.type;
- var ref_detail = ref.detail;
- var percent = ref_detail.percent;
- var dir = ref_detail.dir;
-
- fastdom.read(function () {
- var props = this$1.getCss(getCurrentPercent(type, dir, percent));
- fastdom.write(function () { return css(this$1.$el, props); });
- });
- }
- }
-
- ]
-
- };
-
- function isIn(type) {
- return endsWith(type, 'in');
- }
-
- function getCurrentPercent(type, dir, percent) {
-
- percent /= 2;
-
- return !isIn(type)
- ? dir < 0
- ? percent
- : 1 - percent
- : dir < 0
- ? 1 - percent
- : percent;
- }
-
- var Animations = assign({}, Animations$2, {
-
- fade: {
-
- show: function() {
- return [
- {opacity: 0, zIndex: 0},
- {zIndex: -1}
- ];
- },
-
- percent: function(current) {
- return 1 - css(current, 'opacity');
- },
-
- translate: function(percent) {
- return [
- {opacity: 1 - percent, zIndex: 0},
- {zIndex: -1}
- ];
- }
-
- },
-
- scale: {
-
- show: function() {
- return [
- {opacity: 0, transform: scale3d(1 + .5), zIndex: 0},
- {zIndex: -1}
- ];
- },
-
- percent: function(current) {
- return 1 - css(current, 'opacity');
- },
-
- translate: function(percent) {
- return [
- {opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0},
- {zIndex: -1}
- ];
- }
-
- },
-
- pull: {
-
- show: function(dir) {
- return dir < 0
- ? [
- {transform: translate(30), zIndex: -1},
- {transform: translate(), zIndex: 0}
- ]
- : [
- {transform: translate(-100), zIndex: 0},
- {transform: translate(), zIndex: -1}
- ];
- },
-
- percent: function(current, next, dir) {
- return dir < 0
- ? 1 - translated(next)
- : translated(current);
- },
-
- translate: function(percent, dir) {
- return dir < 0
- ? [
- {transform: translate(30 * percent), zIndex: -1},
- {transform: translate(-100 * (1 - percent)), zIndex: 0}
- ]
- : [
- {transform: translate(-percent * 100), zIndex: 0},
- {transform: translate(30 * (1 - percent)), zIndex: -1}
- ];
- }
-
- },
-
- push: {
-
- show: function(dir) {
- return dir < 0
- ? [
- {transform: translate(100), zIndex: 0},
- {transform: translate(), zIndex: -1}
- ]
- : [
- {transform: translate(-30), zIndex: -1},
- {transform: translate(), zIndex: 0}
- ];
- },
-
- percent: function(current, next, dir) {
- return dir > 0
- ? 1 - translated(next)
- : translated(current);
- },
-
- translate: function(percent, dir) {
- return dir < 0
- ? [
- {transform: translate(percent * 100), zIndex: 0},
- {transform: translate(-30 * (1 - percent)), zIndex: -1}
- ]
- : [
- {transform: translate(-30 * percent), zIndex: -1},
- {transform: translate(100 * (1 - percent)), zIndex: 0}
- ];
- }
-
- }
-
- });
-
- var slideshow = {
-
- mixins: [Class, Slideshow, SliderReactive],
-
- props: {
- ratio: String,
- minHeight: Number,
- maxHeight: Number
- },
-
- data: {
- ratio: '16:9',
- minHeight: false,
- maxHeight: false,
- selList: '.uk-slideshow-items',
- attrItem: 'uk-slideshow-item',
- selNav: '.uk-slideshow-nav',
- Animations: Animations
- },
-
- update: {
-
- read: function() {
-
- var ref = this.ratio.split(':').map(Number);
- var width = ref[0];
- var height = ref[1];
-
- height = height * this.list.offsetWidth / width || 0;
-
- if (this.minHeight) {
- height = Math.max(this.minHeight, height);
- }
-
- if (this.maxHeight) {
- height = Math.min(this.maxHeight, height);
- }
-
- return {height: height - boxModelAdjust(this.list, 'height', 'content-box')};
- },
-
- write: function(ref) {
- var height = ref.height;
-
- height > 0 && css(this.list, 'minHeight', height);
- },
-
- events: ['resize']
-
- }
-
- };
-
- var sortable = {
-
- mixins: [Class, Animate],
-
- props: {
- group: String,
- threshold: Number,
- clsItem: String,
- clsPlaceholder: String,
- clsDrag: String,
- clsDragState: String,
- clsBase: String,
- clsNoDrag: String,
- clsEmpty: String,
- clsCustom: String,
- handle: String
- },
-
- data: {
- group: false,
- threshold: 5,
- clsItem: 'uk-sortable-item',
- clsPlaceholder: 'uk-sortable-placeholder',
- clsDrag: 'uk-sortable-drag',
- clsDragState: 'uk-drag',
- clsBase: 'uk-sortable',
- clsNoDrag: 'uk-sortable-nodrag',
- clsEmpty: 'uk-sortable-empty',
- clsCustom: '',
- handle: false,
- pos: {}
- },
-
- created: function() {
- var this$1 = this;
-
- ['init', 'start', 'move', 'end'].forEach(function (key) {
- var fn = this$1[key];
- this$1[key] = function (e) {
- assign(this$1.pos, getEventPos(e));
- fn(e);
- };
- });
- },
-
- events: {
-
- name: pointerDown,
- passive: false,
- handler: 'init'
-
- },
-
- computed: {
-
- target: function() {
- return (this.$el.tBodies || [this.$el])[0];
- },
-
- items: function() {
- return children(this.target);
- },
-
- isEmpty: {
-
- get: function() {
- return isEmpty(this.items);
- },
-
- watch: function(empty) {
- toggleClass(this.target, this.clsEmpty, empty);
- },
-
- immediate: true
-
- },
-
- handles: {
-
- get: function(ref, el) {
- var handle = ref.handle;
-
- return handle ? $$(handle, el) : this.items;
- },
-
- watch: function(handles, prev) {
- css(prev, {touchAction: '', userSelect: ''});
- css(handles, {touchAction: hasTouch ? 'none' : '', userSelect: 'none'}); // touchAction set to 'none' causes a performance drop in Chrome 80
- },
-
- immediate: true
-
- }
-
- },
-
- update: {
-
- write: function(data) {
-
- if (!this.drag || !parent(this.placeholder)) {
- return;
- }
-
- var ref = this;
- var ref_pos = ref.pos;
- var x = ref_pos.x;
- var y = ref_pos.y;
- var ref_origin = ref.origin;
- var offsetTop = ref_origin.offsetTop;
- var offsetLeft = ref_origin.offsetLeft;
- var placeholder = ref.placeholder;
-
- css(this.drag, {
- top: y - offsetTop,
- left: x - offsetLeft
- });
-
- var sortable = this.getSortable(document.elementFromPoint(x, y));
-
- if (!sortable) {
- return;
- }
-
- var items = sortable.items;
-
- if (items.some(Transition.inProgress)) {
- return;
- }
-
- var target = findTarget(items, {x: x, y: y});
-
- if (items.length && (!target || target === placeholder)) {
- return;
- }
-
- var previous = this.getSortable(placeholder);
- var insertTarget = findInsertTarget(sortable.target, target, placeholder, x, y, sortable === previous && data.moved !== target);
-
- if (insertTarget === false) {
- return;
- }
-
- if (insertTarget && placeholder === insertTarget) {
- return;
- }
-
- if (sortable !== previous) {
- previous.remove(placeholder);
- data.moved = target;
- } else {
- delete data.moved;
- }
-
- sortable.insert(placeholder, insertTarget);
-
- this.touched.add(sortable);
- },
-
- events: ['move']
-
- },
-
- methods: {
-
- init: function(e) {
-
- var target = e.target;
- var button = e.button;
- var defaultPrevented = e.defaultPrevented;
- var ref = this.items.filter(function (el) { return within(target, el); });
- var placeholder = ref[0];
-
- if (!placeholder
- || defaultPrevented
- || button > 0
- || isInput(target)
- || within(target, ("." + (this.clsNoDrag)))
- || this.handle && !within(target, this.handle)
- ) {
- return;
- }
-
- e.preventDefault();
-
- this.touched = new Set([this]);
- this.placeholder = placeholder;
- this.origin = assign({target: target, index: index(placeholder)}, this.pos);
-
- on(document, pointerMove, this.move);
- on(document, pointerUp, this.end);
-
- if (!this.threshold) {
- this.start(e);
- }
-
- },
-
- start: function(e) {
-
- this.drag = appendDrag(this.$container, this.placeholder);
- var ref = this.placeholder.getBoundingClientRect();
- var left = ref.left;
- var top = ref.top;
- assign(this.origin, {offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top});
-
- addClass(this.drag, this.clsDrag, this.clsCustom);
- addClass(this.placeholder, this.clsPlaceholder);
- addClass(this.items, this.clsItem);
- addClass(document.documentElement, this.clsDragState);
-
- trigger(this.$el, 'start', [this, this.placeholder]);
-
- trackScroll(this.pos);
-
- this.move(e);
- },
-
- move: function(e) {
-
- if (this.drag) {
- this.$emit('move');
- } else if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {
- this.start(e);
- }
-
- },
-
- end: function() {
- var this$1 = this;
-
-
- off(document, pointerMove, this.move);
- off(document, pointerUp, this.end);
- off(window, 'scroll', this.scroll);
-
- if (!this.drag) {
- return;
- }
-
- untrackScroll();
-
- var sortable = this.getSortable(this.placeholder);
-
- if (this === sortable) {
- if (this.origin.index !== index(this.placeholder)) {
- trigger(this.$el, 'moved', [this, this.placeholder]);
- }
- } else {
- trigger(sortable.$el, 'added', [sortable, this.placeholder]);
- trigger(this.$el, 'removed', [this, this.placeholder]);
- }
-
- trigger(this.$el, 'stop', [this, this.placeholder]);
-
- remove$1(this.drag);
- this.drag = null;
-
- this.touched.forEach(function (ref) {
- var clsPlaceholder = ref.clsPlaceholder;
- var clsItem = ref.clsItem;
-
- return this$1.touched.forEach(function (sortable) { return removeClass(sortable.items, clsPlaceholder, clsItem); }
- );
- }
- );
- this.touched = null;
- removeClass(document.documentElement, this.clsDragState);
-
- },
-
- insert: function(element, target) {
- var this$1 = this;
-
-
- addClass(this.items, this.clsItem);
-
- var insert = function () { return target
- ? before(target, element)
- : append(this$1.target, element); };
-
- this.animate(insert);
-
- },
-
- remove: function(element) {
-
- if (!within(element, this.target)) {
- return;
- }
-
- this.animate(function () { return remove$1(element); });
-
- },
-
- getSortable: function(element) {
- do {
- var sortable = this.$getComponent(element, 'sortable');
-
- if (sortable && (sortable === this || this.group !== false && sortable.group === this.group)) {
- return sortable;
- }
- } while ((element = parent(element)));
- }
-
- }
-
- };
-
- var trackTimer;
- function trackScroll(pos) {
-
- var last = Date.now();
- trackTimer = setInterval(function () {
-
- var x = pos.x;
- var y = pos.y;
- y += window.pageYOffset;
-
- var dist = (Date.now() - last) * .3;
- last = Date.now();
-
- scrollParents(document.elementFromPoint(x, pos.y)).reverse().some(function (scrollEl) {
-
- var scroll = scrollEl.scrollTop;
- var scrollHeight = scrollEl.scrollHeight;
-
- var ref = offset(getViewport$1(scrollEl));
- var top = ref.top;
- var bottom = ref.bottom;
- var height = ref.height;
-
- if (top < y && top + 35 > y) {
- scroll -= dist;
- } else if (bottom > y && bottom - 35 < y) {
- scroll += dist;
- } else {
- return;
- }
-
- if (scroll > 0 && scroll < scrollHeight - height) {
- scrollTop(scrollEl, scroll);
- return true;
- }
-
- });
-
- }, 15);
-
- }
-
- function untrackScroll() {
- clearInterval(trackTimer);
- }
-
- function appendDrag(container, element) {
- var clone = append(container, element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2'));
-
- css(clone, 'margin', '0', 'important');
- css(clone, assign({
- boxSizing: 'border-box',
- width: element.offsetWidth,
- height: element.offsetHeight
- }, css(element, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));
-
- height(clone.firstElementChild, height(element.firstElementChild));
-
- return clone;
- }
-
- function findTarget(items, point) {
- return items[findIndex(items, function (item) { return pointInRect(point, item.getBoundingClientRect()); })];
- }
-
- function findInsertTarget(list, target, placeholder, x, y, sameList) {
-
- if (!children(list).length) {
- return;
- }
-
- var rect = target.getBoundingClientRect();
- if (!sameList) {
-
- if (!isHorizontal(list, placeholder)) {
- return y < rect.top + rect.height / 2
- ? target
- : target.nextElementSibling;
- }
-
- return target;
- }
-
- var placeholderRect = placeholder.getBoundingClientRect();
- var sameRow = linesIntersect(
- [rect.top, rect.bottom],
- [placeholderRect.top, placeholderRect.bottom]
- );
-
- var pointerPos = sameRow ? x : y;
- var lengthProp = sameRow ? 'width' : 'height';
- var startProp = sameRow ? 'left' : 'top';
- var endProp = sameRow ? 'right' : 'bottom';
-
- var diff = placeholderRect[lengthProp] < rect[lengthProp] ? rect[lengthProp] - placeholderRect[lengthProp] : 0;
-
- if (placeholderRect[startProp] < rect[startProp]) {
-
- if (diff && pointerPos < rect[startProp] + diff) {
- return false;
- }
-
- return target.nextElementSibling;
- }
-
- if (diff && pointerPos > rect[endProp] - diff) {
- return false;
- }
-
- return target;
- }
-
- function isHorizontal(list, placeholder) {
-
- var single = children(list).length === 1;
-
- if (single) {
- append(list, placeholder);
- }
-
- var items = children(list);
- var isHorizontal = items.some(function (el, i) {
- var rectA = el.getBoundingClientRect();
- return items.slice(i + 1).some(function (el) {
- var rectB = el.getBoundingClientRect();
- return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);
- });
- });
-
- if (single) {
- remove$1(placeholder);
- }
-
- return isHorizontal;
- }
-
- function linesIntersect(lineA, lineB) {
- return lineA[1] > lineB[0] && lineB[1] > lineA[0];
- }
-
- var obj;
-
- var tooltip = {
-
- mixins: [Container, Togglable, Position],
-
- args: 'title',
-
- props: {
- delay: Number,
- title: String
- },
-
- data: {
- pos: 'top',
- title: '',
- delay: 0,
- animation: ['uk-animation-scale-up'],
- duration: 100,
- cls: 'uk-active',
- clsPos: 'uk-tooltip'
- },
-
- beforeConnect: function() {
- this._hasTitle = hasAttr(this.$el, 'title');
- attr(this.$el, 'title', '');
- this.updateAria(false);
- makeFocusable(this.$el);
- },
-
- disconnected: function() {
- this.hide();
- attr(this.$el, 'title', this._hasTitle ? this.title : null);
- },
-
- methods: {
-
- show: function() {
- var this$1 = this;
-
-
- if (this.isToggled(this.tooltip || null) || !this.title) {
- return;
- }
-
- this._unbind = once(document, ("show keydown " + pointerDown), this.hide, false, function (e) { return e.type === pointerDown && !within(e.target, this$1.$el)
- || e.type === 'keydown' && e.keyCode === 27
- || e.type === 'show' && e.detail[0] !== this$1 && e.detail[0].$name === this$1.$name; }
- );
-
- clearTimeout(this.showTimer);
- this.showTimer = setTimeout(this._show, this.delay);
- },
-
- hide: function() {
- var this$1 = this;
-
-
- if (matches(this.$el, 'input:focus')) {
- return;
- }
-
- clearTimeout(this.showTimer);
-
- if (!this.isToggled(this.tooltip || null)) {
- return;
- }
-
- this.toggleElement(this.tooltip, false, false).then(function () {
- this$1.tooltip = remove$1(this$1.tooltip);
- this$1._unbind();
- });
- },
-
- _show: function() {
- var this$1 = this;
-
-
- this.tooltip = append(this.container,
- ("")
- );
-
- on(this.tooltip, 'toggled', function (e, toggled) {
-
- this$1.updateAria(toggled);
-
- if (!toggled) {
- return;
- }
-
- this$1.positionAt(this$1.tooltip, this$1.$el);
-
- this$1.origin = this$1.getAxis() === 'y'
- ? ((flipPosition(this$1.dir)) + "-" + (this$1.align))
- : ((this$1.align) + "-" + (flipPosition(this$1.dir)));
- });
-
- this.toggleElement(this.tooltip, true);
-
- },
-
- updateAria: function(toggled) {
- attr(this.$el, 'aria-expanded', toggled);
- }
-
- },
-
- events: ( obj = {
-
- focus: 'show',
- blur: 'hide'
-
- }, obj[(pointerEnter + " " + pointerLeave)] = function (e) {
- if (!isTouch(e)) {
- this[e.type === pointerEnter ? 'show' : 'hide']();
- }
- }, obj[pointerDown] = function (e) {
- if (isTouch(e)) {
- this.show();
- }
- }, obj )
-
- };
-
- function makeFocusable(el) {
- if (!isFocusable(el)) {
- attr(el, 'tabindex', '0');
- }
- }
-
- var upload = {
-
- props: {
- allow: String,
- clsDragover: String,
- concurrent: Number,
- maxSize: Number,
- method: String,
- mime: String,
- msgInvalidMime: String,
- msgInvalidName: String,
- msgInvalidSize: String,
- multiple: Boolean,
- name: String,
- params: Object,
- type: String,
- url: String
- },
-
- data: {
- allow: false,
- clsDragover: 'uk-dragover',
- concurrent: 1,
- maxSize: 0,
- method: 'POST',
- mime: false,
- msgInvalidMime: 'Invalid File Type: %s',
- msgInvalidName: 'Invalid File Name: %s',
- msgInvalidSize: 'Invalid File Size: %s Kilobytes Max',
- multiple: false,
- name: 'files[]',
- params: {},
- type: '',
- url: '',
- abort: noop,
- beforeAll: noop,
- beforeSend: noop,
- complete: noop,
- completeAll: noop,
- error: noop,
- fail: noop,
- load: noop,
- loadEnd: noop,
- loadStart: noop,
- progress: noop
- },
-
- events: {
-
- change: function(e) {
-
- if (!matches(e.target, 'input[type="file"]')) {
- return;
- }
-
- e.preventDefault();
-
- if (e.target.files) {
- this.upload(e.target.files);
- }
-
- e.target.value = '';
- },
-
- drop: function(e) {
- stop(e);
-
- var transfer = e.dataTransfer;
-
- if (!transfer || !transfer.files) {
- return;
- }
-
- removeClass(this.$el, this.clsDragover);
-
- this.upload(transfer.files);
- },
-
- dragenter: function(e) {
- stop(e);
- },
-
- dragover: function(e) {
- stop(e);
- addClass(this.$el, this.clsDragover);
- },
-
- dragleave: function(e) {
- stop(e);
- removeClass(this.$el, this.clsDragover);
- }
-
- },
-
- methods: {
-
- upload: function(files) {
- var this$1 = this;
-
-
- if (!files.length) {
- return;
- }
-
- trigger(this.$el, 'upload', [files]);
-
- for (var i = 0; i < files.length; i++) {
-
- if (this.maxSize && this.maxSize * 1000 < files[i].size) {
- this.fail(this.msgInvalidSize.replace('%s', this.maxSize));
- return;
- }
-
- if (this.allow && !match(this.allow, files[i].name)) {
- this.fail(this.msgInvalidName.replace('%s', this.allow));
- return;
- }
-
- if (this.mime && !match(this.mime, files[i].type)) {
- this.fail(this.msgInvalidMime.replace('%s', this.mime));
- return;
- }
-
- }
-
- if (!this.multiple) {
- files = [files[0]];
- }
-
- this.beforeAll(this, files);
-
- var chunks = chunk(files, this.concurrent);
- var upload = function (files) {
-
- var data = new FormData();
-
- files.forEach(function (file) { return data.append(this$1.name, file); });
-
- for (var key in this$1.params) {
- data.append(key, this$1.params[key]);
- }
-
- ajax(this$1.url, {
- data: data,
- method: this$1.method,
- responseType: this$1.type,
- beforeSend: function (env) {
-
- var xhr = env.xhr;
- xhr.upload && on(xhr.upload, 'progress', this$1.progress);
- ['loadStart', 'load', 'loadEnd', 'abort'].forEach(function (type) { return on(xhr, type.toLowerCase(), this$1[type]); }
- );
-
- return this$1.beforeSend(env);
-
- }
- }).then(
- function (xhr) {
-
- this$1.complete(xhr);
-
- if (chunks.length) {
- upload(chunks.shift());
- } else {
- this$1.completeAll(xhr);
- }
-
- },
- function (e) { return this$1.error(e); }
- );
-
- };
-
- upload(chunks.shift());
-
- }
-
- }
-
- };
-
- function match(pattern, path) {
- return path.match(new RegExp(("^" + (pattern.replace(/\//g, '\\/').replace(/\*\*/g, '(\\/[^\\/]+)*').replace(/\*/g, '[^\\/]+').replace(/((?!\\))\?/g, '$1.')) + "$"), 'i'));
- }
-
- function chunk(files, size) {
- var chunks = [];
- for (var i = 0; i < files.length; i += size) {
- var chunk = [];
- for (var j = 0; j < size; j++) {
- chunk.push(files[i + j]);
- }
- chunks.push(chunk);
- }
- return chunks;
- }
-
- function stop(e) {
- e.preventDefault();
- e.stopPropagation();
- }
-
- var components = /*#__PURE__*/Object.freeze({
- __proto__: null,
- Countdown: countdown,
- Filter: filter,
- Lightbox: lightbox,
- LightboxPanel: LightboxPanel,
- Notification: notification,
- Parallax: parallax,
- Slider: slider,
- SliderParallax: sliderParallax,
- Slideshow: slideshow,
- SlideshowParallax: sliderParallax,
- Sortable: sortable,
- Tooltip: tooltip,
- Upload: upload
- });
-
- each(components, function (component, name) { return UIkit.component(name, component); }
- );
-
- return UIkit;
-
-})));
diff --git a/docs/assets/js/uikit.min.js b/docs/assets/js/uikit.min.js
deleted file mode 100644
index 5c2f15162b..0000000000
--- a/docs/assets/js/uikit.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! UIkit 3.7.0 | https://www.getuikit.com | (c) 2014 - 2021 YOOtheme | MIT License */
-
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("uikit",e):(t="undefined"!=typeof globalThis?globalThis:t||self).UIkit=e()}(this,function(){"use strict";var t=Object.prototype,n=t.hasOwnProperty;function c(t,e){return n.call(t,e)}var e=/\B([A-Z])/g,d=rt(function(t){return t.replace(e,"-$1").toLowerCase()}),i=/-(\w)/g,f=rt(function(t){return t.replace(i,r)}),p=rt(function(t){return t.length?r(0,t.charAt(0))+t.slice(1):""});function r(t,e){return e?e.toUpperCase():""}var o=String.prototype,s=o.startsWith||function(t){return 0===this.lastIndexOf(t,0)};function g(t,e){return s.call(t,e)}var a=o.endsWith||function(t){return this.substr(-t.length)===t};function u(t,e){return a.call(t,e)}var h=Array.prototype,l=function(t,e){return!!~this.indexOf(t,e)},m=o.includes||l,v=h.includes||l;function w(t,e){return t&&(z(t)?m:v).call(t,e)}var b=h.findIndex||function(t){for(var e=arguments,n=0;n=e.left&&t.y<=e.bottom&&t.y>=e.top}var nt={ratio:function(t,e,n){var i="width"===e?"height":"width",r={};return r[i]=t[e]?Math.round(n*t[i]/t[e]):t[i],r[e]=n,r},contain:function(n,i){var r=this;return G(n=Y({},n),function(t,e){return n=n[e]>i[e]?r.ratio(n,e,i[e]):n}),n},cover:function(n,i){var r=this;return G(n=this.contain(n,i),function(t,e){return n=n[e]")&&(e=e.slice(1)),_(t)?zt.call(t,e):W(t).map(function(t){return Nt(t,e)}).filter(Boolean)}function Bt(t,e){return z(e)?Mt(t,e)||!!Nt(t,e):t===e||(T(e)?e.documentElement:F(e)).contains(F(t))}function Dt(t,e){for(var n=[];t=Tt(t);)e&&!Mt(t,e)||n.push(t);return n}function Ot(t,e){t=(t=F(t))?W(t.children):[];return e?Ct(t,e):t}function Pt(t,e){return e?W(t).indexOf(F(e)):Ot(Tt(t)).indexOf(t)}function Ht(t,e){return Ft(t,jt(t,e))}function Lt(t,e){return Wt(t,jt(t,e))}function jt(t,e){return void 0===e&&(e=document),z(t)&&Ut(t)||T(e)?e:e.ownerDocument}function Ft(t,e){return F(Vt(t,e,"querySelector"))}function Wt(t,e){return W(Vt(t,e,"querySelectorAll"))}function Vt(t,r,e){if(void 0===r&&(r=document),!t||!z(t))return t;t=t.replace(qt,"$1 *"),Ut(t)&&(t=Xt(t).map(function(t){var e,n,i=r;return"!"===t[0]&&(n=t.substr(1).trim().split(" "),i=Nt(Tt(r),n[0]),t=n.slice(1).join(" ").trim()),"-"===t[0]&&(e=t.substr(1).trim().split(" "),i=Mt(n=(i||r).previousElementSibling,t.substr(1))?n:null,t=e.slice(1).join(" ")),i?function(t){var e=[];for(;t.parentNode;){if(t.id){e.unshift("#"+Kt(t.id));break}var n=t.tagName;"HTML"!==n&&(n+=":nth-child("+(Pt(t)+1)+")"),e.unshift(n),t=t.parentNode}return e.join(" > ")}(i)+" "+t:null}).filter(Boolean).join(","),r=document);try{return r[e](t)}catch(t){return null}}var Rt=/(^|[^\\],)\s*[!>+~-]/,qt=/([!>+~-])(?=\s+[!>+~-]|\s*$)/g,Ut=rt(function(t){return t.match(Rt)}),Yt=/.*?[^\\](?:,|$)/g,Xt=rt(function(t){return t.match(Yt).map(function(t){return t.replace(/,$/,"").trim()})});var Gt=ct&&window.CSS&&CSS.escape||function(t){return t.replace(/([^\x7f-\uFFFF\w-])/g,function(t){return"\\"+t})};function Kt(t){return z(t)?Gt.call(null,t):""}function Jt(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n,i,r=ne(t),o=r[0],s=r[1],a=r[2],u=r[3],c=r[4],o=se(o);return 1]*>/,Ce=/^<(\w+)\s*\/?>(?:<\/\1>)?$/;function _e(t){var e=Ce.exec(t);if(e)return document.createElement(e[1]);e=document.createElement("div");return Te.test(t)?e.insertAdjacentHTML("beforeend",t.trim()):e.textContent=t,1qn(t))})).reverse()}function Rn(t){return t===Un(t)?window:t}function qn(t){return(t===Un(t)?document.documentElement:t).clientHeight}function Un(t){t=V(t).document;return t.scrollingElement||t.documentElement}var Yn={width:["x","left","right"],height:["y","top","bottom"]};function Xn(t,e,h,l,d,n,i,r){h=Kn(h),l=Kn(l);var f={element:h,target:l};if(!t||!e)return f;var o,p=sn(t),m=sn(e),g=m;return Gn(g,h,p,-1),Gn(g,l,m,1),d=Jn(d,p.width,p.height),n=Jn(n,m.width,m.height),d.x+=n.x,d.y+=n.y,g.left+=d.x,g.top+=d.y,i&&(o=Vn(t).map(Rn),r&&!w(o,r)&&o.unshift(r),o=o.map(function(t){return sn(t)}),G(Yn,function(t,s){var a=t[0],u=t[1],c=t[2];!0!==i&&!w(i,a)||o.some(function(n){var t=h[a]===u?-p[s]:h[a]===c?p[s]:0,e=l[a]===u?m[s]:l[a]===c?-m[s]:0;if(g[u]n[c]){var i=p[s]/2,r="center"===l[a]?-m[s]/2:0;return"center"===h[a]&&(o(i,r)||o(-i,-r))||o(t,e)}function o(e,t){t=L((g[u]+e+t-2*d[a]).toFixed(4));if(t>=n[u]&&t+p[s]<=n[c])return g[u]=t,["element","target"].forEach(function(t){f[t][a]=e?f[t][a]===Yn[s][1]?Yn[s][2]:Yn[s][1]:f[t][a]}),!0}})})),sn(t,g),f}function Gn(r,o,s,a){G(Yn,function(t,e){var n=t[0],i=t[1],t=t[2];o[n]===t?r[i]+=s[e]*a:"center"===o[n]&&(r[i]+=s[e]*a/2)})}function Kn(t){var e=/left|center|right/,n=/top|center|bottom/;return 1===(t=(t||"").split(" ")).length&&(t=e.test(t[0])?t.concat("center"):n.test(t[0])?["center"].concat(t):["center","center"]),{x:e.test(t[0])?t[0]:"center",y:n.test(t[1])?t[1]:"center"}}function Jn(t,e,n){var i=(t||"").split(" "),t=i[0],i=i[1];return{x:t?L(t)*(u(t,"%")?e/100:1):0,y:i?L(i)*(u(i,"%")?n/100:1):0}}var Zn=Object.freeze({__proto__:null,ajax:me,getImage:ge,transition:Je,Transition:Ze,animate:tn,Animation:nn,attr:ot,hasAttr:st,removeAttr:at,data:ut,addClass:Be,removeClass:De,removeClasses:Oe,replaceClass:Pe,hasClass:He,toggleClass:Le,dimensions:on,offset:sn,position:an,offsetPosition:un,height:cn,width:hn,boxModelAdjust:dn,flipPosition:fn,toPx:pn,ready:function(t){var e;"loading"===document.readyState?e=Jt(document,"DOMContentLoaded",function(){e(),t()}):t()},empty:ve,html:we,prepend:function(e,t){return(e=Me(e)).hasChildNodes()?ke(t,function(t){return e.insertBefore(t,e.firstChild)}):be(e,t)},append:be,before:xe,after:ye,remove:$e,wrapAll:Se,wrapInner:Ie,unwrap:Ee,fragment:_e,apply:Ae,$:Me,$$:ze,inBrowser:ct,isIE:ht,isRtl:lt,hasTouch:pt,pointerDown:mt,pointerMove:gt,pointerUp:vt,pointerEnter:wt,pointerLeave:bt,pointerCancel:xt,on:Jt,off:Zt,once:Qt,trigger:te,createEvent:ee,toEventTargets:se,isTouch:ae,getEventPos:ue,fastdom:gn,isVoidElement:kt,isVisible:$t,selInput:St,isInput:It,isFocusable:Et,parent:Tt,filter:Ct,matches:Mt,closest:Nt,within:Bt,parents:Dt,children:Ot,index:Pt,hasOwn:c,hyphenate:d,camelize:f,ucfirst:p,startsWith:g,endsWith:u,includes:w,findIndex:x,isArray:y,isFunction:k,isObject:$,isPlainObject:I,isWindow:E,isDocument:T,isNode:C,isElement:_,isBoolean:M,isString:z,isNumber:N,isNumeric:B,isEmpty:D,isUndefined:O,toBoolean:P,toNumber:H,toFloat:L,toArray:j,toNode:F,toNodes:W,toWindow:V,toMs:R,isEqual:q,swap:U,assign:Y,last:X,each:G,sortBy:K,uniqueBy:J,clamp:Z,noop:Q,intersectRect:tt,pointInRect:et,Dimensions:nt,getIndex:it,memoize:rt,MouseTracker:kn,mergeOptions:En,parseOptions:Tn,play:Cn,pause:_n,mute:An,positionAt:Xn,Promise:he,Deferred:ce,query:Ht,queryAll:Lt,find:Ft,findAll:Wt,escape:Kt,css:Re,getCssVar:Xe,propName:Ge,isInView:Ln,scrollTop:jn,scrollIntoView:Fn,scrolledOver:Wn,scrollParents:Vn,getViewport:Rn,getViewportClientHeight:qn});function Qn(t){this._init(t)}var ti,ei,ni,ii,ri,oi,si,ai,ui,ci=rt(function(t){return!(!g(t,"uk-")&&!g(t,"data-uk-"))&&f(t.replace("data-uk-","").replace("uk-",""))});function hi(t,e){if(t)for(var n in t)t[n]._connected&&t[n]._callUpdate(e)}function li(t,e){var n={},i=t.args;void 0===i&&(i=[]);var r,o=t.props,s=t.el;if(!(o=void 0===o?{}:o))return n;for(r in o){var a=d(r),u=ut(s,a);O(u)||(u=o[r]===Boolean&&""===u||fi(o[r],u),("target"!==a||u&&!g(u,"_"))&&(n[r]=u))}var c,h=Tn(ut(s,e),i);for(c in h){var l=f(c);void 0!==o[l]&&(n[l]=fi(o[l],h[c]))}return n}function di(e,n,i){var t=(n=!I(n)?{name:i,handler:n}:n).name,r=n.el,o=n.handler,s=n.capture,a=n.passive,u=n.delegate,c=n.filter,h=n.self,r=k(r)?r.call(e):r||e.$el;y(r)?r.forEach(function(t){return di(e,Y({},n,{el:t}),i)}):!r||c&&!c.call(e)||e._events.push(Jt(r,t,u?z(u)?u:u.call(e):null,z(o)?e[o]:o.bind(e),{passive:a,capture:s,self:h}))}function fi(t,e){return t===Boolean?P(e):t===Number?H(e):"list"===t?y(n=e)?n:z(n)?n.split(/,(?![^(]*\))/).map(function(t){return B(t)?H(t):P(t.trim())}):[n]:t?t(e):e;var n}Qn.util=Zn,Qn.data="__uikit__",Qn.prefix="uk-",Qn.options={},Qn.version="3.7.0",ni=(ti=Qn).data,ti.use=function(t){if(!t.installed)return t.call(null,this),t.installed=!0,this},ti.mixin=function(t,e){(e=(z(e)?ti.component(e):e)||this).options=En(e.options,t)},ti.extend=function(t){t=t||{};function e(t){this._init(t)}return((e.prototype=Object.create(this.prototype)).constructor=e).options=En(this.options,t),e.super=this,e.extend=this.extend,e},ti.update=function(t,e){Dt(t=t?F(t):document.body).reverse().forEach(function(t){return hi(t[ni],e)}),Ae(t,function(t){return hi(t[ni],e)})},Object.defineProperty(ti,"container",{get:function(){return ei||document.body},set:function(t){ei=Me(t)}}),(ii=Qn).prototype._callHook=function(t){var e=this,t=this.$options[t];t&&t.forEach(function(t){return t.call(e)})},ii.prototype._callConnected=function(){this._connected||(this._data={},this._computeds={},this._initProps(),this._callHook("beforeConnect"),this._connected=!0,this._initEvents(),this._initObservers(),this._callHook("connected"),this._callUpdate())},ii.prototype._callDisconnected=function(){this._connected&&(this._callHook("beforeDisconnect"),this._disconnectObservers(),this._unbindEvents(),this._callHook("disconnected"),this._connected=!1,delete this._watch)},ii.prototype._callUpdate=function(t){var e=this;void 0===t&&(t="update"),this._connected&&("update"!==t&&"resize"!==t||this._callWatches(),this.$options.update&&(this._updates||(this._updates=new Set,gn.read(function(){e._connected&&!function(i){for(var r=this,o=this.$options.update,t=0;t *",active:!1,animation:[!0],collapsible:!0,multiple:!1,clsOpen:"uk-open",toggle:"> .uk-accordion-title",content:"> .uk-accordion-content",transition:"ease",offset:0},computed:{items:{get:function(t,e){return ze(t.targets,e)},watch:function(t,e){var n=this;t.forEach(function(t){return wi(Me(n.content,t),!He(t,n.clsOpen))}),e||He(t,this.clsOpen)||(t=!1!==this.active&&t[Number(this.active)]||!this.collapsible&&t[0])&&this.toggle(t,!1)},immediate:!0},toggles:function(t){var e=t.toggle;return this.items.map(function(t){return Me(e,t)})}},events:[{name:"click",delegate:function(){return this.targets+" "+this.$props.toggle},handler:function(t){t.preventDefault(),this.toggle(Pt(this.toggles,t.current))}}],methods:{toggle:function(t,r){var o=this,e=[this.items[it(t,this.items)]],t=Ct(this.items,"."+this.clsOpen);this.multiple||w(t,e[0])||(e=e.concat(t)),!this.collapsible&&t.length<2&&!Ct(e,":not(."+this.clsOpen+")").length||e.forEach(function(t){return o.toggleElement(t,!He(t,o.clsOpen),function(e,n){Le(e,o.clsOpen,n),ot(Me(o.$props.toggle,e),"aria-expanded",n);var i=Me((e._wrapper?"> * ":"")+o.content,e);if(!1!==r&&o.hasTransition)return e._wrapper||(e._wrapper=Se(i,"")),wi(i,!1),gi(o)(e._wrapper,n).then(function(){var t;wi(i,!n),delete e._wrapper,Ee(i),n&&(Ln(t=Me(o.$props.toggle,e))||Fn(t,{offset:o.offset}))});wi(i,!n)})})}}};function wi(t,e){t&&(t.hidden=e)}var bi={mixins:[pi,mi],args:"animation",props:{close:String},data:{animation:[!0],selClose:".uk-alert-close",duration:150,hideProps:Y({opacity:0},mi.data.hideProps)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.close()}}],methods:{close:function(){var t=this;this.toggleElement(this.$el).then(function(){return t.$destroy(!0)})}}},xi={args:"autoplay",props:{automute:Boolean,autoplay:Boolean},data:{automute:!1,autoplay:!0},computed:{inView:function(t){return"inview"===t.autoplay}},connected:function(){this.inView&&!st(this.$el,"preload")&&(this.$el.preload="none"),this.automute&&An(this.$el)},update:{read:function(){return{visible:$t(this.$el)&&"hidden"!==Re(this.$el,"visibility"),inView:this.inView&&Ln(this.$el)}},write:function(t){var e=t.visible,t=t.inView;!e||this.inView&&!t?_n(this.$el):(!0===this.autoplay||this.inView&&t)&&Cn(this.$el)},events:["resize","scroll"]}},yi={mixins:[pi,xi],props:{width:Number,height:Number},data:{automute:!0},update:{read:function(){var t=this.$el,e=function(t){for(;t=Tt(t);)if("static"!==Re(t,"position"))return t}(t)||Tt(t),n=e.offsetHeight,e=e.offsetWidth,n=nt.cover({width:this.width||t.naturalWidth||t.videoWidth||t.clientWidth,height:this.height||t.naturalHeight||t.videoHeight||t.clientHeight},{width:e+(e%2?1:0),height:n+(n%2?1:0)});return!(!n.width||!n.height)&&n},write:function(t){var e=t.height,t=t.width;Re(this.$el,{height:e,width:t})},events:["resize"]}};var ki,$i={props:{container:Boolean},data:{container:!0},computed:{container:function(t){t=t.container;return!0===t&&this.$container||t&&Me(t)}}},Si={props:{pos:String,offset:null,flip:Boolean,clsPos:String},data:{pos:"bottom-"+(lt?"right":"left"),flip:!0,offset:!1,clsPos:""},computed:{pos:function(t){t=t.pos;return(t+(w(t,"-")?"":"-center")).split("-")},dir:function(){return this.pos[0]},align:function(){return this.pos[1]}},methods:{positionAt:function(t,e,n){Oe(t,this.clsPos+"-(top|bottom|left|right)(-[a-z]+)?");var i,r=this.offset,o=this.getAxis();B(r)||(r=(i=Me(r))?sn(i)["x"===o?"left":"top"]-sn(e)["x"===o?"right":"bottom"]:0);r=Xn(t,e,"x"===o?fn(this.dir)+" "+this.align:this.align+" "+fn(this.dir),"x"===o?this.dir+" "+this.align:this.align+" "+this.dir,"x"===o?""+("left"===this.dir?-r:r):" "+("top"===this.dir?-r:r),null,this.flip,n).target,n=r.x,r=r.y;this.dir="x"===o?n:r,this.align="x"===o?r:n,Le(t,this.clsPos+"-"+this.dir+"-"+this.align,!1===this.offset)},getAxis:function(){return"top"===this.dir||"bottom"===this.dir?"y":"x"}}},Ii={mixins:[$i,Si,mi],args:"pos",props:{mode:"list",toggle:Boolean,boundary:Boolean,boundaryAlign:Boolean,delayShow:Number,delayHide:Number,clsDrop:String},data:{mode:["click","hover"],toggle:"- *",boundary:!0,boundaryAlign:!1,delayShow:0,delayHide:800,clsDrop:!1,animation:["uk-animation-fade"],cls:"uk-open",container:!1},computed:{boundary:function(t,e){t=t.boundary;return!0===t?window:Ht(t,e)},clsDrop:function(t){return t.clsDrop||"uk-"+this.$options.name},clsPos:function(){return this.clsDrop}},created:function(){this.tracker=new kn},connected:function(){Be(this.$el,this.clsDrop),this.toggle&&!this.target&&(this.target=this.$create("toggle",Ht(this.toggle,this.$el),{target:this.$el,mode:this.mode}))},disconnected:function(){this.isActive()&&(ki=null)},events:[{name:"click",delegate:function(){return"."+this.clsDrop+"-close"},handler:function(t){t.preventDefault(),this.hide(!1)}},{name:"click",delegate:function(){return'a[href^="#"]'},handler:function(t){var e=t.defaultPrevented,t=t.current.hash;e||!t||Bt(t,this.$el)||this.hide(!1)}},{name:"beforescroll",handler:function(){this.hide(!1)}},{name:"toggle",self:!0,handler:function(t,e){t.preventDefault(),this.isToggled()?this.hide(!1):this.show(e.$el,!1)}},{name:"toggleshow",self:!0,handler:function(t,e){t.preventDefault(),this.show(e.$el)}},{name:"togglehide",self:!0,handler:function(t){t.preventDefault(),this.hide()}},{name:wt+" focusin",filter:function(){return w(this.mode,"hover")},handler:function(t){ae(t)||this.clearTimers()}},{name:bt+" focusout",filter:function(){return w(this.mode,"hover")},handler:function(t){!ae(t)&&t.relatedTarget&&this.hide()}},{name:"toggled",self:!0,handler:function(t,e){e&&(this.clearTimers(),this.position())}},{name:"show",self:!0,handler:function(){var r=this;(ki=this).tracker.init(),Qt(this.$el,"hide",Jt(document,mt,function(t){var i=t.target;return!Bt(i,r.$el)&&Qt(document,vt+" "+xt+" scroll",function(t){var e=t.defaultPrevented,n=t.type,t=t.target;e||n!==vt||i!==t||r.target&&Bt(i,r.target)||r.hide(!1)},!0)}),{self:!0}),Qt(this.$el,"hide",Jt(document,"keydown",function(t){27===t.keyCode&&r.hide(!1)}),{self:!0})}},{name:"beforehide",self:!0,handler:function(){this.clearTimers()}},{name:"hide",handler:function(t){t=t.target;this.$el===t?(ki=this.isActive()?null:ki,this.tracker.cancel()):ki=null===ki&&Bt(t,this.$el)&&this.isToggled()?this:ki}}],update:{write:function(){this.isToggled()&&!He(this.$el,this.clsEnter)&&this.position()},events:["resize"]},methods:{show:function(t,e){var n,i=this;if(void 0===t&&(t=this.target),void 0===e&&(e=!0),this.isToggled()&&t&&this.target&&t!==this.target&&this.hide(!1),this.target=t,this.clearTimers(),!this.isActive()){if(ki){if(e&&ki.isDelaying)return void(this.showTimer=setTimeout(this.show,10));for(;ki&&n!==ki&&!Bt(this.$el,ki.$el);)(n=ki).hide(!1)}this.container&&Tt(this.$el)!==this.container&&be(this.container,this.$el),this.showTimer=setTimeout(function(){return i.toggleElement(i.$el,!0)},e&&this.delayShow||0)}},hide:function(t){var e=this;void 0===t&&(t=!0);function n(){return e.toggleElement(e.$el,!1,!1)}var i,r;this.clearTimers(),this.isDelaying=(i=this.$el,r=[],Ae(i,function(t){return"static"!==Re(t,"position")&&r.push(t)}),r.some(function(t){return e.tracker.movesTo(t)})),t&&this.isDelaying?this.hideTimer=setTimeout(this.hide,50):t&&this.delayHide?this.hideTimer=setTimeout(n,this.delayHide):n()},clearTimers:function(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null,this.isDelaying=!1},isActive:function(){return ki===this},position:function(){De(this.$el,this.clsDrop+"-stack"),Le(this.$el,this.clsDrop+"-boundary",this.boundaryAlign);var t,e=sn(this.boundary),n=this.boundaryAlign?e:sn(this.target);"justify"===this.align?(t="y"===this.getAxis()?"width":"height",Re(this.$el,t,n[t])):this.boundary&&this.$el.offsetWidth>Math.max(e.right-n.left,n.right-e.left)&&Be(this.$el,this.clsDrop+"-stack"),this.positionAt(this.$el,this.boundaryAlign?this.boundary:this.target,this.boundary)}}};var Ei={mixins:[pi],args:"target",props:{target:Boolean},data:{target:!1},computed:{input:function(t,e){return Me(St,e)},state:function(){return this.input.nextElementSibling},target:function(t,e){t=t.target;return t&&(!0===t&&Tt(this.input)===e&&this.input.nextElementSibling||Ht(t,e))}},update:function(){var t,e,n=this.target,i=this.input;!n||n[e=It(n)?"value":"textContent"]!==(i=i.files&&i.files[0]?i.files[0].name:Mt(i,"select")&&(t=ze("option",i).filter(function(t){return t.selected})[0])?t.textContent:i.value)&&(n[e]=i)},events:[{name:"change",handler:function(){this.$update()}},{name:"reset",el:function(){return Nt(this.$el,"form")},handler:function(){this.$update()}}]},Ti={update:{read:function(t){var e=Ln(this.$el);if(!e||t.isInView===e)return!1;t.isInView=e},write:function(){this.$el.src=""+this.$el.src},events:["scroll","resize"]}},Ci={props:{margin:String,firstColumn:Boolean},data:{margin:"uk-margin-small-top",firstColumn:"uk-first-column"},update:{read:function(){var t=_i(this.$el.children);return{rows:t,columns:function(t){for(var e=[],n=0;n
=c[n]-1&&s[e]!==c[e]){i.push([o]);break}if(s[n]-1>c[e]||s[e]===c[e]){u.push(o);break}if(0===a){i.unshift([o]);break}}}return i}function Mi(t,e){var n=t.offsetTop,i=t.offsetLeft,r=t.offsetHeight,o=t.offsetWidth;return(e=void 0===e?!1:e)&&(n=(t=un(t))[0],i=t[1]),{top:n,left:i,bottom:n+r,right:i+o}}var zi={extends:Ci,mixins:[pi],name:"grid",props:{masonry:Boolean,parallax:Number},data:{margin:"uk-grid-margin",clsStack:"uk-grid-stack",masonry:!1,parallax:0},connected:function(){this.masonry&&Be(this.$el,"uk-flex-top uk-flex-wrap-top")},update:[{write:function(t){t=t.columns;Le(this.$el,this.clsStack,t.length<2)},events:["resize"]},{read:function(t){var e=t.columns,n=t.rows;if(!e.length||!this.masonry&&!this.parallax||Ni(this.$el))return t.translates=!1;var i,r,o=!1,s=Ot(this.$el),a=e.map(function(t){return t.reduce(function(t,e){return t+e.offsetHeight},0)}),u=(t=s,i=this.margin,L((s=t.filter(function(t){return He(t,i)})[0])?Re(s,"marginTop"):Re(t[0],"paddingLeft"))*(n.length-1)),c=Math.max.apply(Math,a)+u;this.masonry&&(e=e.map(function(t){return K(t,"offsetTop")}),t=e,r=n.map(function(t){return Math.max.apply(Math,t.map(function(t){return t.offsetHeight}))}),o=t.map(function(n){var i=0;return n.map(function(t,e){return i+=e?r[e-1]-n[e-1].offsetHeight:0})}));var h=Math.abs(this.parallax);return{padding:h=h&&a.reduce(function(t,e,n){return Math.max(t,e+u+(n%2?h:h/8)-c)},0),columns:e,translates:o,height:o?c:""}},write:function(t){var e=t.height,t=t.padding;Re(this.$el,"paddingBottom",t||""),!1!==e&&Re(this.$el,"height",e)},events:["resize"]},{read:function(t){t=t.height;return!Ni(this.$el)&&{scrolled:!!this.parallax&&Wn(this.$el,t?t-cn(this.$el):0)*Math.abs(this.parallax)}},write:function(t){var e=t.columns,i=t.scrolled,r=t.translates;!1===i&&!r||e.forEach(function(t,n){return t.forEach(function(t,e){return Re(t,"transform",i||r?"translateY("+((r&&-r[n][e])+(i?n%2?i:i/8:0))+"px)":"")})})},events:["scroll","resize"]}]};function Ni(t){return Ot(t).some(function(t){return"absolute"===Re(t,"position")})}var Bi=ht?{props:{selMinHeight:String},data:{selMinHeight:!1,forceHeight:!1},computed:{elements:function(t,e){t=t.selMinHeight;return t?ze(t,e):[e]}},update:[{read:function(){Re(this.elements,"height","")},order:-5,events:["resize"]},{write:function(){var n=this;this.elements.forEach(function(t){var e=L(Re(t,"minHeight"));e&&(n.forceHeight||Math.round(e+dn(t,"height","content-box"))>=t.offsetHeight)&&Re(t,"height",e)})},order:5,events:["resize"]}]}:{},Di={mixins:[Bi],args:"target",props:{target:String,row:Boolean},data:{target:"> *",row:!0,forceHeight:!0},computed:{elements:function(t,e){return ze(t.target,e)}},update:{read:function(){return{rows:(this.row?_i(this.elements):[this.elements]).map(Oi)}},write:function(t){t.rows.forEach(function(t){var n=t.heights;return t.elements.forEach(function(t,e){return Re(t,"minHeight",n[e])})})},events:["resize"]}};function Oi(t){if(t.length<2)return{heights:[""],elements:t};var n=t.map(Pi),i=Math.max.apply(Math,n),e=t.some(function(t){return t.style.minHeight}),r=t.some(function(t,e){return!t.style.minHeight&&n[e]"}return Wi[t][e]}(t,e)||t);return(t=Me(t.substr(t.indexOf("/g,Wi={};function Vi(t){return Math.ceil(Math.max.apply(Math,[0].concat(ze("[stroke]",t).map(function(t){try{return t.getTotalLength()}catch(t){return 0}}))))}function Ri(t,e){return qi(t)&&qi(e)&&Ui(t)===Ui(e)}function qi(t){return t&&"svg"===t.tagName}function Ui(t){return(t.innerHTML||(new XMLSerializer).serializeToString(t).replace(/(.*?)<\/svg>/g,"$1")).replace(/\s/g,"")}var Yi={spinner:' ',totop:' ',marker:' ',"close-icon":' ',"close-large":' ',"navbar-toggle-icon":' ',"overlay-icon":' ',"pagination-next":' ',"pagination-previous":' ',"search-icon":' ',"search-large":' ',"search-navbar":' ',"slidenav-next":' ',"slidenav-next-large":' ',"slidenav-previous":' ',"slidenav-previous-large":' '},Xi={install:function(r){r.icon.add=function(t,e){var n,i=z(t)?((n={})[t]=e,n):t;G(i,function(t,e){Yi[e]=t,delete tr[e]}),r._initialized&&Ae(document.body,function(t){return G(r.getComponents(t),function(t){t.$options.isIcon&&t.icon in i&&t.$reset()})})}},extends:Li,args:"icon",props:["icon"],data:{include:["focusable"]},isIcon:!0,beforeConnect:function(){Be(this.$el,"uk-icon")},methods:{getSvg:function(){var t=function(t){if(!Yi[t])return null;tr[t]||(tr[t]=Me((Yi[function(t){return lt?U(U(t,"left","right"),"previous","next"):t}(t)]||Yi[t]).trim()));return tr[t].cloneNode(!0)}(this.icon);return t?he.resolve(t):he.reject("Icon not found.")}}},Gi={args:!1,extends:Xi,data:function(t){return{icon:d(t.constructor.options.name)}},beforeConnect:function(){Be(this.$el,this.$name)}},Ki={extends:Gi,beforeConnect:function(){Be(this.$el,"uk-slidenav")},computed:{icon:function(t,e){t=t.icon;return He(e,"uk-slidenav-large")?t+"-large":t}}},Ji={extends:Gi,computed:{icon:function(t,e){t=t.icon;return He(e,"uk-search-icon")&&Dt(e,".uk-search-large").length?"search-large":Dt(e,".uk-search-navbar").length?"search-navbar":t}}},Zi={extends:Gi,computed:{icon:function(){return"close-"+(He(this.$el,"uk-close-large")?"large":"icon")}}},Qi={extends:Gi,connected:function(){var e=this;this.svg.then(function(t){return t&&1!==e.ratio&&Re(Me("circle",t),"strokeWidth",1/e.ratio)})}},tr={};var er={args:"dataSrc",props:{dataSrc:String,dataSrcset:Boolean,sizes:String,width:Number,height:Number,offsetTop:String,offsetLeft:String,target:String},data:{dataSrc:"",dataSrcset:!1,sizes:!1,width:!1,height:!1,offsetTop:"50vh",offsetLeft:"50vw",target:!1},computed:{cacheKey:function(t){t=t.dataSrc;return this.$name+"."+t},width:function(t){var e=t.width,t=t.dataWidth;return e||t},height:function(t){var e=t.height,t=t.dataHeight;return e||t},sizes:function(t){var e=t.sizes,t=t.dataSizes;return e||t},isImg:function(t,e){return ur(e)},target:{get:function(t){t=t.target;return[this.$el].concat(Lt(t,this.$el))},watch:function(){this.observe()}},offsetTop:function(t){return pn(t.offsetTop,"height")},offsetLeft:function(t){return pn(t.offsetLeft,"width")}},connected:function(){window.IntersectionObserver?(hr[this.cacheKey]?nr(this.$el,hr[this.cacheKey],this.dataSrcset,this.sizes):this.isImg&&this.width&&this.height&&nr(this.$el,function(t,e,n){n&&(n=nt.ratio({width:t,height:e},"width",pn(rr(n))),t=n.width,e=n.height);return'data:image/svg+xml;utf8, '}(this.width,this.height,this.sizes)),this.observer=new IntersectionObserver(this.load,{rootMargin:this.offsetTop+"px "+this.offsetLeft+"px"}),requestAnimationFrame(this.observe)):nr(this.$el,this.dataSrc,this.dataSrcset,this.sizes)},disconnected:function(){this.observer&&this.observer.disconnect()},update:{read:function(t){var e=this,t=t.image;return!!this.observer&&(t||"complete"!==document.readyState||this.load(this.observer.takeRecords()),!this.isImg&&void(t&&t.then(function(t){return t&&""!==t.currentSrc&&nr(e.$el,cr(t))})))},write:function(t){var e,n,i;this.dataSrcset&&1!==window.devicePixelRatio&&(!(n=Re(this.$el,"backgroundSize")).match(/^(auto\s?)+$/)&&L(n)!==t.bgSize||(t.bgSize=(e=this.dataSrcset,n=this.sizes,i=pn(rr(n)),(e=(e.match(ar)||[]).map(L).sort(function(t,e){return t-e})).filter(function(t){return i<=t})[0]||e.pop()||""),Re(this.$el,"backgroundSize",t.bgSize+"px")))},events:["resize"]},methods:{load:function(t){var e=this;t.some(function(t){return O(t.isIntersecting)||t.isIntersecting})&&(this._data.image=ge(this.dataSrc,this.dataSrcset,this.sizes).then(function(t){return nr(e.$el,cr(t),t.srcset,t.sizes),hr[e.cacheKey]=cr(t),t},function(t){return te(e.$el,new t.constructor(t.type,t))}),this.observer.disconnect())},observe:function(){var e=this;this._connected&&!this._data.image&&this.target.forEach(function(t){return e.observer.observe(t)})}}};function nr(t,e,n,i){ur(t)?(i&&(t.sizes=i),n&&(t.srcset=n),e&&(t.src=e)):e&&!w(t.style.backgroundImage,e)&&(Re(t,"backgroundImage","url("https://github.com/+Kt(e)+")"),te(t,ee("load",!1)))}var ir=/\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;function rr(t){var e,n;for(ir.lastIndex=0;e=ir.exec(t);)if(!e[1]||window.matchMedia(e[1]).matches){e=g(n=e[2],"calc")?n.slice(5,-1).replace(or,function(t){return pn(t)}).replace(/ /g,"").match(sr).reduce(function(t,e){return t+ +e},0):n;break}return e||"100vw"}var or=/\d+(?:\w+|%)/g,sr=/[+-]?(\d+)/g;var ar=/\s+\d+w\s*(?:,|$)/g;function ur(t){return"IMG"===t.tagName}function cr(t){return t.currentSrc||t.src}var hr,lr="__test__";try{(hr=window.sessionStorage||{})[lr]=1,delete hr[lr]}catch(t){hr={}}var dr={props:{media:Boolean},data:{media:!1},computed:{matchMedia:function(){var t=function(t){if(z(t))if("@"===t[0])t=L(Xe("breakpoint-"+t.substr(1)));else if(isNaN(t))return t;return!(!t||isNaN(t))&&"(min-width: "+t+"px)"}(this.media);return!t||window.matchMedia(t).matches}}};var fr={mixins:[pi,dr],props:{fill:String},data:{fill:"",clsWrapper:"uk-leader-fill",clsHide:"uk-leader-hide",attrFill:"data-fill"},computed:{fill:function(t){return t.fill||Xe("leader-fill-content")}},connected:function(){var t=Ie(this.$el,'');this.wrapper=t[0]},disconnected:function(){Ee(this.wrapper.childNodes)},update:{read:function(t){var e,n=t.changed,t=e=t.width;return{width:e=Math.floor(this.$el.offsetWidth/2),fill:this.fill,changed:n||t!==e,hide:!this.matchMedia}},write:function(t){Le(this.wrapper,this.clsHide,t.hide),t.changed&&(t.changed=!1,ot(this.wrapper,this.attrFill,new Array(t.width).join(t.fill)))},events:["resize"]}},pr=[],mr={mixins:[pi,$i,mi],props:{selPanel:String,selClose:String,escClose:Boolean,bgClose:Boolean,stack:Boolean},data:{cls:"uk-open",escClose:!0,bgClose:!0,overlay:!0,stack:!1},computed:{panel:function(t,e){return Me(t.selPanel,e)},transitionElement:function(){return this.panel},bgClose:function(t){return t.bgClose&&this.panel}},beforeDisconnect:function(){this.isToggled()&&this.toggleElement(this.$el,!1,!1)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.hide()}},{name:"toggle",self:!0,handler:function(t){t.defaultPrevented||(t.preventDefault(),this.isToggled()===w(pr,this)&&this.toggle())}},{name:"beforeshow",self:!0,handler:function(t){if(w(pr,this))return!1;!this.stack&&pr.length?(he.all(pr.map(function(t){return t.hide()})).then(this.show),t.preventDefault()):pr.push(this)}},{name:"show",self:!0,handler:function(){var r=this,t=document.documentElement;hn(window)>t.clientWidth&&this.overlay&&Re(document.body,"overflowY","scroll"),this.stack&&Re(this.$el,"zIndex",L(Re(this.$el,"zIndex"))+pr.length),Be(t,this.clsPage),this.bgClose&&Qt(this.$el,"hide",Jt(document,mt,function(t){var i=t.target;X(pr)!==r||r.overlay&&!Bt(i,r.$el)||Bt(i,r.panel)||Qt(document,vt+" "+xt+" scroll",function(t){var e=t.defaultPrevented,n=t.type,t=t.target;e||n!==vt||i!==t||r.hide()},!0)}),{self:!0}),this.escClose&&Qt(this.$el,"hide",Jt(document,"keydown",function(t){27===t.keyCode&&X(pr)===r&&r.hide()}),{self:!0})}},{name:"hidden",self:!0,handler:function(){var e=this;w(pr,this)&&pr.splice(pr.indexOf(this),1),pr.length||Re(document.body,"overflowY",""),Re(this.$el,"zIndex",""),pr.some(function(t){return t.clsPage===e.clsPage})||De(document.documentElement,this.clsPage)}}],methods:{toggle:function(){return this.isToggled()?this.hide():this.show()},show:function(){var e=this;return this.container&&Tt(this.$el)!==this.container?(be(this.container,this.$el),new he(function(t){return requestAnimationFrame(function(){return e.show().then(t)})})):this.toggleElement(this.$el,!0,gr(this))},hide:function(){return this.toggleElement(this.$el,!1,gr(this))}}};function gr(t){var s=t.transitionElement,a=t._toggle;return function(r,o){return new he(function(n,i){return Qt(r,"show hide",function(){r._reject&&r._reject(),r._reject=i,a(r,o);var t=Qt(s,"transitionstart",function(){Qt(s,"transitionend transitioncancel",n,{self:!0}),clearTimeout(e)},{self:!0}),e=setTimeout(function(){t(),n()},R(Re(s,"transitionDuration")))})}).then(function(){return delete r._reject})}}var vr={install:function(t){var a=t.modal;function i(t,e,n,i){e=Y({bgClose:!1,escClose:!0,labels:a.labels},e);var r=a.dialog(t(e),e),o=new ce,s=!1;return Jt(r.$el,"submit","form",function(t){t.preventDefault(),o.resolve(i&&i(r)),s=!0,r.hide()}),Jt(r.$el,"hide",function(){return!s&&n(o)}),o.promise.dialog=r,o.promise}a.dialog=function(t,e){var n=a('",e);return n.show(),Jt(n.$el,"hidden",function(){return he.resolve().then(function(){return n.$destroy(!0)})},{self:!0}),n},a.alert=function(e,t){return i(function(t){t=t.labels;return''+(z(e)?e:we(e))+'
"},t,function(t){return t.resolve()})},a.confirm=function(e,t){return i(function(t){t=t.labels;return'"},t,function(t){return t.reject()})},a.prompt=function(e,n,t){return i(function(t){t=t.labels;return'"},t,function(t){return t.resolve(null)},function(t){return Me("input",t.$el).value})},a.labels={ok:"Ok",cancel:"Cancel"}},mixins:[mr],data:{clsPage:"uk-modal-page",selPanel:".uk-modal-dialog",selClose:".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"},events:[{name:"show",self:!0,handler:function(){He(this.panel,"uk-margin-auto-vertical")?Be(this.$el,"uk-flex"):Re(this.$el,"display","block"),cn(this.$el)}},{name:"hidden",self:!0,handler:function(){Re(this.$el,"display",""),De(this.$el,"uk-flex")}}]};o=".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle",l={mixins:[pi,$i,Bi],props:{dropdown:String,mode:"list",align:String,offset:Number,boundary:Boolean,boundaryAlign:Boolean,clsDrop:String,delayShow:Number,delayHide:Number,dropbar:Boolean,dropbarMode:String,dropbarAnchor:Boolean,duration:Number},data:{dropdown:o,align:lt?"right":"left",clsDrop:"uk-navbar-dropdown",mode:void 0,offset:void 0,delayShow:void 0,delayHide:void 0,boundaryAlign:void 0,flip:"x",boundary:!0,dropbar:!1,dropbarMode:"slide",dropbarAnchor:!1,duration:200,forceHeight:!0,selMinHeight:o,container:!1},computed:{boundary:function(t,e){var n=t.boundary,t=t.boundaryAlign;return!0===n||t?e:n},dropbarAnchor:function(t,e){return Ht(t.dropbarAnchor,e)},pos:function(t){return"bottom-"+t.align},dropbar:{get:function(t){t=t.dropbar;return t?(t=this._dropbar||Ht(t,this.$el)||Me("+ .uk-navbar-dropbar",this.$el))||(this._dropbar=Me("
")):null},watch:function(t){Be(t,"uk-navbar-dropbar")},immediate:!0},dropContainer:function(t,e){return this.container||e},dropdowns:{get:function(t,e){var t=t.clsDrop,n=ze("."+t,e);return this.container!==e&&ze("."+t,this.container).forEach(function(t){return!w(n,t)&&n.push(t)}),n},watch:function(t){var e=this;this.$create("drop",t.filter(function(t){return!e.getDropdown(t)}),Y({},this.$props,{boundary:this.boundary,pos:this.pos,offset:this.dropbar||this.offset}))},immediate:!0}},disconnected:function(){this.dropbar&&$e(this.dropbar),delete this._dropbar},events:[{name:"mouseover",delegate:function(){return this.dropdown},handler:function(t){var e=t.current,t=this.getActive();t&&t.target&&!Bt(t.target,e)&&!t.tracker.movesTo(t.$el)&&t.hide(!1)}},{name:"mouseleave",el:function(){return this.dropbar},handler:function(){var t=this.getActive();t&&!this.dropdowns.some(function(t){return Mt(t,":hover")})&&t.hide()}},{name:"beforeshow",el:function(){return this.dropContainer},filter:function(){return this.dropbar},handler:function(){Tt(this.dropbar)||ye(this.dropbarAnchor||this.$el,this.dropbar)}},{name:"show",el:function(){return this.dropContainer},filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el,e=e.dir;He(n,this.clsDrop)&&("slide"===this.dropbarMode&&Be(this.dropbar,"uk-navbar-dropbar-slide"),this.clsDrop&&Be(n,this.clsDrop+"-dropbar"),"bottom"===e&&this.transitionTo(n.offsetHeight+L(Re(n,"marginTop"))+L(Re(n,"marginBottom")),n))}},{name:"beforehide",el:function(){return this.dropContainer},filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el,e=this.getActive();Mt(this.dropbar,":hover")&&e&&e.$el===n&&t.preventDefault()}},{name:"hide",el:function(){return this.dropContainer},filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el;!He(n,this.clsDrop)||(!(e=this.getActive())||e&&e.$el===n)&&this.transitionTo(0)}}],methods:{getActive:function(){return ki&&w(ki.mode,"hover")&&Bt(ki.target,this.$el)&&ki},transitionTo:function(t,e){var n=this,i=this.dropbar,r=$t(i)?cn(i):0;return Re(e=r"),Be(Tt(this.panel),this.clsMode)),Re(document.documentElement,"overflowY",this.overlay?"hidden":""),Be(document.body,this.clsContainer,this.clsFlip),Re(document.body,"touch-action","pan-y pinch-zoom"),Re(this.$el,"display","block"),Be(this.$el,this.clsOverlay),Be(this.panel,this.clsSidebarAnimation,"reveal"!==this.mode?this.clsMode:""),cn(document.body),Be(document.body,this.clsContainerAnimation),this.clsContainerAnimation&&(wr().content+=",user-scalable=0")}},{name:"hide",self:!0,handler:function(){De(document.body,this.clsContainerAnimation),Re(document.body,"touch-action","")}},{name:"hidden",self:!0,handler:function(){var t;this.clsContainerAnimation&&((t=wr()).content=t.content.replace(/,user-scalable=0$/,"")),"reveal"===this.mode&&Ee(this.panel),De(this.panel,this.clsSidebarAnimation,this.clsMode),De(this.$el,this.clsOverlay),Re(this.$el,"display",""),De(document.body,this.clsContainer,this.clsFlip),Re(document.documentElement,"overflowY","")}},{name:"swipeLeft swipeRight",handler:function(t){this.isToggled()&&u(t.type,"Left")^this.flip&&this.hide()}}]};function wr(){return Me('meta[name="viewport"]',document.head)||be(document.head,' ')}var dt={mixins:[pi],props:{selContainer:String,selContent:String},data:{selContainer:".uk-modal",selContent:".uk-modal-dialog"},computed:{container:function(t,e){return Nt(e,t.selContainer)},content:function(t,e){return Nt(e,t.selContent)}},connected:function(){Re(this.$el,"minHeight",150)},update:{read:function(){return!!(this.content&&this.container&&$t(this.$el))&&{current:L(Re(this.$el,"maxHeight")),max:Math.max(150,cn(this.container)-(on(this.content).height-cn(this.$el)))}},write:function(t){var e=t.current,t=t.max;Re(this.$el,"maxHeight",t),Math.round(e)!==Math.round(t)&&te(this.$el,"resize")},events:["resize"]}},ft={props:{offset:Number},data:{offset:0},methods:{scrollTo:function(t){var e=this;t=t&&Me(t)||document.body,te(this.$el,"beforescroll",[this,t])&&Fn(t,{offset:this.offset}).then(function(){return te(e.$el,"scrolled",[e,t])})}},events:{click:function(t){t.defaultPrevented||(t.preventDefault(),this.scrollTo("#"+Kt(decodeURIComponent((this.$el.hash||"").substr(1)))))}}},br="_ukScrollspy",_t={args:"cls",props:{cls:String,target:String,hidden:Boolean,offsetTop:Number,offsetLeft:Number,repeat:Boolean,delay:Number},data:function(){return{cls:!1,target:!1,hidden:!0,offsetTop:0,offsetLeft:0,repeat:!1,delay:0,inViewClass:"uk-scrollspy-inview"}},computed:{elements:{get:function(t,e){t=t.target;return t?ze(t,e):[e]},watch:function(t){this.hidden&&Re(Ct(t,":not(."+this.inViewClass+")"),"visibility","hidden")},immediate:!0}},disconnected:function(){var e=this;this.elements.forEach(function(t){De(t,e.inViewClass,t[br]?t[br].cls:""),delete t[br]})},update:[{read:function(t){var e=this;if(!t.update)return he.resolve().then(function(){e.$emit(),t.update=!0}),!1;this.elements.forEach(function(t){t[br]||(t[br]={cls:ut(t,"uk-scrollspy-class")||e.cls}),t[br].show=Ln(t,e.offsetTop,e.offsetLeft)})},write:function(n){var i=this;this.elements.forEach(function(t){var e=t[br];!e.show||e.inview||e.queued?!e.show&&e.inview&&!e.queued&&i.repeat&&i.toggle(t,!1):(e.queued=!0,n.promise=(n.promise||he.resolve()).then(function(){return new he(function(t){return setTimeout(t,i.delay)})}).then(function(){i.toggle(t,!0),setTimeout(function(){e.queued=!1,i.$emit()},300)}))})},events:["scroll","resize"]}],methods:{toggle:function(t,e){var n=t[br];n.off&&n.off(),Re(t,"visibility",!e&&this.hidden?"hidden":""),Le(t,this.inViewClass,e),Le(t,n.cls),/\buk-animation-/.test(n.cls)&&(n.off=Qt(t,"animationcancel animationend",function(){return Oe(t,"uk-animation-\\w*")})),te(t,e?"inview":"outview"),n.inview=e,this.$update(t)}}},pe={props:{cls:String,closest:String,scroll:Boolean,overflow:Boolean,offset:Number},data:{cls:"uk-active",closest:!1,scroll:!1,overflow:!0,offset:0},computed:{links:{get:function(t,e){return ze('a[href^="#"]',e).filter(function(t){return t.hash})},watch:function(t){this.scroll&&this.$create("scroll",t,{offset:this.offset||0})},immediate:!0},targets:function(){return ze(this.links.map(function(t){return Kt(t.hash).substr(1)}).join(","))},elements:function(t){t=t.closest;return Nt(this.links,t||"*")}},update:[{read:function(){var n=this,t=this.targets.length;if(!t||!$t(this.$el))return!1;var i=Vn(this.targets,/auto|scroll/,!0)[0],e=i.scrollTop,r=i.scrollHeight-qn(i),o=!1;return e===r?o=t-1:(this.targets.every(function(t,e){if(sn(t).top-sn(Rn(i)).top-n.offset<=0)return o=e,!0}),!1===o&&this.overflow&&(o=0)),{active:o}},write:function(t){var e=t.active,t=!1!==e&&!He(this.elements[e],this.cls);this.links.forEach(function(t){return t.blur()}),De(this.elements,this.cls),Be(this.elements[e],this.cls),t&&te(this.$el,"active",[e,this.elements[e]])},events:["scroll","resize"]}]},Zn={mixins:[pi,dr],props:{top:null,bottom:Boolean,offset:String,animation:String,clsActive:String,clsInactive:String,clsFixed:String,clsBelow:String,selTarget:String,widthElement:Boolean,showOnUp:Boolean,targetOffset:Number},data:{top:0,bottom:!1,offset:0,animation:"",clsActive:"uk-active",clsInactive:"",clsFixed:"uk-sticky-fixed",clsBelow:"uk-sticky-below",selTarget:"",widthElement:!1,showOnUp:!1,targetOffset:!1},computed:{offset:function(t){return pn(t.offset)},selTarget:function(t,e){t=t.selTarget;return t&&Me(t,e)||e},widthElement:function(t,e){return Ht(t.widthElement,e)||this.placeholder},isActive:{get:function(){return He(this.selTarget,this.clsActive)},set:function(t){t&&!this.isActive?(Pe(this.selTarget,this.clsInactive,this.clsActive),te(this.$el,"active")):t||He(this.selTarget,this.clsInactive)||(Pe(this.selTarget,this.clsActive,this.clsInactive),te(this.$el,"inactive"))}}},connected:function(){this.placeholder=Me("+ .uk-sticky-placeholder",this.$el)||Me('
'),this.isFixed=!1,this.isActive=!1},disconnected:function(){this.isFixed&&(this.hide(),De(this.selTarget,this.clsInactive)),$e(this.placeholder),this.placeholder=null,this.widthElement=null},events:[{name:"load hashchange popstate",el:function(){return window},handler:function(){var i,r=this;!1!==this.targetOffset&&location.hash&&0this.topOffset?(nn.cancel(this.$el),nn.out(this.$el,this.animation).then(function(){return n.hide()},Q)):this.hide()):nn.inProgress(this.$el)&&cthis.top,e=Math.max(0,this.offset);B(this.bottom)&&this.scroll>this.bottom-this.offset&&(e=this.bottom-this.scroll),Re(this.$el,{position:"fixed",top:e+"px",width:this.width}),this.isActive=t,Le(this.$el,this.clsBelow,this.scroll>this.bottomOffset),Be(this.$el,this.clsFixed)}}};function xr(t,e){var n=e.$props,i=e.$el,e=e[t+"Offset"],t=n[t];if(t)return z(t)&&t.match(/^-?\d/)?e+pn(t):sn(!0===t?Tt(i):Ht(t,i)).bottom}var yr,kr,$r,lr={mixins:[mi],args:"connect",props:{connect:String,toggle:String,active:Number,swiping:Boolean},data:{connect:"~.uk-switcher",toggle:"> * > :first-child",active:0,swiping:!0,cls:"uk-active",attrItem:"uk-switcher-item"},computed:{connects:{get:function(t,e){return Lt(t.connect,e)},watch:function(t){var n=this;this.swiping&&Re(t,"touch-action","pan-y pinch-zoom");var i=this.index();this.connects.forEach(function(t){return Ot(t).forEach(function(t,e){return Le(t,n.cls,e===i)})})},immediate:!0},toggles:{get:function(t,e){return ze(t.toggle,e).filter(function(t){return!Mt(t,".uk-disabled *, .uk-disabled, [disabled]")})},watch:function(t){var e=this.index();this.show(~e?e:t[this.active]||t[0])},immediate:!0},children:function(){var t=this;return Ot(this.$el).filter(function(e){return t.toggles.some(function(t){return Bt(t,e)})})}},events:[{name:"click",delegate:function(){return this.toggle},handler:function(t){t.preventDefault(),this.show(t.current)}},{name:"click",el:function(){return this.connects},delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(t){t.preventDefault(),this.show(ut(t.current,this.attrItem))}},{name:"swipeRight swipeLeft",filter:function(){return this.swiping},el:function(){return this.connects},handler:function(t){t=t.type;this.show(u(t,"Left")?"next":"previous")}}],methods:{index:function(){var e=this;return x(this.children,function(t){return He(t,e.cls)})},show:function(t){var n=this,i=this.index(),r=it(this.children[it(t,this.toggles,i)],Ot(this.$el));i!==r&&(this.children.forEach(function(t,e){Le(t,n.cls,r===e),ot(n.toggles[e],"aria-expanded",r===e)}),this.connects.forEach(function(t){var e=t.children;return n.toggleElement(W(e).filter(function(t){return He(t,n.cls)}),!1,0<=i).then(function(){return n.toggleElement(e[r],!0,0<=i)})}))}}},Bi={mixins:[pi],extends:lr,props:{media:Boolean},data:{media:960,attrItem:"uk-tab-item"},connected:function(){var t=He(this.$el,"uk-tab-left")?"uk-tab-left":!!He(this.$el,"uk-tab-right")&&"uk-tab-right";t&&this.$create("toggle",this.$el,{cls:t,mode:"media",media:this.media})}},o={mixins:[dr,mi],args:"target",props:{href:String,target:null,mode:"list",queued:Boolean},data:{href:!1,target:!1,mode:"click",queued:!0},connected:function(){Et(this.$el)||ot(this.$el,"tabindex","0")},computed:{target:{get:function(t,e){var n=t.href;return(t=Lt((t=t.target)||n,e)).length&&t||[e]},watch:function(){this.updateAria()},immediate:!0}},events:[{name:wt+" "+bt+" focus blur",filter:function(){return w(this.mode,"hover")},handler:function(t){ae(t)||this.toggle("toggle"+(w([wt,"focus"],t.type)?"show":"hide"))}},{name:"click",filter:function(){return w(this.mode,"click")||pt&&w(this.mode,"hover")},handler:function(t){var e;(Nt(t.target,'a[href="#"], a[href=""]')||(e=Nt(t.target,"a[href]"))&&(!Sr(this.target,this.cls)||e.hash&&Mt(this.target,e.hash)))&&t.preventDefault(),this.toggle()}},{name:"toggled",self:!0,el:function(){return this.target},handler:function(t,e){this.updateAria(e)}}],update:{read:function(){return!(!w(this.mode,"media")||!this.media)&&{match:this.matchMedia}},write:function(t){var e=t.match,t=this.isToggled(this.target);(e?!t:t)&&this.toggle()},events:["resize"]},methods:{toggle:function(t){var n=this;if(te(this.target,t||"toggle",[this])){if(!this.queued)return this.toggleElement(this.target);var e,i=this.target.filter(function(t){return He(t,n.clsLeave)});i.length?this.target.forEach(function(t){var e=w(i,t);n.toggleElement(t,e,e)}):(e=this.target.filter(this.isToggled),this.toggleElement(e,!1).then(function(){return n.toggleElement(n.target.filter(function(t){return!w(e,t)}),!0)}))}},updateAria:function(t){ot(this.$el,"aria-expanded",M(t)?t:Sr(this.target,this.cls))}}};function Sr(t,e){return e?He(t,e.split(" ")[0]):$t(t)}function Ir(t){for(var e=t.addedNodes,n=t.removedNodes,i=0;i .uk-parent",toggle:"> a",content:"> ul"}},Navbar:l,Offcanvas:t,OverflowAuto:dt,Responsive:{props:["width","height"],connected:function(){Be(this.$el,"uk-responsive-width")},update:{read:function(){return!!($t(this.$el)&&this.width&&this.height)&&{width:hn(Tt(this.$el)),height:this.height}},write:function(t){cn(this.$el,nt.contain({height:this.height,width:this.width},t).height)},events:["resize"]}},Scroll:ft,Scrollspy:_t,ScrollspyNav:pe,Sticky:Zn,Svg:Li,Switcher:lr,Tab:Bi,Toggle:o,Video:xi,Close:Zi,Spinner:Qi,SlidenavNext:Ki,SlidenavPrevious:Ki,SearchIcon:Ji,Marker:Gi,NavbarToggleIcon:Gi,OverlayIcon:Gi,PaginationNext:Gi,PaginationPrevious:Gi,Totop:Gi}),function(t,e){return Qn.component(e,t)}),Qn.use(function(e){var t,n,i,r;ct&&(n=function(){t||(t=!0,gn.write(function(){return t=!1}),e.update(null,"resize"))},Jt(window,"load resize",n),Jt(document,"loadedmetadata load",n,!0),"ResizeObserver"in window&&new ResizeObserver(n).observe(document.documentElement),Jt(window,"scroll",function(t){i||(i=!0,gn.write(function(){return i=!1}),e.update(null,t.type))},{passive:!0,capture:!0}),r=0,Jt(document,"animationstart",function(t){t=t.target;(Re(t,"animationName")||"").match(/^uk-.*(left|right)/)&&(r++,Re(document.documentElement,"overflowX","hidden"),setTimeout(function(){--r||Re(document.documentElement,"overflowX","")},R(Re(t,"animationDuration"))+100))},!0),Jt(document,mt,function(t){var s,a;ae(t)&&(s=ue(t),a="tagName"in t.target?t.target:Tt(t.target),Qt(document,vt+" "+xt+" scroll",function(t){var e=ue(t),r=e.x,o=e.y;("scroll"!==t.type&&a&&r&&100=Math.abs(e-i)?0 "}).join("")),e.forEach(function(t,e){return n.children[e].textContent=t}))})}},methods:{start:function(){this.stop(),this.date&&this.units.length&&(this.$update(),this.timer=setInterval(this.$update,1e3))},stop:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}}};var Tr="uk-transition-leave",Cr="uk-transition-enter";function _r(t,s,a,u){void 0===u&&(u=0);var c=Ar(s,!0),h={opacity:1},l={opacity:0},e=function(t){return function(){return c===Ar(s)?t():he.reject()}},n=e(function(){return Be(s,Tr),he.all(zr(s).map(function(e,n){return new he(function(t){return setTimeout(function(){return Ze.start(e,l,a/2,"ease").then(t)},n*u)})})).then(function(){return De(s,Tr)})}),e=e(function(){var o=cn(s);return Be(s,Cr),t(),Re(Ot(s),{opacity:0}),new he(function(r){return requestAnimationFrame(function(){var t=Ot(s),e=cn(s);Re(s,"alignContent","flex-start"),cn(s,o);var n=zr(s);Re(t,l);var i=n.map(function(e,n){return new he(function(t){return setTimeout(function(){return Ze.start(e,h,a/2,"ease").then(t)},n*u)})});o!==e&&i.push(Ze.start(s,{height:e},a/2+n.length*u,"ease")),he.all(i).then(function(){De(s,Cr),c===Ar(s)&&(Re(s,{height:"",alignContent:""}),Re(t,{opacity:""}),delete s.dataset.transition),r()})})})});return(He(s,Tr)?Mr(s):He(s,Cr)?Mr(s).then(n):n()).then(e)}function Ar(t,e){return e&&(t.dataset.transition=1+Ar(t)),H(t.dataset.transition)||0}function Mr(t){return he.all(Ot(t).filter(Ze.inProgress).map(function(e){return new he(function(t){return Qt(e,"transitionend transitioncanceled",t)})}))}function zr(t){return _i(Ot(t)).reduce(function(t,e){return t.concat(K(e.filter(function(t){return Ln(t)}),"offsetLeft"))},[])}function Nr(t,d,f){return new he(function(l){return requestAnimationFrame(function(){var u=Ot(d),c=u.map(function(t){return Br(t,!0)}),h=Re(d,["height","padding"]);Ze.cancel(d),u.forEach(Ze.cancel),Dr(d),t(),u=u.concat(Ot(d).filter(function(t){return!w(u,t)})),he.resolve().then(function(){gn.flush();var n,i,r,t,e,o=Re(d,["height","padding"]),e=(n=d,r=c,t=(i=u).map(function(t,e){return!!(Tt(t)&&e in r)&&(r[e]?$t(t)?Or(t):{opacity:0}:{opacity:$t(t)?1:0})}),e=t.map(function(t,e){e=Tt(i[e])===n&&(r[e]||Br(i[e]));return!!e&&(t?"opacity"in t||(e.opacity%1?t.opacity=1:delete e.opacity):delete e.opacity,e)}),[t,e]),s=e[0],a=e[1];u.forEach(function(t,e){return a[e]&&Re(t,a[e])}),Re(d,Y({display:"block"},h)),requestAnimationFrame(function(){var t=u.map(function(t,e){return Tt(t)===d&&Ze.start(t,s[e],f,"ease")}).concat(Ze.start(d,o,f,"ease"));he.all(t).then(function(){u.forEach(function(t,e){return Tt(t)===d&&Re(t,"display",0===s[e].opacity?"none":"")}),Dr(d)},Q).then(l)})})})})}function Br(t,e){var n=Re(t,"zIndex");return!!$t(t)&&Y({display:"",opacity:e?Re(t,"opacity"):"0",pointerEvents:"none",position:"absolute",zIndex:"auto"===n?Pt(t):n},Or(t))}function Dr(t){Re(t.children,{height:"",left:"",opacity:"",pointerEvents:"",position:"",top:"",marginTop:"",marginLeft:"",transform:"",width:"",zIndex:""}),Re(t,{height:"",display:"",padding:""})}function Or(t){var e=sn(t),n=e.height,i=e.width,r=an(t),e=r.top,r=r.left,t=Re(t,["marginTop","marginLeft"]);return{top:e,left:r,height:n,width:i,marginLeft:t.marginLeft,marginTop:t.marginTop,transform:""}}Bi={props:{duration:Number,animation:Boolean},data:{duration:150,animation:"slide"},methods:{animate:function(t,e){var n=this;void 0===e&&(e=this.$el);var i=this.animation;return("fade"===i?_r:"delayed-fade"===i?function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return _r.apply(void 0,t.concat([40]))}:i?Nr:function(){return t(),he.resolve()})(t,e,this.duration).then(function(){return n.$update(e,"resize")},Q)}}},o={mixins:[Bi],args:"target",props:{target:Boolean,selActive:Boolean},data:{target:null,selActive:!1,attrItem:"uk-filter-control",cls:"uk-active",duration:250},computed:{toggles:{get:function(t,e){t=t.attrItem;return ze("["+t+"],[data-"+t+"]",e)},watch:function(){var e,n=this;this.updateState(),!1!==this.selActive&&(e=ze(this.selActive,this.$el),this.toggles.forEach(function(t){return Le(t,n.cls,w(e,t))}))},immediate:!0},children:{get:function(t,e){return ze(t.target+" > *",e)},watch:function(t,e){var n;e&&(n=e,(t=t).length!==n.length||!t.every(function(t){return~n.indexOf(t)}))&&this.updateState()},immediate:!0}},events:[{name:"click",delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(t){t.preventDefault(),this.apply(t.current)}}],methods:{apply:function(t){var e,n,i=this.getState(),t=Hr(t,this.attrItem,this.getState());e=i,n=t,["filter","sort"].every(function(t){return q(e[t],n[t])})||this.setState(t)},getState:function(){var n=this;return this.toggles.filter(function(t){return He(t,n.cls)}).reduce(function(t,e){return Hr(e,n.attrItem,t)},{filter:{"":""},sort:[]})},setState:function(n,i){var r=this;void 0===i&&(i=!0),n=Y({filter:{"":""},sort:[]},n),te(this.$el,"beforeFilter",[this,n]),this.toggles.forEach(function(t){return Le(t,r.cls,!!function(t,e,n){var i=n.filter;void 0===i&&(i={"":""});var r=n.sort,o=r[0],s=r[1],n=Pr(t,e),r=n.filter;void 0===r&&(r="");t=n.group;void 0===t&&(t="");e=n.sort,n=n.order;void 0===n&&(n="asc");return O(e)?t in i&&r===i[t]||!r&&t&&!(t in i)&&!i[""]:o===e&&s===n}(t,r.attrItem,n))}),he.all(ze(this.target,this.$el).map(function(t){function e(){!function(t,e,n){var i=function(t){var t=t.filter,e="";return G(t,function(t){return e+=t||""}),e}(t);n.forEach(function(t){return Re(t,"display",i&&!Mt(t,i)?"none":"")});var r=t.sort,t=r[0],r=r[1];t&&(q(r=function(t,n,i){return Y([],t).sort(function(t,e){return ut(t,n).localeCompare(ut(e,n),void 0,{numeric:!0})*("asc"===i||-1)})}(n,t,r),n)||be(e,r))}(n,t,Ot(t)),r.$update(r.$el)}return i?r.animate(e,t):e()})).then(function(){return te(r.$el,"afterFilter",[r])})},updateState:function(){var t=this;gn.write(function(){return t.setState(t.getState(),!1)})}}};function Pr(t,e){return Tn(ut(t,e),["filter"])}function Hr(t,e,n){var i=Pr(t,e),r=i.filter,t=i.group,e=i.sort,i=i.order;return void 0===i&&(i="asc"),(r||O(e))&&(t?r?(delete n.filter[""],n.filter[t]=r):(delete n.filter[t],(D(n.filter)||""in n.filter)&&(n.filter={"":r||""})):n.filter={"":r||""}),O(e)||(n.sort=[e,i]),n}xi={slide:{show:function(t){return[{transform:jr(-100*t)},{transform:jr()}]},percent:Lr,translate:function(t,e){return[{transform:jr(-100*e*t)},{transform:jr(100*e*(1-t))}]}}};function Lr(t){return Math.abs(Re(t,"transform").split(",")[4]/t.offsetWidth)||0}function jr(t,e){return void 0===t&&(t=0),void 0===e&&(e="%"),t+=t?e:"",ht?"translateX("+t+")":"translate3d("+t+", 0, 0)"}function Fr(t){return"scale3d("+t+", "+t+", 1)"}var Wr=Y({},xi,{fade:{show:function(){return[{opacity:0},{opacity:1}]},percent:function(t){return 1-Re(t,"opacity")},translate:function(t){return[{opacity:1-t},{opacity:t}]}},scale:{show:function(){return[{opacity:0,transform:Fr(.8)},{opacity:1,transform:Fr(1)}]},percent:function(t){return 1-Re(t,"opacity")},translate:function(t){return[{opacity:1-t,transform:Fr(1-.2*t)},{opacity:t,transform:Fr(.8+.2*t)}]}}});function Vr(t,e,n){te(t,ee(e,!1,!1,n))}Zi={mixins:[{props:{autoplay:Boolean,autoplayInterval:Number,pauseOnHover:Boolean},data:{autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},connected:function(){this.autoplay&&this.startAutoplay()},disconnected:function(){this.stopAutoplay()},update:function(){ot(this.slides,"tabindex","-1")},events:[{name:"visibilitychange",el:function(){return document},filter:function(){return this.autoplay},handler:function(){document.hidden?this.stopAutoplay():this.startAutoplay()}}],methods:{startAutoplay:function(){var t=this;this.stopAutoplay(),this.interval=setInterval(function(){return(!t.draggable||!Me(":focus",t.$el))&&(!t.pauseOnHover||!Mt(t.$el,":hover"))&&!t.stack.length&&t.show("next")},this.autoplayInterval)},stopAutoplay:function(){this.interval&&clearInterval(this.interval)}}},{props:{draggable:Boolean},data:{draggable:!0,threshold:10},created:function(){var i=this;["start","move","end"].forEach(function(t){var n=i[t];i[t]=function(t){var e=ue(t).x*(lt?-1:1);i.prevPos=e!==i.pos?i.pos:i.prevPos,i.pos=e,n(t)}})},events:[{name:mt,delegate:function(){return this.selSlides},handler:function(t){var e;!this.draggable||!ae(t)&&(!(e=t.target).children.length&&e.childNodes.length)||Nt(t.target,St)||0this.pos,this.index=t?this.index:this.prevIndex,t&&(this.percent=1-this.percent),this.show(0 '}).join("")),this.navItems.concat(this.nav).forEach(function(t){return t&&(t.hidden=!n.maxIndex)}),this.updateNav()},events:["resize"]},events:[{name:"click",delegate:function(){return this.selNavItem},handler:function(t){t.preventDefault(),this.show(ut(t.current,this.attrItem))}},{name:"itemshow",handler:"updateNav"}],methods:{updateNav:function(){var n=this,i=this.getValidIndex();this.navItems.forEach(function(t){var e=ut(t,n.attrItem);Le(t,n.clsActive,H(e)===i),Le(t,"uk-invisible",n.finite&&("previous"===e&&0===i||"next"===e&&i>=n.maxIndex))})}}}],props:{clsActivated:Boolean,easing:String,index:Number,finite:Boolean,velocity:Number,selSlides:String},data:function(){return{easing:"ease",finite:!1,velocity:1,index:0,prevIndex:-1,stack:[],percent:0,clsActive:"uk-active",clsActivated:!1,Transitioner:!1,transitionOptions:{}}},connected:function(){this.prevIndex=-1,this.index=this.getValidIndex(this.$props.index),this.stack=[]},disconnected:function(){De(this.slides,this.clsActive)},computed:{duration:function(t,e){t=t.velocity;return Rr(e.offsetWidth/t)},list:function(t,e){return Me(t.selList,e)},maxIndex:function(){return this.length-1},selSlides:function(t){return t.selList+" "+(t.selSlides||"> *")},slides:{get:function(){return ze(this.selSlides,this.$el)},watch:function(){this.$reset()}},length:function(){return this.slides.length}},events:{itemshown:function(){this.$update(this.list)}},methods:{show:function(t,e){var n=this;if(void 0===e&&(e=!1),!this.dragging&&this.length){var i=this.stack,r=e?0:i.length,o=function(){i.splice(r,1),i.length&&n.show(i.shift(),!0)};if(i[e?"unshift":"push"](t),!e&&1
'}},created:function(){var t=Me(this.template),e=Me(this.selList,t);this.items.forEach(function(){return be(e,"")}),this.$mount(be(this.container,t))},computed:{caption:function(t,e){return Me(t.selCaption,e)}},events:[{name:gt+" "+mt+" keydown",handler:"showControls"},{name:"click",self:!0,delegate:function(){return this.selSlides},handler:function(t){t.defaultPrevented||this.hide()}},{name:"shown",self:!0,handler:function(){this.showControls()}},{name:"hide",self:!0,handler:function(){this.hideControls(),De(this.slides,this.clsActive),Ze.stop(this.slides)}},{name:"hidden",self:!0,handler:function(){this.$destroy(!0)}},{name:"keyup",el:function(){return document},handler:function(t){if(this.isToggled(this.$el)&&this.draggable)switch(t.keyCode){case 37:this.show("previous");break;case 39:this.show("next")}}},{name:"beforeitemshow",handler:function(t){this.isToggled()||(this.draggable=!1,t.preventDefault(),this.toggleElement(this.$el,!0,!1),this.animation=Wr.scale,De(t.target,this.clsActive),this.stack.splice(1,0,this.index))}},{name:"itemshow",handler:function(){we(this.caption,this.getItem().caption||"");for(var t=-this.preload;t<=this.preload;t++)this.loadItem(this.index+t)}},{name:"itemshown",handler:function(){this.draggable=this.$props.draggable}},{name:"itemload",handler:function(t,n){var i=this,r=n.source,e=n.type,o=n.alt;void 0===o&&(o="");var s,a,u,c=n.poster,h=n.attrs;void 0===h&&(h={}),this.setItem(n," "),r&&(a={frameborder:"0",allow:"autoplay",allowfullscreen:"",style:"max-width: 100%; box-sizing: border-box;","uk-responsive":"","uk-video":""+this.videoAutoplay},"image"===e||r.match(/\.(avif|jpe?g|a?png|gif|svg|webp)($|\?)/i)?ge(r,h.srcset,h.size).then(function(t){var e=t.width,t=t.height;return i.setItem(n,Ur("img",Y({src:r,width:e,height:t,alt:o},h)))},function(){return i.setError(n)}):"video"===e||r.match(/\.(mp4|webm|ogv)($|\?)/i)?(Jt(u=Ur("video",Y({src:r,poster:c,controls:"",playsinline:"","uk-video":""+this.videoAutoplay},h)),"loadedmetadata",function(){ot(u,{width:u.videoWidth,height:u.videoHeight}),i.setItem(n,u)}),Jt(u,"error",function(){return i.setError(n)})):"iframe"===e||r.match(/\.(html|php)($|\?)/i)?this.setItem(n,Ur("iframe",Y({src:r,frameborder:"0",allowfullscreen:"",class:"uk-lightbox-iframe"},h))):(s=r.match(/\/\/(?:.*?youtube(-nocookie)?\..*?[?&]v=|youtu\.be\/)([\w-]{11})[&?]?(.*)?/))?this.setItem(n,Ur("iframe",Y({src:"https://www.youtube/"+(s[1]||"")+".com/embed/"+s[2]+(s[3]?"?"+s[3]:""),width:1920,height:1080},a,h))):(s=r.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/))&&me("https://vimeo.com/api/oembed.json?maxwidth=1920&url="+encodeURI(r),{responseType:"json",withCredentials:!1}).then(function(t){var e=t.response,t=e.height,e=e.width;return i.setItem(n,Ur("iframe",Y({src:"https://player.vimeo.com/video/"+s[1]+(s[2]?"?"+s[2]:""),width:e,height:t},a,h)))},function(){return i.setError(n)}))}}],methods:{loadItem:function(t){void 0===t&&(t=this.index);t=this.getItem(t);this.getSlide(t).childElementCount||te(this.$el,"itemload",[t])},getItem:function(t){return void 0===t&&(t=this.index),this.items[it(t,this.slides)]},setItem:function(t,e){te(this.$el,"itemloaded",[this,we(this.getSlide(t),e)])},getSlide:function(t){return this.slides[this.items.indexOf(t)]},setError:function(t){this.setItem(t,' ')},showControls:function(){clearTimeout(this.controlsTimer),this.controlsTimer=setTimeout(this.hideControls,this.delayControls),Be(this.$el,"uk-active","uk-transition-active")},hideControls:function(){De(this.$el,"uk-active","uk-transition-active")}}};function Ur(t,e){t=_e("<"+t+">");return ot(t,e),t}Ki={install:function(t,e){t.lightboxPanel||t.component("lightboxPanel",qr);Y(e.props,t.component("lightboxPanel").options.props)},props:{toggle:String},data:{toggle:"a"},computed:{toggles:{get:function(t,e){return ze(t.toggle,e)},watch:function(){this.hide()}}},disconnected:function(){this.hide()},events:[{name:"click",delegate:function(){return this.toggle+":not(.uk-disabled)"},handler:function(t){t.preventDefault(),this.show(t.current)}}],methods:{show:function(t){var e,n=this,i=J(this.toggles.map(Yr),"source");return _(t)&&(e=Yr(t).source,t=x(i,function(t){t=t.source;return e===t})),this.panel=this.panel||this.$create("lightboxPanel",Y({},this.$props,{items:i})),Jt(this.panel.$el,"hidden",function(){return n.panel=!1}),this.panel.show(t)},hide:function(){return this.panel&&this.panel.hide()}}};function Yr(e){var n={};return["href","caption","type","poster","alt","attrs"].forEach(function(t){n["href"===t?"source":t]=ut(e,t)}),n.attrs=Tn(n.attrs),n}Gi={mixins:[$i],functional:!0,args:["message","status"],data:{message:"",status:"",timeout:5e3,group:null,pos:"top-center",clsContainer:"uk-notification",clsClose:"uk-notification-close",clsMsg:"uk-notification-message"},install:function(i){i.notification.closeAll=function(e,n){Ae(document.body,function(t){t=i.getComponent(t,"notification");!t||e&&e!==t.group||t.close(n)})}},computed:{marginProp:function(t){return"margin"+(g(t.pos,"top")?"Top":"Bottom")},startProps:function(){var t={opacity:0};return t[this.marginProp]=-this.$el.offsetHeight,t}},created:function(){var t=Me("."+this.clsContainer+"-"+this.pos,this.container)||be(this.container,'
');this.$mount(be(t,'"))},connected:function(){var t,e=this,n=L(Re(this.$el,this.marginProp));Ze.start(Re(this.$el,this.startProps),((t={opacity:1})[this.marginProp]=n,t)).then(function(){e.timeout&&(e.timer=setTimeout(e.close,e.timeout))})},events:((Ji={click:function(t){Nt(t.target,'a[href="#"],a[href=""]')&&t.preventDefault(),this.close()}})[wt]=function(){this.timer&&clearTimeout(this.timer)},Ji[bt]=function(){this.timeout&&(this.timer=setTimeout(this.close,this.timeout))},Ji),methods:{close:function(t){function e(t){var e=Tt(t);te(t,"close",[n]),$e(t),e&&!e.hasChildNodes()&&$e(e)}var n=this;this.timer&&clearTimeout(this.timer),t?e(this.$el):Ze.start(this.$el,this.startProps).then(e)}}};var Xr=["x","y","bgx","bgy","rotate","scale","color","backgroundColor","borderColor","opacity","blur","hue","grayscale","invert","saturate","sepia","fopacity","stroke"],mr={mixins:[dr],props:Xr.reduce(function(t,e){return t[e]="list",t},{}),data:Xr.reduce(function(t,e){return t[e]=void 0,t},{}),computed:{props:function(f,p){var m=this;return Xr.reduce(function(t,e){if(O(f[e]))return t;var n,i,r=e.match(/color/i),o=r||"opacity"===e,s=f[e].slice();o&&Re(p,e,""),s.length<2&&s.unshift(("scale"===e?1:o?Re(p,e):0)||0);var a,u,c,h,l,o=s.reduce(function(t,e){return z(e)&&e.replace(/-|\d/g,"").trim()||t},"");if(r?(r=p.style.color,s=s.map(function(t){return Re(Re(p,"color",t),"color").split(/[(),]/g).slice(1,-1).concat(1).slice(0,4).map(L)}),p.style.color=r):g(e,"bg")?(a="bgy"===e?"height":"width",s=s.map(function(t){return pn(t,a,m.$el)}),Re(p,"background-position-"+e[2],""),i=Re(p,"backgroundPosition").split(" ")["x"===e[2]?0:1],n=m.covers?(u=Math.min.apply(Math,s),c=Math.max.apply(Math,s),h=s.indexOf(u)Qr(u||c))?"in":"out"),{dir:h,percent:i?1-r:n?r:e?1:0})})},percent:function(){return Math.abs((Re(l,"transform").split(",")[4]*(lt?-1:1)+e)/(d-e))},getDistance:function(){return Math.abs(d-e)},getItemIn:function(t){void 0===t&&(t=!1);var e=this.getActives(),n=to(l,Kr(c||u,l,i));return t&&(t=e,e=n,n=t),n[x(n,function(t){return!w(e,t)})]},getActives:function(){return to(l,Kr(u||c,l,i))}}}},computed:{avgWidth:function(){return Zr(this.list)/this.length},finite:function(t){return t.finite||Math.ceil(Zr(this.list))r.maxIndex?r.maxIndex:n)||(e=r.slides[n+1],r.center&&e&&in.maxIndex||n.sets&&!w(n.sets,e))}),!this.length||this.dragging||this.stack.length||(this.reorder(),this._translate(1));var e=this._getTransitioner(this.index).getActives();this.slides.forEach(function(t){return Le(t,n.clsActive,w(e,t))}),!this.clsActivated||this.sets&&!w(this.sets,L(this.index))||this.slides.forEach(function(t){return Le(t,n.clsActivated||"",w(e,t))})},events:["resize"]},events:{beforeitemshow:function(t){!this.dragging&&this.sets&&this.stack.length<2&&!w(this.sets,this.index)&&(this.index=this.getValidIndex());var e=Math.abs(this.index-this.prevIndex+(0this.prevIndex?(this.maxIndex+1)*this.dir:0));if(!this.dragging&&1=n.index?-1:"")}),this.center)for(var t=this.slides[i],e=on(this.list).width/2-on(t).width/2,r=0;0s[t]-i)&&e}}(i.target,r,n,e,a,i===s&&t.moved!==r))&&(a&&n===a||(i!==s?(s.remove(n),t.moved=r):delete t.moved,i.insert(n,a),this.touched.add(i)))))))},events:["move"]},methods:{init:function(t){var e=t.target,n=t.button,i=t.defaultPrevented,r=this.items.filter(function(t){return Bt(e,t)})[0];!r||i||0 $)/g,"$1div$2"));return Re(t,"margin","0","important"),Re(t,Y({boxSizing:"border-box",width:e.offsetWidth,height:e.offsetHeight},Re(e,["paddingLeft","paddingRight","paddingTop","paddingBottom"]))),cn(t.firstElementChild,cn(e.firstElementChild)),t}(this.$container,this.placeholder);var e,n,i=this.placeholder.getBoundingClientRect(),r=i.left,i=i.top;Y(this.origin,{offsetLeft:this.pos.x-r,offsetTop:this.pos.y-i}),Be(this.drag,this.clsDrag,this.clsCustom),Be(this.placeholder,this.clsPlaceholder),Be(this.items,this.clsItem),Be(document.documentElement,this.clsDragState),te(this.$el,"start",[this,this.placeholder]),e=this.pos,n=Date.now(),ro=setInterval(function(){var t=e.x,s=e.y;s+=window.pageYOffset;var a=.3*(Date.now()-n);n=Date.now(),Vn(document.elementFromPoint(t,e.y)).reverse().some(function(t){var e=t.scrollTop,n=t.scrollHeight,i=sn(Rn(t)),r=i.top,o=i.bottom,i=i.height;if(rthis.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t)},end:function(){var t,i=this;Zt(document,gt,this.move),Zt(document,vt,this.end),Zt(window,"scroll",this.scroll),this.drag&&(clearInterval(ro),t=this.getSortable(this.placeholder),this===t?this.origin.index!==Pt(this.placeholder)&&te(this.$el,"moved",[this,this.placeholder]):(te(t.$el,"added",[t,this.placeholder]),te(this.$el,"removed",[this,this.placeholder])),te(this.$el,"stop",[this,this.placeholder]),$e(this.drag),this.drag=null,this.touched.forEach(function(t){var e=t.clsPlaceholder,n=t.clsItem;return i.touched.forEach(function(t){return De(t.items,e,n)})}),this.touched=null,De(document.documentElement,this.clsDragState))},insert:function(t,e){var n=this;Be(this.items,this.clsItem);this.animate(function(){return e?xe(e,t):be(n.target,t)})},remove:function(t){Bt(t,this.target)&&this.animate(function(){return $e(t)})},getSortable:function(t){do{var e=this.$getComponent(t,"sortable");if(e&&(e===this||!1!==this.group&&e.group===this.group))return e}while(t=Tt(t))}}};function oo(t,e){return t[1]>e[0]&&e[1]>t[0]}bt={mixins:[$i,mi,Si],args:"title",props:{delay:Number,title:String},data:{pos:"top",title:"",delay:0,animation:["uk-animation-scale-up"],duration:100,cls:"uk-active",clsPos:"uk-tooltip"},beforeConnect:function(){var t;this._hasTitle=st(this.$el,"title"),ot(this.$el,"title",""),this.updateAria(!1),Et(t=this.$el)||ot(t,"tabindex","0")},disconnected:function(){this.hide(),ot(this.$el,"title",this._hasTitle?this.title:null)},methods:{show:function(){var e=this;!this.isToggled(this.tooltip||null)&&this.title&&(this._unbind=Qt(document,"show keydown "+mt,this.hide,!1,function(t){return t.type===mt&&!Bt(t.target,e.$el)||"keydown"===t.type&&27===t.keyCode||"show"===t.type&&t.detail[0]!==e&&t.detail[0].$name===e.$name}),clearTimeout(this.showTimer),this.showTimer=setTimeout(this._show,this.delay))},hide:function(){var t=this;Mt(this.$el,"input:focus")||(clearTimeout(this.showTimer),this.isToggled(this.tooltip||null)&&this.toggleElement(this.tooltip,!1,!1).then(function(){t.tooltip=$e(t.tooltip),t._unbind()}))},_show:function(){var n=this;this.tooltip=be(this.container,'"),Jt(this.tooltip,"toggled",function(t,e){n.updateAria(e),e&&(n.positionAt(n.tooltip,n.$el),n.origin="y"===n.getAxis()?fn(n.dir)+"-"+n.align:n.align+"-"+fn(n.dir))}),this.toggleElement(this.tooltip,!0)},updateAria:function(t){ot(this.$el,"aria-expanded",t)}},events:((Si={focus:"show",blur:"hide"})[wt+" "+bt]=function(t){ae(t)||this[t.type===wt?"show":"hide"]()},Si[mt]=function(t){ae(t)&&this.show()},Si)};Si={props:{allow:String,clsDragover:String,concurrent:Number,maxSize:Number,method:String,mime:String,msgInvalidMime:String,msgInvalidName:String,msgInvalidSize:String,multiple:Boolean,name:String,params:Object,type:String,url:String},data:{allow:!1,clsDragover:"uk-dragover",concurrent:1,maxSize:0,method:"POST",mime:!1,msgInvalidMime:"Invalid File Type: %s",msgInvalidName:"Invalid File Name: %s",msgInvalidSize:"Invalid File Size: %s Kilobytes Max",multiple:!1,name:"files[]",params:{},type:"",url:"",abort:Q,beforeAll:Q,beforeSend:Q,complete:Q,completeAll:Q,error:Q,fail:Q,load:Q,loadEnd:Q,loadStart:Q,progress:Q},events:{change:function(t){Mt(t.target,'input[type="file"]')&&(t.preventDefault(),t.target.files&&this.upload(t.target.files),t.target.value="")},drop:function(t){ao(t);t=t.dataTransfer;t&&t.files&&(De(this.$el,this.clsDragover),this.upload(t.files))},dragenter:function(t){ao(t)},dragover:function(t){ao(t),Be(this.$el,this.clsDragover)},dragleave:function(t){ao(t),De(this.$el,this.clsDragover)}},methods:{upload:function(t){var i=this;if(t.length){te(this.$el,"upload",[t]);for(var e=0;e}}
+
+ Learn More
+
+
+ Download
+
+Kubernetes operators in Java made easy!
+{{< blocks/link-down color="info" >}}
+{{< /blocks/cover >}}
+
+
+{{% blocks/lead color="gray" %}}
+Whether you want to build applications that operate themselves or provision infrastructure from Java code, Kubernetes Operators are the way to go.
+Java Operator SDK is based on the fabric8 Kubernetes client and will make it easy for Java developers to embrace this new way of automation.
+{{% /blocks/lead %}}
+
+
+{{% blocks/section color="secondary" type="row" %}}
+{{% blocks/feature icon="fab fa-slack" title="Contact us on Slack" url="https://kubernetes.slack.com/archives/CAW0GV7A5" %}}
+Feel free to reach out on [Kubernetes Slack](https://kubernetes.slack.com/archives/CAW0GV7A5)
+
+Ask any question, we are happy to answer!
+{{% /blocks/feature %}}
+
+
+{{% blocks/feature icon="fab fa-github" title="Contributions welcome!" url="https://github.com/operator-framework/java-operator-sdk" %}}
+We do a [Pull Request](https://github.com/operator-framework/java-operator-sdk/pulls) contributions workflow on **GitHub**. New users are always welcome!
+{{% /blocks/feature %}}
+
+
+{{% blocks/feature icon="fa-brands fa-bluesky" title="Follow us on BlueSky!" url="https://bsky.app/profile/javaoperatorsdk.bsky.social" %}}
+For announcement of latest features etc.
+{{% /blocks/feature %}}
+
+
+{{% /blocks/section %}}
+
+
+{{% blocks/section %}}
+
+Sponsored by:
+{.h1 .text-center}
+
+ &
+{.h1 .text-center}
+
+{{% /blocks/section %}}
+
+
+{{% blocks/section type="row" %}}
+
+{{% blocks/feature icon="no_icon" %}}
+{{% /blocks/feature %}}
+
+{{% blocks/feature icon="no_icon" %}}
+Java Operator SDK is a [Cloud Native Computing Foundation](https://www.cncf.io) incubating project as part of [Operator Framework](https://www.cncf.io/projects/operator-framework/)
+{.h3 .text-center}
+
+
+
+{{% /blocks/feature %}}
+
+{{% /blocks/section %}}
+
diff --git a/docs/content/en/blog/_index.md b/docs/content/en/blog/_index.md
new file mode 100644
index 0000000000..e792e415fe
--- /dev/null
+++ b/docs/content/en/blog/_index.md
@@ -0,0 +1,8 @@
+---
+title: Blog
+menu: {main: {weight: 2}}
+---
+
+This is the **blog** section. It has two categories: News and Releases.
+
+Content is coming soon.
diff --git a/docs/content/en/blog/news/_index.md b/docs/content/en/blog/news/_index.md
new file mode 100644
index 0000000000..aaf1c2adcd
--- /dev/null
+++ b/docs/content/en/blog/news/_index.md
@@ -0,0 +1,4 @@
+---
+title: Posts
+weight: 220
+---
diff --git a/docs/content/en/blog/news/etcd-as-app-db.md b/docs/content/en/blog/news/etcd-as-app-db.md
new file mode 100644
index 0000000000..c6306ddffc
--- /dev/null
+++ b/docs/content/en/blog/news/etcd-as-app-db.md
@@ -0,0 +1,115 @@
+---
+title: Using k8s' ETCD as your application DB
+date: 2025-01-16
+---
+
+# FAQ: Is Kubernetes’ ETCD the Right Database for My Application?
+
+## Answer
+
+While the idea of moving your application data to Custom Resources (CRs) aligns with the "Cloud Native" philosophy, it often introduces more challenges than benefits. Let’s break it down:
+
+---
+
+### Top Reasons Why Storing Data in ETCD Through CRs Looks Appealing
+
+1. **Storing application data as CRs enables treating your application’s data like infrastructure:**
+ - **GitOps compatibility:** Declarative content can be stored in Git repositories, ensuring reproducibility.
+ - **Infrastructure alignment:** Application data can follow the same workflow as other infrastructure components.
+
+---
+
+### Challenges of Using Kubernetes’ ETCD as Your Application’s Database
+
+#### Technical Limitations:
+
+- **Data Size Limitations 🔴:**
+ - Each CR is capped at 1.5 MB by default. Raising this limit is possible but impacts cluster performance.
+ - Kubernetes ETCD has a storage cap of 2 GB by default. Adjusting this limit affects the cluster globally, with potential performance degradation.
+
+- **API Server Load Considerations 🟡:**
+ - The Kubernetes API server is designed to handle infrastructure-level requests.
+ - Storing application data in CRs might add significant load to the API server, requiring it to be scaled appropriately to handle both infrastructure and application demands.
+ - This added load can impact cluster performance and increase operational complexity.
+
+- **Guarantees 🟡:**
+ - Efficient queries are hard to implement and there is no support for them.
+ - ACID properties are challenging to leverage and everything holds mostly in read-only mode.
+
+#### Operational Impact:
+
+- **Lost Flexibility 🟡:**
+ - Modifying application data requires complex YAML editing and full redeployment.
+ - This contrasts with traditional databases that often feature user-friendly web UIs or APIs for real-time updates.
+
+- **Infrastructure Complexity 🟠:**
+ - Backup, restore, and lifecycle management for application data are typically separate from deployment workflows.
+ - Storing both in ETCD mixes these concerns, complicating operations and standardization.
+
+#### Security:
+
+- **Governance and Security 🔴:**
+ - Sensitive data stored in plain YAML may lack adequate encryption or access controls.
+ - Applying governance policies over text-based files can become a significant challenge.
+
+---
+
+### When Might Using CRs Make Sense?
+
+For small, safe subsets of data—such as application configurations—using CRs might be appropriate. However, this approach requires a detailed evaluation of the trade-offs.
+
+---
+
+### Conclusion
+
+While it’s tempting to unify application data with infrastructure control via CRs, this introduces risks that can outweigh the benefits. For most applications, separating concerns by using a dedicated database is the more robust, scalable, and manageable solution.
+
+---
+
+### A Practical Example
+
+A typical “user” described in JSON:
+
+```json
+{
+ "username": "myname",
+ "enabled": true,
+ "email": "myname@test.com",
+ "firstName": "MyFirstName",
+ "lastName": "MyLastName",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "test"
+ },
+ {
+ "type": "token",
+ "value": "oidc"
+ }
+ ],
+ "realmRoles": [
+ "user",
+ "viewer",
+ "admin"
+ ],
+ "clientRoles": {
+ "account": [
+ "view-profile",
+ "change-group",
+ "manage-account"
+ ]
+ }
+}
+```
+
+This example represents about **0.5 KB of data**, meaning (with standard settings) a maximum of ~2000 users can be defined in the same CR.
+Additionally:
+
+- It contains **sensitive information**, which should be securely stored.
+- Regulatory rules (like GDPR) apply.
+
+---
+
+### References
+
+- [Using etcd as primary store database](https://stackoverflow.com/questions/41063238/using-etcd-as-primary-store-database)
diff --git a/docs/content/en/blog/news/nonssa-vs-ssa.md b/docs/content/en/blog/news/nonssa-vs-ssa.md
new file mode 100644
index 0000000000..8ea7497771
--- /dev/null
+++ b/docs/content/en/blog/news/nonssa-vs-ssa.md
@@ -0,0 +1,117 @@
+---
+title: From legacy approach to server-side apply
+date: 2025-02-25
+author: >-
+ [Attila Mészáros](https://github.com/csviri)
+---
+
+From version 5 of Java Operator SDK [server side apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/)
+is a first-class feature and is used by default to update resources.
+As we will see, unfortunately (or fortunately), using it requires changes for your reconciler implementation.
+
+For this reason, we prepared a feature flag, which you can flip if you are not prepared to migrate yet:
+[`ConfigurationService.useSSAToPatchPrimaryResource`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L493)
+
+Setting this flag to false will make the operations done by `UpdateControl` using the former approach (not SSA).
+Similarly, the finalizer handling won't utilize SSA handling.
+The plan is to keep this flag and allow the use of the former approach (non-SSA) also in future releases.
+
+For dependent resources, a separate flag exists (this was true also before v5) to use SSA or not:
+[`ConfigurationService.ssaBasedCreateUpdateMatchForDependentResources`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L373)
+
+
+## Resource handling without and with SSA
+
+Until version 5, changing primary resources through `UpdateControl` did not use server-side apply.
+So usually, the implementation of the reconciler looked something like this:
+
+```java
+
+ @Override
+ public UpdateControl reconcile(WebPage webPage, Context context) {
+
+ reconcileLogicForManagedResources(webPage);
+ webPage.setStatus(updatedStatusForWebPage(webPage));
+
+ return UpdateControl.patchStatus(webPage);
+ }
+
+```
+
+In other words, after the reconciliation of managed resources, the reconciler updates the status of the
+primary resource passed as an argument to the reconciler.
+Such changes on the primary are fine since we don't work directly with the cached object, the argument is
+already cloned.
+
+So, how does this change with SSA?
+For SSA, the updates should contain (only) the "fully specified intent".
+In other words, we should only fill in the values we care about.
+In practice, it means creating a **fresh copy** of the resource and setting only what is necessary:
+
+```java
+
+@Override
+public UpdateControl reconcile(WebPage webPage, Context context) {
+
+ reconcileLogicForManagedResources(webPage);
+
+ WebPage statusPatch = new WebPage();
+ statusPatch.setMetadata(new ObjectMetaBuilder()
+ .withName(webPage.getMetadata().getName())
+ .withNamespace(webPage.getMetadata().getNamespace())
+ .build());
+ statusPatch.setStatus(updatedStatusForWebPage(webPage));
+
+ return UpdateControl.patchStatus(statusPatch);
+}
+```
+
+Note that we just filled out the status here since we patched the status (not the resource spec).
+Since the status is a sub-resource in Kubernetes, it will only update the status part.
+
+Every controller you register will have its default [field manager](https://kubernetes.io/docs/reference/using-api/server-side-apply/#managers).
+You can override the field manager name using [`ControllerConfiguration.fieldManager`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java#L89).
+That will set the field manager for the primary resource and dependent resources as well.
+
+## Migrating to SSA
+
+Using the legacy or the new SSA way of resource management works well.
+However, migrating existing resources to SSA might be a challenge.
+We strongly recommend testing the migration, thus implementing an integration test where
+a custom resource is created using the legacy approach and is managed by the new approach.
+
+We prepared an integration test to demonstrate how such migration, even in a simple case, can go wrong,
+and how to fix it.
+
+To fix some cases, you might need to [strip managed fields](https://kubernetes.io/docs/reference/using-api/server-side-apply/#clearing-managedfields)
+from the custom resource.
+
+See [`StatusPatchSSAMigrationIT`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java) for details.
+
+Feel free to report common issues, so we can prepare some utilities to handle them.
+
+## Optimistic concurrency control
+
+When you create a resource for SSA as mentioned above, the framework will apply changes even if the underlying resource
+or status subresource is changed while the reconciliation was running.
+First, it always forces the conflicts in the background as advised in [Kubernetes docs](https://kubernetes.io/docs/reference/using-api/server-side-apply/#using-server-side-apply-in-a-controller),
+ in addition to that since the resource version is not set it won't do optimistic locking. If you still
+want to have optimistic locking for the patch, use the resource version of the original resource:
+
+```java
+@Override
+public UpdateControl reconcile(WebPage webPage, Context context) {
+
+ reconcileLogicForManagedResources(webPage);
+
+ WebPage statusPatch = new WebPage();
+ statusPatch.setMetadata(new ObjectMetaBuilder()
+ .withName(webPage.getMetadata().getName())
+ .withNamespace(webPage.getMetadata().getNamespace())
+ .withResourceVersion(webPage.getMetadata().getResourceVersion())
+ .build());
+ statusPatch.setStatus(updatedStatusForWebPage(webPage));
+
+ return UpdateControl.patchStatus(statusPatch);
+}
+```
diff --git a/docs/content/en/blog/news/primary-cache-for-next-recon.md b/docs/content/en/blog/news/primary-cache-for-next-recon.md
new file mode 100644
index 0000000000..67326a6f17
--- /dev/null
+++ b/docs/content/en/blog/news/primary-cache-for-next-recon.md
@@ -0,0 +1,92 @@
+---
+title: How to guarantee allocated values for next reconciliation
+date: 2025-05-22
+author: >-
+ [Attila Mészáros](https://github.com/csviri) and [Chris Laprun](https://github.com/metacosm)
+---
+
+We recently released v5.1 of Java Operator SDK (JOSDK). One of the highlights of this release is related to a topic of
+so-called
+[allocated values](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#representing-allocated-values
+).
+
+To describe the problem, let's say that our controller needs to create a resource that has a generated identifier, i.e.
+a resource which identifier cannot be directly derived from the custom resource's desired state as specified in its
+`spec` field. To record the fact that the resource was successfully created, and to avoid attempting to
+recreate the resource again in subsequent reconciliations, it is typical for this type of controller to store the
+generated identifier in the custom resource's `status` field.
+
+The Java Operator SDK relies on the informers' cache to retrieve resources. These caches, however, are only guaranteed
+to be eventually consistent. It could happen that, if some other event occurs, that would result in a new
+reconciliation, **before** the update that's been made to our resource status has the chance to be propagated first to
+the cluster and then back to the informer cache, that the resource in the informer cache does **not** contain the latest
+version as modified by the reconciler. This would result in a new reconciliation where the generated identifier would be
+missing from the resource status and, therefore, another attempt to create the resource by the reconciler, which is not
+what we'd like.
+
+Java Operator SDK now provides a utility class [
+`PrimaryUpdateAndCacheUtils`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/PrimaryUpdateAndCacheUtils.java)
+to handle this particular use case. Using that overlay cache, your reconciler is guaranteed to see the most up-to-date
+version of the resource on the next reconciliation:
+
+```java
+
+@Override
+public UpdateControl reconcile(
+ StatusPatchCacheCustomResource resource,
+ Context context) {
+
+ // omitted code
+
+ var freshCopy = createFreshCopy(resource); // need fresh copy just because we use the SSA version of update
+ freshCopy
+ .getStatus()
+ .setValue(statusWithAllocatedValue());
+
+ // using the utility instead of update control to patch the resource status
+ var updated =
+ PrimaryUpdateAndCacheUtils.ssaPatchStatusAndCacheResource(resource, freshCopy, context);
+ return UpdateControl.noUpdate();
+}
+```
+
+How does `PrimaryUpdateAndCacheUtils` work?
+There are multiple ways to solve this problem, but ultimately, we only provide the solution described below. If you
+want to dig deep in alternatives, see
+this [PR](https://github.com/operator-framework/java-operator-sdk/pull/2800/files).
+
+The trick is to intercept the resource that the reconciler updated and cache that version in an additional cache on top
+of the informer's cache. Subsequently, if the reconciler needs to read the resource, the SDK will first check if it is
+in the overlay cache and read it from there if present, otherwise read it from the informer's cache. If the informer
+receives an event with a fresh resource, we always remove the resource from the overlay cache, since that is a more
+recent resource. But this **works only** if the reconciler updates the resource using **optimistic locking**.
+If the update fails on conflict, because the resource has already been updated on the cluster before we got
+the chance to get our update in, we simply wait and poll the informer cache until the new resource version from the
+server appears in the informer's cache,
+and then try to apply our updates to the resource again using the updated version from the server, again with optimistic
+locking.
+
+So why is optimistic locking required? We hinted at it above, but the gist of it, is that if another party updates the
+resource before we get a chance to, we wouldn't be able to properly handle the resulting situation correctly in all
+cases. The informer would receive that new event before our own update would get a chance to propagate. Without
+optimistic locking, there wouldn't be a fail-proof way to determine which update should prevail (i.e. which occurred
+first), in particular in the event of the informer losing the connection to the cluster or other edge cases (the joys of
+distributed computing!).
+
+Optimistic locking simplifies the situation and provides us with stronger guarantees: if the update succeeds, then we
+can be sure we have the proper resource version in our caches. The next event will contain our update in all cases.
+Because we know that, we can also be sure that we can evict the cached resource in the overlay cache whenever we receive
+a new event. The overlay cache is only used if the SDK detects that the original resource (i.e. the one before we
+applied our status update in the example above) is still in the informer's cache.
+
+The following diagram sums up the process:
+
+```mermaid
+flowchart TD
+ A["Update Resource with Lock"] --> B{"Is Successful"}
+ B -- Fails on conflict --> D["Poll the Informer cache until resource updated"]
+ D --> A
+ B -- Yes --> n2{"Original resource still in informer cache?"}
+ n2 -- Yes --> C["Cache the resource in overlay cache"]
+ n2 -- No --> n3["Informer cache already contains up-to-date version, do not use overlay cache"]
+```
diff --git a/docs/content/en/blog/releases/_index.md b/docs/content/en/blog/releases/_index.md
new file mode 100644
index 0000000000..dbf2ee1729
--- /dev/null
+++ b/docs/content/en/blog/releases/_index.md
@@ -0,0 +1,4 @@
+---
+title: Releases
+weight: 230
+---
diff --git a/docs/content/en/blog/releases/v5-release-beta1.md b/docs/content/en/blog/releases/v5-release-beta1.md
new file mode 100644
index 0000000000..7dd133cc1d
--- /dev/null
+++ b/docs/content/en/blog/releases/v5-release-beta1.md
@@ -0,0 +1,6 @@
+---
+title: Version 5 Released! (beta1)
+date: 2024-12-06
+---
+
+See release notes [here](v5-release.md).
\ No newline at end of file
diff --git a/docs/content/en/blog/releases/v5-release.md b/docs/content/en/blog/releases/v5-release.md
new file mode 100644
index 0000000000..6d14dfb73a
--- /dev/null
+++ b/docs/content/en/blog/releases/v5-release.md
@@ -0,0 +1,397 @@
+---
+title: Version 5 Released!
+date: 2025-01-06
+---
+
+We are excited to announce that Java Operator SDK v5 has been released. This significant effort contains
+various features and enhancements accumulated since the last major release and required changes in our APIs.
+Within this post, we will go through all the main changes and help you upgrade to this new version, and provide
+a rationale behind the changes if necessary.
+
+We will omit descriptions of changes that should only require simple code updates; please do contact
+us if you encounter issues anyway.
+
+You can see an introduction and some important changes and rationale behind them from [KubeCon](https://youtu.be/V0NYHt2yjcM?t=1238).
+
+## Various Changes
+
+- From this release, the minimal Java version is 17.
+- Various deprecated APIs are removed. Migration should be easy.
+
+## All Changes
+
+You can see all changes [here](https://github.com/operator-framework/java-operator-sdk/compare/v4.9.7...v5.0.0).
+
+## Changes in low-level APIs
+
+### Server Side Apply (SSA)
+
+[Server Side Apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/) is now a first-class citizen in
+the framework and
+the default approach for patching the status resource. This means that patching a resource or its status through
+`UpdateControl` and adding
+the finalizer in the background will both use SSA.
+
+Migration from a non-SSA based patching to an SSA based one can be problematic. Make sure you test the transition when
+you migrate from older version of the frameworks.
+To continue to use a non-SSA based on,
+set [ConfigurationService.useSSAToPatchPrimaryResource](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L462)
+to `false`.
+
+See some identified problematic migration cases and how to handle them
+in [StatusPatchSSAMigrationIT](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java).
+
+For more detailed description, see our [blog post](../news/nonssa-vs-ssa.md) on SSA.
+
+### Event Sources related changes
+
+#### Multi-cluster support in InformerEventSource
+
+`InformerEventSource` now supports watching remote clusters. You can simply pass a `KubernetesClient` instance
+initialized to connect to a different cluster from the one where the controller runs when configuring your event source.
+See [InformerEventSourceConfiguration.withKubernetesClient](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java)
+
+Such an informer behaves exactly as a regular one. Owner references won't work in this situation, though, so you have to
+specify a `SecondaryToPrimaryMapper` (probably based on labels or annotations).
+
+See related integration
+test [here](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster)
+
+#### SecondaryToPrimaryMapper now checks resource types
+
+The owner reference based mappers are now checking the type (`kind` and `apiVersion`) of the resource when resolving the
+mapping. This is important
+since a resource may have owner references to a different resource type with the same name.
+
+See implementation
+details [here](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java#L74-L75)
+
+#### InformerEventSource-related changes
+
+There are multiple smaller changes to `InformerEventSource` and related classes:
+
+1. `InformerConfiguration` is renamed
+ to [
+ `InformerEventSourceConfiguration`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java)
+2. `InformerEventSourceConfiguration` doesn't require `EventSourceContext` to be initialized anymore.
+
+#### All EventSource are now ResourceEventSources
+
+The [
+`EventSource`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java)
+abstraction is now always aware of the resources and
+handles accessing (the cached) resources, filtering, and additional capabilities. Before v5, such capabilities were
+present only in a sub-class called `ResourceEventSource`,
+but we decided to merge and remove `ResourceEventSource` since this has a nice impact on other parts of the system in
+terms of architecture.
+
+If you still need to create an `EventSource` that only supports triggering of your reconciler,
+see [
+`TimerEventSource`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java)
+for an example of how this can be accomplished.
+
+#### Naming event sources
+
+[
+`EventSource`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java#L45)
+are now named. This reduces the ambiguity that might have existed when trying to refer to an `EventSource`.
+
+### ControllerConfiguration annotation related changes
+
+You no longer have to annotate the reconciler with `@ControllerConfiguration` annotation.
+This annotation is (one) way to override the default properties of a controller.
+If the annotation is not present, the default values from the annotation are used.
+
+PR: https://github.com/operator-framework/java-operator-sdk/pull/2203
+
+In addition to that, the informer-related configurations are now extracted into
+a separate [
+`@Informer`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/Informer.java)
+annotation within [
+`@ControllerConfiguration`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java#L24).
+Hopefully this explicits which part of the configuration affects the informer associated with primary resource.
+Similarly, the same `@Informer` annotation is used when configuring the informer associated with a managed
+`KubernetesDependentResource` via the
+[
+`KubernetesDependent`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java#L33)
+annotation.
+
+### EventSourceInitializer and ErrorStatusHandler are removed
+
+Both the `EventSourceInitializer` and `ErrorStatusHandler` interfaces are removed, and their methods moved directly
+under [
+`Reconciler`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java#L30-L56).
+
+If possible, we try to avoid such marker interfaces since it is hard to deduce related usage just by looking at the
+source code.
+You can now simply override those methods when implementing the `Reconciler` interface.
+
+### Cloning accessing secondary resources
+
+When accessing the secondary resources using [
+`Context.getSecondaryResource(s)(...)`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java#L19-L29),
+the resources are no longer cloned by default, since
+cloning could have an impact on performance. This means that you now need to ensure that these any changes
+are now made directly to the underlying cached resource. This should be avoided since the same resource instance may be
+present for other reconciliation cycles and would
+no longer represent the state on the server.
+
+If you want to still clone resources by default,
+set [
+`ConfigurationService.cloneSecondaryResourcesWhenGettingFromCache`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L484)
+to `true`.
+
+### Removed automated observed generation handling
+
+The automatic observed generation handling feature was removed since it is easy to implement inside the reconciler, but
+it made
+the implementation much more complex, especially if the framework would have to support it both for served side apply
+and client side apply.
+
+You can check a sample implementation how to do it manually in
+this [integration test](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/).
+
+## Dependent Resource related changes
+
+### ResourceDiscriminator is removed and related changes
+
+The primary reason `ResourceDiscriminator` was introduced was to cover the case when there are
+more than one dependent resources of a given type associated with a given primary resource. In this situation, JOSDK
+needed a generic mechanism to
+identify which resources on the cluster should be associated with which dependent resource implementation.
+We improved this association mechanism, thus rendering `ResourceDiscriminator` obsolete.
+
+As a replacement, the dependent resource will select the target resource based on the desired state.
+See the generic implementation in [
+`AbstractDependentResource`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java#L135-L144).
+Calculating the desired state can be costly and might depend on other resources. For `KubernetesDependentResource`
+it is usually enough to provide the name and namespace (if namespace-scoped) of the target resource, which is what the
+`KubernetesDependentResource` implementation does by default. If you can determine which secondary to target without
+computing the desired state via its associated `ResourceID`, then we encourage you to override the
+[
+`ResourceID targetSecondaryResourceID()`](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java#L234-L244)
+method as shown
+in [this example](https://github.com/operator-framework/java-operator-sdk/blob/c7901303c5304e6017d050f05cbb3d4930bdfe44/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorConfigMap1.java#L24-L35)
+
+### Read-only bulk dependent resources
+
+Read-only bulk dependent resources are now supported; this was a request from multiple users, but it required changes to
+the underlying APIs.
+Please check the documentation for further details.
+
+See also the
+related [integration test](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly).
+
+### Multiple Dependents with Activation Condition
+
+Until now, activation conditions had a limitation that only one condition was allowed for a specific resource type.
+For example, two `ConfigMap` dependent resources were not allowed, both with activation conditions. The underlying issue
+was with the informer registration process. When an activation condition is evaluated as "met" in the background,
+the informer is registered dynamically for the target resource type. However, we need to avoid registering multiple
+informers of the same kind. To prevent this the dependent resource must specify
+the [name of the informer](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource2.java#L12).
+
+See the complete
+example [here](https://github.com/operator-framework/java-operator-sdk/blob/1635c9ea338f8e89bacc547808d2b409de8734cf/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation).
+
+### `getSecondaryResource` is Activation condition aware
+
+When an activation condition for a resource type is not met, no associated informer might be registered for that
+resource type. However, in this situation, calling `Context.getSecondaryResource`
+and its alternatives would previously throw an exception. This was, however, rather confusing and a better user
+experience would be to return an empty value instead of throwing an error. We changed this behavior in v5 to make it
+more user-friendly and attempting to retrieve a secondary resource that is gated by an activation condition will now
+return an empty value as if the associated informer existed.
+
+See related [issue](https://github.com/operator-framework/java-operator-sdk/issues/2198) for details.
+
+## Workflow related changes
+
+### `@Workflow` annotation
+
+The managed workflow definition is now a separate `@Workflow` annotation; it is no longer part of
+`@ControllerConfiguration`.
+
+See sample
+usage [here](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java#L14-L20)
+
+### Explicit workflow invocation
+
+Before v5, the managed dependents part of a workflow would always be reconciled before the primary `Reconciler`
+`reconcile` or `cleanup` methods were called. It is now possible to explictly ask for a workflow reconciliation in your
+primary `Reconciler`, thus allowing you to control when the workflow is reconciled. This mean you can perform all kind
+of operations - typically validations - before executing the workflow, as shown in the sample below:
+
+```java
+
+@Workflow(explicitInvocation = true,
+ dependents = @Dependent(type = ConfigMapDependent.class))
+@ControllerConfiguration
+public class WorkflowExplicitCleanupReconciler
+ implements Reconciler,
+ Cleaner {
+
+ @Override
+ public UpdateControl reconcile(
+ WorkflowExplicitCleanupCustomResource resource,
+ Context context) {
+
+ context.managedWorkflowAndDependentResourceContext().reconcileManagedWorkflow();
+
+ return UpdateControl.noUpdate();
+ }
+
+ @Override
+ public DeleteControl cleanup(WorkflowExplicitCleanupCustomResource resource,
+ Context context) {
+
+ context.managedWorkflowAndDependentResourceContext().cleanupManageWorkflow();
+ // this can be checked
+ // context.managedWorkflowAndDependentResourceContext().getWorkflowCleanupResult()
+ return DeleteControl.defaultDelete();
+ }
+}
+```
+
+To turn on this mode of execution, set [
+`explicitInvocation`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Workflow.java#L26)
+flag to `true` in the managed workflow definition.
+
+See the following integration tests
+for [
+`invocation`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation)
+and [
+`cleanup`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup).
+
+### Explicit exception handling
+
+If an exception happens during a workflow reconciliation, the framework automatically throws it further.
+You can now set [
+`handleExceptionsInReconciler`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Workflow.java#L40)
+to true for a workflow and check the thrown exceptions explicitly
+in the execution results.
+
+```java
+
+@Workflow(handleExceptionsInReconciler = true,
+ dependents = @Dependent(type = ConfigMapDependent.class))
+@ControllerConfiguration
+public class HandleWorkflowExceptionsInReconcilerReconciler
+ implements Reconciler,
+ Cleaner {
+
+ private volatile boolean errorsFoundInReconcilerResult = false;
+ private volatile boolean errorsFoundInCleanupResult = false;
+
+ @Override
+ public UpdateControl reconcile(
+ HandleWorkflowExceptionsInReconcilerCustomResource resource,
+ Context context) {
+
+ errorsFoundInReconcilerResult = context.managedWorkflowAndDependentResourceContext()
+ .getWorkflowReconcileResult().erroredDependentsExist();
+
+ // check errors here:
+ Map errors = context.getErroredDependents();
+
+ return UpdateControl.noUpdate();
+ }
+}
+```
+
+See integration
+test [here](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling).
+
+### CRDPresentActivationCondition
+
+Activation conditions are typically used to check if the cluster has specific capabilities (e.g., is cert-manager
+available).
+Such a check can be done by verifying if a particular custom resource definition (CRD) is present on the cluster. You
+can now use the generic [
+`CRDPresentActivationCondition`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java)
+for this
+purpose, it will check if the CRD of a target resource type of a dependent resource exists on the cluster.
+
+See usage in integration
+test [here](https://github.com/operator-framework/java-operator-sdk/blob/refs/heads/next/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation).
+
+## Fabric8 client updated to 7.0
+
+The Fabric8 client has been updated to version 7.0.0. This is a new major version which implies that some API might have
+changed. Please take a look at the [Fabric8 client 7.0.0 migration guide](https://github.com/fabric8io/kubernetes-client/blob/main/doc/MIGRATION-v7.md).
+
+### CRD generator changes
+
+Starting with v5.0 (in accordance with changes made to the Fabric8 client in version 7.0.0), the CRD generator will use the maven plugin instead of the annotation processor as was previously the case.
+In many instances, you can simply configure the plugin by adding the following stanza to your project's POM build configuration:
+
+```xml
+
+ io.fabric8
+ crd-generator-maven-plugin
+ ${fabric8-client.version}
+
+
+
+ generate
+
+
+
+
+
+```
+*NOTE*: If you use the SDK's JUnit extension for your tests, you might also need to configure the CRD generator plugin to access your test `CustomResource` implementations as follows:
+```xml
+
+
+ io.fabric8
+ crd-generator-maven-plugin
+ ${fabric8-client.version}
+
+
+
+ generate
+
+ process-test-classes
+
+ ${project.build.testOutputDirectory}
+ WITH_ALL_DEPENDENCIES_AND_TESTS
+
+
+
+
+
+```
+
+Please refer to the [CRD generator documentation](https://github.com/fabric8io/kubernetes-client/blob/main/doc/CRD-generator.md) for more details.
+
+
+## Experimental
+
+### Check if the following reconciliation is imminent
+
+You can now check if the subsequent reconciliation will happen right after the current one because the SDK has already
+received an event that will trigger a new reconciliation
+This information is available from
+the [
+`Context`](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java#L69).
+
+Note that this could be useful, for example, in situations when a heavy task would be repeated in the follow-up
+reconciliation. In the current
+reconciliation, you can check this flag and return to avoid unneeded processing. Note that this is a semi-experimental
+feature, so please let us know
+if you found this helpful.
+
+```java
+
+@Override
+public UpdateControl reconcile(MyCustomResource resource, Context context) {
+
+ if (context.isNextReconciliationImminent()) {
+ // your logic, maybe return?
+ }
+}
+```
+
+See
+related [integration test](https://github.com/operator-framework/java-operator-sdk/blob/664cb7109fe62f9822997d578ae7f57f17ef8c26/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent).
\ No newline at end of file
diff --git a/docs/content/en/community/_index.md b/docs/content/en/community/_index.md
new file mode 100644
index 0000000000..fa42c2d974
--- /dev/null
+++ b/docs/content/en/community/_index.md
@@ -0,0 +1,6 @@
+---
+title: Community
+menu: {main: {weight: 3}}
+---
+
+
diff --git a/docs/content/en/docs/_index.md b/docs/content/en/docs/_index.md
new file mode 100755
index 0000000000..5c7b74ab4b
--- /dev/null
+++ b/docs/content/en/docs/_index.md
@@ -0,0 +1,6 @@
+---
+title: Documentation
+linkTitle: Docs
+menu: {main: {weight: 1}}
+weight: 1
+---
diff --git a/docs/content/en/docs/contributing/_index.md b/docs/content/en/docs/contributing/_index.md
new file mode 100644
index 0000000000..0ab40d55b1
--- /dev/null
+++ b/docs/content/en/docs/contributing/_index.md
@@ -0,0 +1,68 @@
+---
+title: Contributing
+weight: 110
+---
+
+Thank you for considering contributing to the Java Operator SDK project! We're building a vibrant community and need help from people like you to make it happen.
+
+## Code of Conduct
+
+We're committed to making this a welcoming, inclusive project. We do not tolerate discrimination, aggressive or insulting behavior.
+
+This project and all participants are bound by our [Code of Conduct]({{baseurl}}/coc). By participating, you're expected to uphold this code. Please report unacceptable behavior to any project admin.
+
+## Reporting Bugs
+
+Found a bug? Please [open an issue](https://github.com/java-operator-sdk/java-operator-sdk/issues)! Include all details needed to recreate the problem:
+
+- Operator SDK version being used
+- Exact platform and version you're running on
+- Steps to reproduce the bug
+- Reproducer code (very helpful for quick diagnosis and fixes)
+
+## Contributing Features and Documentation
+
+Looking for something to work on? Check the issue tracker, especially items labeled [good first issue](https://github.com/java-operator-sdk/java-operator-sdk/labels/good%20first%20issue). Please comment on the issue when you start work to avoid duplicated effort.
+
+### Feature Ideas
+
+Have a feature idea? Open an issue labeled "enhancement" even if you can't work on it immediately. We'll discuss it as a community and see what's possible.
+
+**Important**: Some features may not align with project goals. Please discuss new features before starting work to avoid wasted effort. We commit to listening to all proposals and working something out when possible.
+
+### Development Process
+
+Once you have approval to work on a feature:
+1. Communicate progress via issue updates or our [Discord channel](https://discord.gg/DacEhAy)
+2. Ask for feedback and pointers as needed
+3. Open a Pull Request when ready
+
+## Pull Request Process
+
+### Commit Messages
+Format commit messages following [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) format.
+
+### Testing and Review
+- GitHub Actions will run the test suite on your PR
+- All code must pass tests
+- New code must include new tests
+- All PRs require review and sign-off from another developer
+- Expect requests for changes - this is normal and part of the process
+- PRs must comply with Java Google code style
+
+### Licensing
+All Operator SDK code is released under the [Apache 2.0 licence](LICENSE).
+
+## Development Environment Setup
+
+### Code Style
+
+SDK modules and samples follow Java Google code style. Code gets formatted automatically on every `compile`, but to avoid PR rejections due to style issues, set up your IDE:
+
+**IntelliJ IDEA**: Install the [google-java-format](https://plugins.jetbrains.com/plugin/8527-google-java-format) plugin
+
+**Eclipse**: Follow [these instructions](https://github.com/google/google-java-format?tab=readme-ov-file#eclipse)
+
+## Acknowledgments
+
+These guidelines were inspired by [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md), [PurpleBooth's advice](https://gist.github.com/PurpleBooth/b24679402957c63ec426), and the [Contributor Covenant](https://www.contributor-covenant.org/).
diff --git a/docs/content/en/docs/documentation/_index.md b/docs/content/en/docs/documentation/_index.md
new file mode 100644
index 0000000000..59373c6974
--- /dev/null
+++ b/docs/content/en/docs/documentation/_index.md
@@ -0,0 +1,25 @@
+---
+title: Documentation
+weight: 40
+---
+
+# JOSDK Documentation
+
+This section contains detailed documentation for all Java Operator SDK features and concepts. Whether you're building your first operator or need advanced configuration options, you'll find comprehensive guides here.
+
+## Core Concepts
+
+- **[Implementing a Reconciler](reconciler/)** - The heart of any operator
+- **[Architecture](architecture/)** - How JOSDK works under the hood
+- **[Dependent Resources & Workflows](dependent-resource-and-workflows/)** - Managing resource relationships
+- **[Configuration](configuration/)** - Customizing operator behavior
+- **[Error Handling & Retries](error-handling-retries/)** - Managing failures gracefully
+
+## Advanced Features
+
+- **[Eventing](eventing/)** - Understanding the event-driven model
+- **[Accessing Resources in Caches](working-with-es-caches/) - How to access resources in caches
+- **[Observability](observability/)** - Monitoring and debugging your operators
+- **[Other Features](features/)** - Additional capabilities and integrations
+
+Each guide includes practical examples and best practices to help you build robust, production-ready operators.
diff --git a/docs/content/en/docs/documentation/architecture.md b/docs/content/en/docs/documentation/architecture.md
new file mode 100644
index 0000000000..4108849c04
--- /dev/null
+++ b/docs/content/en/docs/documentation/architecture.md
@@ -0,0 +1,36 @@
+---
+title: Architecture and Internals
+weight: 85
+---
+
+This document provides an overview of the Java Operator SDK's internal structure and components to help developers understand and contribute to the project. While not a comprehensive reference, it introduces core concepts that should make other components easier to understand.
+
+## The Big Picture and Core Components
+
+
+
+An [Operator](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java) is a set of independent [controllers](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java).
+
+The `Controller` class is an internal class managed by the framework and typically shouldn't be interacted with directly. It manages all processing units involved with reconciling a single type of Kubernetes resource.
+
+### Core Components
+
+- **[Reconciler](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java)** - The primary entry point for developers to implement reconciliation logic
+- **[EventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java)** - Represents a source of events that might trigger reconciliation
+- **[EventSourceManager](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java)** - Aggregates all event sources for a controller and manages their lifecycle
+- **[ControllerResourceEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java)** - Central event source that watches primary resources associated with a given controller for changes, propagates events and caches state
+- **[EventProcessor](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java)** - Processes incoming events sequentially per resource while allowing concurrent overall processing. Handles rescheduling and retrying
+- **[ReconcilerDispatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java)** - Dispatches requests to appropriate `Reconciler` methods and handles reconciliation results, making necessary Kubernetes API calls
+
+## Typical Workflow
+
+A typical workflow follows these steps:
+
+1. **Event Generation**: An `EventSource` produces an event and propagates it to the `EventProcessor`
+2. **Resource Reading**: The resource associated with the event is read from the internal cache
+3. **Reconciliation Submission**: If the resource isn't already being processed, a reconciliation request is submitted to the executor service in a different thread (encapsulated in a `ControllerExecution` instance)
+4. **Dispatching**: The `ReconcilerDispatcher` is called, which dispatches the call to the appropriate `Reconciler` method with all required information
+5. **Reconciler Execution**: Once the `Reconciler` completes, the `ReconcilerDispatcher` makes appropriate Kubernetes API server calls based on the returned result
+6. **Finalization**: The `EventProcessor` is called back to finalize execution and update the controller's state
+7. **Rescheduling Check**: The `EventProcessor` checks if the request needs rescheduling or retrying, and whether subsequent events were received for the same resource
+8. **Completion**: When no further action is needed, event processing is finished
diff --git a/docs/content/en/docs/documentation/configuration.md b/docs/content/en/docs/documentation/configuration.md
new file mode 100644
index 0000000000..888804628f
--- /dev/null
+++ b/docs/content/en/docs/documentation/configuration.md
@@ -0,0 +1,154 @@
+---
+title: Configurations
+weight: 55
+---
+
+The Java Operator SDK (JOSDK) provides abstractions that work great out of the box. However, we recognize that default behavior isn't always suitable for every use case. Numerous configuration options help you tailor the framework to your specific needs.
+
+Configuration options operate at several levels:
+- **Operator-level** using `ConfigurationService`
+- **Reconciler-level** using `ControllerConfiguration`
+- **DependentResource-level** using the `DependentResourceConfigurator` interface
+- **EventSource-level** where some event sources (like `InformerEventSource`) need fine-tuning to identify which events trigger the associated reconciler
+
+## Operator-Level Configuration
+
+Configuration that impacts the entire operator is performed via the `ConfigurationService` class. `ConfigurationService` is an abstract class with different implementations based on which framework flavor you use (e.g., Quarkus Operator SDK replaces the default implementation). Configurations initialize with sensible defaults but can be changed during initialization.
+
+For example, to disable CRD validation on startup and configure leader election:
+
+```java
+Operator operator = new Operator( override -> override
+ .checkingCRDAndValidateLocalModel(false)
+ .withLeaderElectionConfiguration(new LeaderElectionConfiguration("bar", "barNS")));
+```
+
+## Reconciler-Level Configuration
+
+While reconcilers are typically configured using the `@ControllerConfiguration` annotation, you can also override configuration at runtime when registering the reconciler with the operator. You can either:
+- Pass a completely new `ControllerConfiguration` instance
+- Override specific aspects using a `ControllerConfigurationOverrider` `Consumer` (preferred)
+
+```java
+Operator operator;
+Reconciler reconciler;
+...
+operator.register(reconciler, configOverrider ->
+ configOverrider.withFinalizer("my-nifty-operator/finalizer").withLabelSelector("foo=bar"));
+```
+
+## Dynamically Changing Target Namespaces
+
+A controller can be configured to watch a specific set of namespaces in addition of the
+namespace in which it is currently deployed or the whole cluster. The framework supports
+dynamically changing the list of these namespaces while the operator is running.
+When a reconciler is registered, an instance of
+[`RegisteredController`](https://github.com/java-operator-sdk/java-operator-sdk/blob/ec37025a15046d8f409c77616110024bf32c3416/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RegisteredController.java#L5)
+is returned, providing access to the methods allowing users to change watched namespaces as the
+operator is running.
+
+A typical scenario would probably involve extracting the list of target namespaces from a
+`ConfigMap` or some other input but this part is out of the scope of the framework since this is
+use-case specific. For example, reacting to changes to a `ConfigMap` would probably involve
+registering an associated `Informer` and then calling the `changeNamespaces` method on
+`RegisteredController`.
+
+```java
+
+public static void main(String[] args) {
+ KubernetesClient client = new DefaultKubernetesClient();
+ Operator operator = new Operator(client);
+ RegisteredController registeredController = operator.register(new WebPageReconciler(client));
+ operator.installShutdownHook();
+ operator.start();
+
+ // call registeredController further while operator is running
+}
+
+```
+
+If watched namespaces change for a controller, it might be desirable to propagate these changes to
+`InformerEventSources` associated with the controller. In order to express this,
+`InformerEventSource` implementations interested in following such changes need to be
+configured appropriately so that the `followControllerNamespaceChanges` method returns `true`:
+
+```java
+
+@ControllerConfiguration
+public class MyReconciler implements Reconciler {
+
+ @Override
+ public Map prepareEventSources(
+ EventSourceContext context) {
+
+ InformerEventSource configMapES =
+ new InformerEventSource<>(InformerEventSourceConfiguration.from(ConfigMap.class, TestCustomResource.class)
+ .withNamespacesInheritedFromController(context)
+ .build(), context);
+
+ return EventSourceUtils.nameEventSources(configMapES);
+ }
+
+}
+```
+
+As seen in the above code snippet, the informer will have the initial namespaces inherited from
+controller, but also will adjust the target namespaces if it changes for the controller.
+
+See also
+the [integration test](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace)
+for this feature.
+
+## DependentResource-level configuration
+
+It is possible to define custom annotations to configure custom `DependentResource` implementations. In order to provide
+such a configuration mechanism for your own `DependentResource` implementations, they must be annotated with the
+`@Configured` annotation. This annotation defines 3 fields that tie everything together:
+
+- `by`, which specifies which annotation class will be used to configure your dependents,
+- `with`, which specifies the class holding the configuration object for your dependents and
+- `converter`, which specifies the `ConfigurationConverter` implementation in charge of converting the annotation
+ specified by the `by` field into objects of the class specified by the `with` field.
+
+`ConfigurationConverter` instances implement a single `configFrom` method, which will receive, as expected, the
+annotation instance annotating the dependent resource instance to be configured, but it can also extract information
+from the `DependentResourceSpec` instance associated with the `DependentResource` class so that metadata from it can be
+used in the configuration, as well as the parent `ControllerConfiguration`, if needed. The role of
+`ConfigurationConverter` implementations is to extract the annotation information, augment it with metadata from the
+`DependentResourceSpec` and the configuration from the parent controller on which the dependent is defined, to finally
+create the configuration object that the `DependentResource` instances will use.
+
+However, one last element is required to finish the configuration process: the target `DependentResource` class must
+implement the `ConfiguredDependentResource` interface, parameterized with the annotation class defined by the
+`@Configured` annotation `by` field. This interface is called by the framework to inject the configuration at the
+appropriate time and retrieve the configuration, if it's available.
+
+For example, `KubernetesDependentResource`, a core implementation that the framework provides, can be configured via the
+`@KubernetesDependent` annotation. This set up is configured as follows:
+
+```java
+
+@Configured(
+ by = KubernetesDependent.class,
+ with = KubernetesDependentResourceConfig.class,
+ converter = KubernetesDependentConverter.class)
+public abstract class KubernetesDependentResource
+ extends AbstractEventSourceHolderDependentResource>
+ implements ConfiguredDependentResource> {
+ // code omitted
+}
+```
+
+The `@Configured` annotation specifies that `KubernetesDependentResource` instances can be configured by using the
+`@KubernetesDependent` annotation, which gets converted into a `KubernetesDependentResourceConfig` object by a
+`KubernetesDependentConverter`. That configuration object is then injected by the framework in the
+`KubernetesDependentResource` instance, after it's been created, because the class implements the
+`ConfiguredDependentResource` interface, properly parameterized.
+
+For more information on how to use this feature, we recommend looking at how this mechanism is implemented for
+`KubernetesDependentResource` in the core framework, `SchemaDependentResource` in the samples or `CustomAnnotationDep`
+in the `BaseConfigurationServiceTest` test class.
+
+## EventSource-level configuration
+
+TODO
diff --git a/docs/content/en/docs/documentation/dependent-resource-and-workflows/_index.md b/docs/content/en/docs/documentation/dependent-resource-and-workflows/_index.md
new file mode 100644
index 0000000000..9446f7ceca
--- /dev/null
+++ b/docs/content/en/docs/documentation/dependent-resource-and-workflows/_index.md
@@ -0,0 +1,9 @@
+---
+title: Dependent resources and workflows
+weight: 70
+---
+
+Dependent resources and workflows are features sometimes referenced as higher
+level abstractions. These two related concepts provides an abstraction
+over reconciliation of a single resource (Dependent resource) and the
+orchestration of such resources (Workflows).
\ No newline at end of file
diff --git a/docs/content/en/docs/documentation/dependent-resource-and-workflows/dependent-resources.md b/docs/content/en/docs/documentation/dependent-resource-and-workflows/dependent-resources.md
new file mode 100644
index 0000000000..7416949869
--- /dev/null
+++ b/docs/content/en/docs/documentation/dependent-resource-and-workflows/dependent-resources.md
@@ -0,0 +1,465 @@
+---
+title: Dependent resources
+weight: 75
+---
+
+## Motivations and Goals
+
+Most operators need to deal with secondary resources when trying to realize the desired state
+described by the primary resource they are in charge of. For example, the Kubernetes-native
+`Deployment` controller needs to manage `ReplicaSet` instances as part of a `Deployment`'s
+reconciliation process. In this instance, `ReplicatSet` is considered a secondary resource for
+the `Deployment` controller.
+
+Controllers that deal with secondary resources typically need to perform the following steps, for
+each secondary resource:
+
+```mermaid
+flowchart TD
+
+compute[Compute desired secondary resource based on primary state] --> A
+A{Secondary resource exists?}
+A -- Yes --> match
+A -- No --> Create --> Done
+
+match{Matches desired state?}
+match -- Yes --> Done
+match -- No --> Update --> Done
+```
+
+While these steps are not difficult in and of themselves, there are some subtleties that can lead to
+bugs or sub-optimal code if not done right. As this process is pretty much similar for each
+dependent resource, it makes sense for the SDK to offer some level of support to remove the
+boilerplate code associated with encoding these repetitive actions. It should
+be possible to handle common cases (such as dealing with Kubernetes-native secondary resources) in a
+semi-declarative way with only a minimal amount of code, JOSDK taking care of wiring everything
+accordingly.
+
+Moreover, in order for your reconciler to get informed of events on these secondary resources, you
+need to configure and create event sources and maintain them. JOSDK already makes it rather easy
+to deal with these, but dependent resources makes it even simpler.
+
+Finally, there are also opportunities for the SDK to transparently add features that are even
+trickier to get right, such as immediate caching of updated or created resources (so that your
+reconciler doesn't need to wait for a cluster roundtrip to continue its work) and associated
+event filtering (so that something your reconciler just changed doesn't re-trigger a
+reconciliation, for example).
+
+## Design
+
+### `DependentResource` vs. `AbstractDependentResource`
+
+The new
+[`DependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java)
+interface lies at the core of the design and strives to encapsulate the logic that is required
+to reconcile the state of the associated secondary resource based on the state of the primary
+one. For most cases, this logic will follow the flow expressed above and JOSDK provides a very
+convenient implementation of this logic in the form of the
+[`AbstractDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java)
+class. If your logic doesn't fit this pattern, though, you can still provide your
+own `reconcile` method implementation. While the benefits of using dependent resources are less
+obvious in that case, this allows you to separate the logic necessary to deal with each
+secondary resource in its own class that can then be tested in isolation via unit tests. You can
+also use the declarative support with your own implementations as we shall see later on.
+
+`AbstractDependentResource` is designed so that classes extending it specify which functionality
+they support by implementing trait interfaces. This design has been selected to express the fact
+that not all secondary resources are completely under the control of the primary reconciler:
+some dependent resources are only ever created or updated for example and we needed a way to let
+JOSDK know when that is the case. We therefore provide trait interfaces: `Creator`,
+`Updater` and `Deleter` to express that the `DependentResource` implementation will provide custom
+functionality to create, update and delete its associated secondary resources, respectively. If
+these traits are not implemented then parts of the logic described above is never triggered: if
+your implementation doesn't implement `Creator`, for example, `AbstractDependentResource` will
+never try to create the associated secondary resource, even if it doesn't exist. It is even
+possible to not implement any of these traits and therefore create read-only dependent resources
+that will trigger your reconciler whenever a user interacts with them but that are never
+modified by your reconciler itself - however note that read-only dependent resources rarely make
+sense, as it is usually simpler to register an event source for the target resource.
+
+All subclasses
+of [`AbstractDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java)
+can also implement
+the [`Matcher`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/Matcher.java)
+interface to customize how the SDK decides whether or not the actual state of the dependent
+matches the desired state. This makes it convenient to use these abstract base classes for your
+implementation, only customizing the matching logic. Note that in many cases, there is no need
+to customize that logic as the SDK already provides convenient default implementations in the
+form
+of [`DesiredEqualsMatcher`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DesiredEqualsMatcher.java)
+and
+[`GenericKubernetesResourceMatcher`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java)
+implementations, respectively. If you want to provide custom logic, you only need your
+`DependentResource` implementation to implement the `Matcher` interface as below, which shows
+how to customize the default matching logic for Kubernetes resources to also consider annotations
+and labels, which are ignored by default:
+
+```java
+public class MyDependentResource extends KubernetesDependentResource
+ implements Matcher {
+ // your implementation
+
+ public Result match(MyDependent actualResource, MyPrimary primary,
+ Context context) {
+ return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, true);
+ }
+}
+```
+
+### Batteries included: convenient DependentResource implementations!
+
+JOSDK also offers several other convenient implementations building on top of
+`AbstractDependentResource` that you can use as starting points for your own implementations.
+
+One such implementation is the `KubernetesDependentResource` class that makes it really easy to work
+with Kubernetes-native resources. In this case, you usually only need to provide an implementation
+for the `desired` method to tell JOSDK what the desired state of your secondary resource should
+be based on the specified primary resource state.
+
+JOSDK takes care of everything else using default implementations that you can override in case you
+need more precise control of what's going on.
+
+We also provide implementations that make it easy to cache
+(`AbstractExternalDependentResource`) or poll for changes in external resources
+(`PollingDependentResource`, `PerResourcePollingDependentResource`). All the provided
+implementations can be found in the `io/javaoperatorsdk/operator/processing/dependent` package of
+the `operator-framework-core` module.
+
+### Sample Kubernetes Dependent Resource
+
+A typical use case, when a Kubernetes resource is fully managed - Created, Read, Updated and
+Deleted (or set to be garbage collected). The following example shows how to create a
+`Deployment` dependent resource:
+
+```java
+
+@KubernetesDependent(informer = @Informer(labelSelector = SELECTOR))
+class DeploymentDependentResource extends CRUDKubernetesDependentResource {
+
+ @Override
+ protected Deployment desired(WebPage webPage, Context context) {
+ var deploymentName = deploymentName(webPage);
+ Deployment deployment = loadYaml(Deployment.class, getClass(), "deployment.yaml");
+ deployment.getMetadata().setName(deploymentName);
+ deployment.getMetadata().setNamespace(webPage.getMetadata().getNamespace());
+ deployment.getSpec().getSelector().getMatchLabels().put("app", deploymentName);
+
+ deployment.getSpec().getTemplate().getMetadata().getLabels()
+ .put("app", deploymentName);
+ deployment.getSpec().getTemplate().getSpec().getVolumes().get(0)
+ .setConfigMap(new ConfigMapVolumeSourceBuilder().withName(configMapName(webPage)).build());
+ return deployment;
+ }
+}
+```
+
+The only thing that you need to do is to extend the `CRUDKubernetesDependentResource` and
+specify the desired state for your secondary resources based on the state of the primary one. In
+the example above, we're handling the state of a `Deployment` secondary resource associated with
+a `WebPage` custom (primary) resource.
+
+The `@KubernetesDependent` annotation can be used to further configure **managed** dependent
+resource that are extending `KubernetesDependentResource`.
+
+See the full source
+code [here](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/DeploymentDependentResource.java)
+.
+
+## Managed Dependent Resources
+
+As mentioned previously, one goal of this implementation is to make it possible to declaratively
+create and wire dependent resources. You can annotate your reconciler with `@Dependent`
+annotations that specify which `DependentResource` implementation it depends upon.
+JOSDK will take the appropriate steps to wire everything together and call your
+`DependentResource` implementations `reconcile` method before your primary resource is reconciled.
+This makes sense in most use cases where the logic associated with the primary resource is
+usually limited to status handling based on the state of the secondary resources and the
+resources are not dependent on each other. As an alternative, you can also invoke reconciliation explicitly,
+event for managed workflows.
+
+See [Workflows](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/workflows/) for more details on how the dependent
+resources are reconciled.
+
+This behavior and automated handling is referred to as "managed" because the `DependentResource`
+instances are managed by JOSDK, an example of which can be seen below:
+
+```java
+
+@Workflow(
+ dependents = {
+ @Dependent(type = ConfigMapDependentResource.class),
+ @Dependent(type = DeploymentDependentResource.class),
+ @Dependent(type = ServiceDependentResource.class),
+ @Dependent(
+ type = IngressDependentResource.class,
+ reconcilePrecondition = ExposedIngressCondition.class)
+ })
+public class WebPageManagedDependentsReconciler
+ implements Reconciler, ErrorStatusHandler {
+
+ // omitted code
+
+ @Override
+ public UpdateControl reconcile(WebPage webPage, Context context) {
+
+ final var name = context.getSecondaryResource(ConfigMap.class).orElseThrow()
+ .getMetadata().getName();
+ webPage.setStatus(createStatus(name));
+ return UpdateControl.patchStatus(webPage);
+ }
+}
+```
+
+See the full source code of
+sample [here](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java)
+.
+
+## Standalone Dependent Resources
+
+It is also possible to wire dependent resources programmatically. In practice this means that the
+developer is responsible for initializing and managing the dependent resources as well as calling
+their `reconcile` method. However, this makes it possible for developers to fully customize the
+reconciliation process. Standalone dependent resources should be used in cases when the managed use
+case does not fit. You can, of course, also use [Workflows](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/workflows/) when managing
+resources programmatically.
+
+You can see a commented example of how to do
+so [here](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java).
+
+## Creating/Updating Kubernetes Resources
+
+From version 4.4 of the framework the resources are created and updated
+using [Server Side Apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/)
+, thus the desired state is simply sent using this approach to update the actual resource.
+
+## Comparing desired and actual state (matching)
+
+During the reconciliation of a dependent resource, the desired state is matched with the actual
+state from the caches. The dependent resource only gets updated on the server if the actual,
+observed state differs from the desired one. Comparing these two states is a complex problem
+when dealing with Kubernetes resources because a strict equality check is usually not what is
+wanted due to the fact that multiple fields might be automatically updated or added by
+the platform (
+by [dynamic admission controllers](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/)
+or validation webhooks, for example). Solving this problem in a generic way is therefore a tricky
+proposition.
+
+JOSDK provides such a generic matching implementation which is used by default:
+[SSABasedGenericKubernetesResourceMatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java)
+This implementation relies on the managed fields used by the Server Side Apply feature to
+compare only the values of the fields that the controller manages. This ensures that only
+semantically relevant fields are compared. See javadoc for further details.
+
+JOSDK versions prior to 4.4 were using a different matching algorithm as implemented in
+[GenericKubernetesResourceMatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/e16559fd41bbb8bef6ce9d1f47bffa212a941b09/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java).
+
+Since SSA is a complex feature, JOSDK implements a feature flag allowing users to switch between
+these implementations. See
+in [ConfigurationService](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L332-L358).
+
+It is, however, important to note that these implementations are default, generic
+implementations that the framework can provide expected behavior out of the box. In many
+situations, these will work just fine but it is also possible to provide matching algorithms
+optimized for specific use cases. This is easily done by simply overriding
+the `match(...)` [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/e16559fd41bbb8bef6ce9d1f47bffa212a941b09/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java#L156-L156).
+
+It is also possible to bypass the matching logic altogether to simply rely on the server-side
+apply mechanism if always sending potentially unchanged resources to the cluster is not an issue.
+JOSDK's matching mechanism allows to spare some potentially useless calls to the Kubernetes API
+server. To bypass the matching feature completely, simply override the `match` method to always
+return `false`, thus telling JOSDK that the actual state never matches the desired one, making
+it always update the resources using SSA.
+
+WARNING: Older versions of Kubernetes before 1.25 would create an additional resource version for every SSA update
+performed with certain resources - even though there were no actual changes in the stored resource - leading to infinite
+reconciliations. This behavior was seen with Secrets using `stringData`, Ingresses using empty string fields, and
+StatefulSets using volume claim templates. The operator framework has added built-in handling for the StatefulSet issue.
+If you encounter this issue on an older Kubernetes version, consider changing your desired state, turning off SSA for
+that resource, or even upgrading your Kubernetes version. If you encounter it on a newer Kubernetes version, please log
+an issue with the JOSDK and with upstream Kubernetes.
+
+## Telling JOSDK how to find which secondary resources are associated with a given primary resource
+
+[`KubernetesDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java)
+automatically maps secondary resource to a primary by owner reference. This behavior can be
+customized by implementing
+[`SecondaryToPrimaryMapper`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/SecondaryToPrimaryMapper.java)
+by the dependent resource.
+
+See sample in one of the integration
+tests [here](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primaryindexer)
+.
+
+## Multiple Dependent Resources of Same Type
+
+When dealing with multiple dependent resources of same type, the dependent resource implementation
+needs to know which specific resource should be targeted when reconciling a given dependent
+resource, since there could be multiple instances of that type which could possibly be used, each
+associated with the same primary resource. In this situation, JOSDK automatically selects the appropriate secondary
+resource matching the desired state associated with the primary resource. This makes sense because the desired
+state computation already needs to be able to discriminate among multiple related secondary resources to tell JOSDK how
+they should be reconciled.
+
+There might be cases, though, where it might be problematic to call the `desired` method several times (for example, because it is costly to do so),
+it is always possible to override this automated discrimination using several means (consider in this priority order):
+
+- Override the `targetSecondaryResourceID` method, if your `DependentResource` extends `KubernetesDependentResource`,
+ where it's very often possible to easily determine the `ResourceID` of the secondary resource. This would probably be
+ the easiest solution if you're working with Kubernetes resources.
+- Override the `selectTargetSecondaryResource` method, if your `DependentResource` extends `AbstractDependentResource`.
+ This should be relatively simple to override this method to optimize the matching to your needs. You can see an
+ example of such an implementation in
+ the [`ExternalWithStateDependentResource`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalWithStateDependentResource.java)
+ class.
+- As last resort, you can implement your own `getSecondaryResource` method on your `DependentResource` implementation from scratch.
+
+### Sharing an Event Source Between Dependent Resources
+
+Dependent resources usually also provide event sources. When dealing with multiple dependents of
+the same type, one needs to decide whether these dependent resources should track the same
+resources and therefore share a common event source, or, to the contrary, track completely
+separate resources, in which case using separate event sources is advised.
+
+Dependents can therefore reuse existing, named event sources by referring to their name. In the
+declarative case, assuming a `configMapSource` `EventSource` has already been declared, this
+would look as follows:
+
+```
+ @Dependent(type = MultipleManagedDependentResourceConfigMap1.class,
+ useEventSourceWithName = "configMapSource")
+```
+
+A sample is provided as an integration test both:
+for [managed](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator)
+
+For [standalone](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource)
+cases.
+
+## Bulk Dependent Resources
+
+So far, all the cases we've considered were dealing with situations where the number of
+dependent resources needed to reconcile the state expressed by the primary resource is known
+when writing the code for the operator. There are, however, cases where the number of dependent
+resources to be created depends on information found in the primary resource.
+
+These cases are covered by the "bulk" dependent resources feature. To create such dependent
+resources, your implementation should extend `AbstractDependentResource` (at least indirectly) and
+implement the
+[`BulkDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/BulkDependentResource.java)
+interface.
+
+Various examples are provided
+as [integration tests](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent)
+.
+
+To see how bulk dependent resources interact with workflow conditions, please refer to this
+[integration test](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/conidition).
+
+## External State Tracking Dependent Resources
+
+It is sometimes necessary for a controller to track external (i.e. non-Kubernetes) state to
+properly manage some dependent resources. For example, your controller might need to track the
+state of a REST API resource, which, after being created, would be refer to by its identifier.
+Such identifier would need to be tracked by your controller to properly retrieve the state of
+the associated resource and/or assess if such a resource exists. While there are several ways to
+support this use case, we recommend storing such information in a dedicated Kubernetes resources
+(usually a `ConfigMap` or a `Secret`), so that it can be manipulated with common Kubernetes
+mechanisms.
+
+This particular use case is supported by the
+[`AbstractExternalDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java)
+class that you can extend to suit your needs, as well as implement the
+[`DependentResourceWithExplicitState`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java)
+interface. Note that most of the JOSDK-provided dependent resource implementations such as
+`PollingDependentResource` or `PerResourcePollingDependentResource` already extends
+`AbstractExternalDependentResource`, thus supporting external state tracking out of the box.
+
+See [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentIT.java)
+as a sample.
+
+For a better understanding it might be worth to study
+a [sample implementation](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateReconciler.java)
+without dependent resources.
+
+Please also refer to the [docs](/docs/patterns-and-best-practices#managing-state) for managing state in
+general.
+
+## Combining Bulk and External State Tracking Dependent Resources
+
+Both bulk and external state tracking features can be combined. In that
+case, a separate, state-tracking resource will be created for each bulk dependent resource
+created. For example, if three bulk dependent resources associated with external state are created,
+three associated `ConfigMaps` (assuming `ConfigMaps` are used as a state-tracking resource) will
+also be created, one per dependent resource.
+
+See [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent)
+as a sample.
+
+## GenericKubernetesResource based Dependent Resources
+
+In rare circumstances resource handling where there is no class representation or just typeless handling might be
+needed.
+Fabric8 Client
+provides [GenericKubernetesResource](https://github.com/fabric8io/kubernetes-client/blob/main/doc/CHEATSHEET.md#resource-typeless-api)
+to support that.
+
+For dependent resource this is supported
+by [GenericKubernetesDependentResource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java#L8-L8)
+. See
+samples [here](https://github.com/java-operator-sdk/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource).
+
+## Other Dependent Resource Features
+
+### Caching and Event Handling in [KubernetesDependentResource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java)
+
+1. When a Kubernetes resource is created or updated the related informer (more precisely
+ the `InformerEventSource`), eventually will receive an event and will cache the up-to-date
+ resource. Typically, though, there might be a small time window when calling the
+ `getResource()` of the dependent resource or getting the resource from the `EventSource`
+ itself won't return the just updated resource, in the case where the associated event hasn't
+ been received from the Kubernetes API. The `KubernetesDependentResource` implementation,
+ however, addresses this issue, so you don't have to worry about it by making sure that it or
+ the related `InformerEventSource` always return the up-to-date resource.
+
+2. Another feature of `KubernetesDependentResource` is to make sure that if a resource is created or
+ updated during the reconciliation, this particular change, which normally would trigger the
+ reconciliation again (since the resource has changed on the server), will, in fact, not
+ trigger the reconciliation again since we already know the state is as expected. This is a small
+ optimization. For example if during a reconciliation a `ConfigMap` is updated using dependent
+ resources, this won't trigger a new reconciliation. Such a reconciliation is indeed not
+ needed since the change originated from our reconciler. For this system to work properly,
+ though, it is required that changes are received only by one event source (this is a best
+ practice in general) - so for example if there are two config map dependents, either
+ there should be a shared event source between them, or a label selector on the event sources
+ to select only the relevant events, see
+ in [related integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource2.java)
+ .
+
+## "Read-only" Dependent Resources vs. Event Source
+
+See Integration test for a read-only
+dependent [here](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapDependent.java).
+
+Some secondary resources only exist as input for the reconciliation process and are never
+updated *by a controller* (they might, and actually usually do, get updated by users interacting
+with the resources directly, however). This might be the case, for example, of a `ConfigMap`that is
+used to configure common characteristics of multiple resources in one convenient place.
+
+In such situations, one might wonder whether it makes sense to create a dependent resource in
+this case or simply use an `EventSource` so that the primary resource gets reconciled whenever a
+user changes the resource. Typical dependent resources provide a desired state that the
+reconciliation process attempts to match. In the case of so-called read-only dependents, though,
+there is no such desired state because the operator / controller will never update the resource
+itself, just react to external changes to it. An `EventSource` would achieve the same result.
+
+Using a dependent resource for that purpose instead of a simple `EventSource`, however, provides
+several benefits:
+
+- dependents can be created declaratively, while an event source would need to be manually created
+- if dependents are already used in a controller, it makes sense to unify the handling of all
+ secondary resources as dependents from a code organization perspective
+- dependent resources can also interact with the workflow feature, thus allowing the read-only
+ resource to participate in conditions, in particular to decide whether the primary
+ resource needs/can be reconciled using reconcile pre-conditions, block the progression of the workflow altogether with
+ ready post-conditions or have other dependents depend on them, in essence, read-only dependents can participate in
+ workflows just as any other dependents.
diff --git a/docs/content/en/docs/documentation/dependent-resource-and-workflows/workflows.md b/docs/content/en/docs/documentation/dependent-resource-and-workflows/workflows.md
new file mode 100644
index 0000000000..c5ee83a446
--- /dev/null
+++ b/docs/content/en/docs/documentation/dependent-resource-and-workflows/workflows.md
@@ -0,0 +1,403 @@
+---
+title: Workflows
+weight: 80
+---
+
+## Overview
+
+Kubernetes (k8s) does not have the notion of a resource "depending on" on another k8s resource,
+at least not in terms of the order in which these resources should be reconciled. Kubernetes
+operators typically need to reconcile resources in order because these resources' state often
+depends on the state of other resources or cannot be processed until these other resources reach
+a given state or some condition holds true for them. Dealing with such scenarios are therefore
+rather common for operators and the purpose of the workflow feature of the Java Operator SDK
+(JOSDK) is to simplify supporting such cases in a declarative way. Workflows build on top of the
+[dependent resources](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/) feature.
+While dependent resources focus on how a given secondary resource should be reconciled,
+workflows focus on orchestrating how these dependent resources should be reconciled.
+
+Workflows describe how as a set of
+[dependent resources](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/) (DR) depend on one
+another, along with the conditions that need to hold true at certain stages of the
+reconciliation process.
+
+## Elements of Workflow
+
+- **Dependent resource** (DR) - are the resources being managed in a given reconciliation logic.
+- **Depends-on relation** - a `B` DR depends on another `A` DR if `B` needs to be reconciled
+ after `A`.
+- **Reconcile precondition** - is a condition on a given DR that needs to be become true before the
+ DR is reconciled. This also allows to define optional resources that would, for example, only be
+ created if a flag in a custom resource `.spec` has some specific value.
+- **Ready postcondition** - is a condition on a given DR to prevent the workflow from
+ proceeding until the condition checking whether the DR is ready holds true
+- **Delete postcondition** - is a condition on a given DR to check if the reconciliation of
+ dependents can proceed after the DR is supposed to have been deleted
+- **Activation condition** - is a special condition meant to specify under which condition the DR is used in the
+ workflow. A typical use-case for this feature is to only activate some dependents depending on the presence of
+ optional resources / features on the target cluster. Without this activation condition, JOSDK would attempt to
+ register an informer for these optional resources, which would cause an error in the case where the resource is
+ missing. With this activation condition, you can now conditionally register informers depending on whether the
+ condition holds or not. This is a very useful feature when your operator needs to handle different flavors of the
+ platform (e.g. OpenShift vs plain Kubernetes) and/or change its behavior based on the availability of optional
+ resources / features (e.g. CertManager, a specific Ingress controller, etc.).
+
+ A generic activation condition is provided out of the box, called
+ [CRDPresentActivationCondition](https://github.com/operator-framework/java-operator-sdk/blob/ba5e33527bf9e3ea0bd33025ccb35e677f9d44b4/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java)
+ that will prevent the associated dependent resource from being activated if the Custom Resource Definition associated
+ with the dependent's resource type is not present on the cluster.
+ See related [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation).
+
+ To have multiple resources of same type with an activation condition is a bit tricky, since you
+ don't want to have multiple `InformerEventSource` for the same type, you have to explicitly
+ name the informer for the Dependent Resource (`@KubernetesDependent(informerConfig = @InformerConfig(name = "configMapInformer"))`)
+ for all resource of same type with activation condition. This will make sure that only one is registered.
+ See details at [low level api](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java#L20-L52).
+
+### Result conditions
+
+While simple conditions are usually enough, it might happen you want to convey extra information as a result of the
+evaluation of the conditions (e.g., to report error messages or because the result of the condition evaluation might be
+interesting for other purposes). In this situation, you should implement `DetailedCondition` instead of `Condition` and
+provide an implementation of the `detailedIsMet` method, which allows you to return a more detailed `Result` object via
+which you can provide extra information. The `DetailedCondition.Result` interface provides factory method for your
+convenience but you can also provide your own implementation if required.
+
+You can access the results for conditions from the `WorkflowResult` instance that is returned whenever a workflow is
+evaluated. You can access that result from the `ManagedWorkflowAndDependentResourceContext` accessible from the
+reconciliation `Context`. You can then access individual condition results using the `
+getDependentConditionResult` methods. You can see an example of this
+in [this integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureReconciler.java).
+
+## Defining Workflows
+
+Similarly to dependent resources, there are two ways to define workflows, in managed and standalone
+manner.
+
+### Managed
+
+Annotations can be used to declaratively define a workflow for a `Reconciler`. Similarly to how
+things are done for dependent resources, managed workflows execute before the `reconcile` method
+is called. The result of the reconciliation can be accessed via the `Context` object that is
+passed to the `reconcile` method.
+
+The following sample shows a hypothetical use case to showcase all the elements: the primary
+`TestCustomResource` resource handled by our `Reconciler` defines two dependent resources, a
+`Deployment` and a `ConfigMap`. The `ConfigMap` depends on the `Deployment` so will be
+reconciled after it. Moreover, the `Deployment` dependent resource defines a ready
+post-condition, meaning that the `ConfigMap` will not be reconciled until the condition defined
+by the `Deployment` becomes `true`. Additionally, the `ConfigMap` dependent also defines a
+reconcile pre-condition, so it also won't be reconciled until that condition becomes `true`. The
+`ConfigMap` also defines a delete post-condition, which means that the workflow implementation
+will only consider the `ConfigMap` deleted until that post-condition becomes `true`.
+
+```java
+
+@Workflow(dependents = {
+ @Dependent(name = DEPLOYMENT_NAME, type = DeploymentDependentResource.class,
+ readyPostcondition = DeploymentReadyCondition.class),
+ @Dependent(type = ConfigMapDependentResource.class,
+ reconcilePrecondition = ConfigMapReconcileCondition.class,
+ deletePostcondition = ConfigMapDeletePostCondition.class,
+ activationCondition = ConfigMapActivationCondition.class,
+ dependsOn = DEPLOYMENT_NAME)
+})
+@ControllerConfiguration
+public class SampleWorkflowReconciler implements Reconciler,
+ Cleaner {
+
+ public static final String DEPLOYMENT_NAME = "deployment";
+
+ @Override
+ public UpdateControl reconcile(
+ WorkflowAllFeatureCustomResource resource,
+ Context context) {
+
+ resource.getStatus()
+ .setReady(
+ context.managedWorkflowAndDependentResourceContext() // accessing workflow reconciliation results
+ .getWorkflowReconcileResult()
+ .allDependentResourcesReady());
+ return UpdateControl.patchStatus(resource);
+ }
+
+ @Override
+ public DeleteControl cleanup(WorkflowAllFeatureCustomResource resource,
+ Context context) {
+ // emitted code
+
+ return DeleteControl.defaultDelete();
+ }
+}
+
+```
+
+### Standalone
+
+In this mode workflow is built manually
+using [standalone dependent resources](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/#standalone-dependent-resources)
+. The workflow is created using a builder, that is explicitly called in the reconciler (from web
+page sample):
+
+```java
+
+@ControllerConfiguration(
+ labelSelector = WebPageDependentsWorkflowReconciler.DEPENDENT_RESOURCE_LABEL_SELECTOR)
+public class WebPageDependentsWorkflowReconciler
+ implements Reconciler, ErrorStatusHandler {
+
+ public static final String DEPENDENT_RESOURCE_LABEL_SELECTOR = "!low-level";
+ private static final Logger log =
+ LoggerFactory.getLogger(WebPageDependentsWorkflowReconciler.class);
+
+ private KubernetesDependentResource configMapDR;
+ private KubernetesDependentResource deploymentDR;
+ private KubernetesDependentResource serviceDR;
+ private KubernetesDependentResource ingressDR;
+
+ private final Workflow workflow;
+
+ public WebPageDependentsWorkflowReconciler(KubernetesClient kubernetesClient) {
+ initDependentResources(kubernetesClient);
+ workflow = new WorkflowBuilder()
+ .addDependentResource(configMapDR)
+ .addDependentResource(deploymentDR)
+ .addDependentResource(serviceDR)
+ .addDependentResource(ingressDR).withReconcilePrecondition(new ExposedIngressCondition())
+ .build();
+ }
+
+ @Override
+ public Map prepareEventSources(EventSourceContext context) {
+ return EventSourceUtils.nameEventSources(
+ configMapDR.initEventSource(context),
+ deploymentDR.initEventSource(context),
+ serviceDR.initEventSource(context),
+ ingressDR.initEventSource(context));
+ }
+
+ @Override
+ public UpdateControl reconcile(WebPage webPage, Context context) {
+
+ var result = workflow.reconcile(webPage, context);
+
+ webPage.setStatus(createStatus(result));
+ return UpdateControl.patchStatus(webPage);
+ }
+ // omitted code
+}
+
+```
+
+## Workflow Execution
+
+This section describes how a workflow is executed in details, how the ordering is determined and
+how conditions and errors affect the behavior. The workflow execution is divided in two parts
+similarly to how `Reconciler` and `Cleaner` behavior are separated.
+[Cleanup](https://javaoperatorsdk.io/docs/documentation/reconciler/#implementing-a-reconciler-and-cleaner-interfaces) is
+executed if a resource is marked for deletion.
+
+## Common Principles
+
+- **As complete as possible execution** - when a workflow is reconciled, it tries to reconcile as
+ many resources as possible. Thus, if an error happens or a ready condition is not met for a
+ resources, all the other independent resources will be still reconciled. This is the opposite
+ to a fail-fast approach. The assumption is that eventually in this way the overall state will
+ converge faster towards the desired state than would be the case if the reconciliation was
+ aborted as soon as an error occurred.
+- **Concurrent reconciliation of independent resources** - the resources which doesn't depend on
+ others are processed concurrently. The level of concurrency is customizable, could be set to
+ one if required. By default, workflows use the executor service
+ from [ConfigurationService](https://github.com/java-operator-sdk/java-operator-sdk/blob/6f2a252952d3a91f6b0c3c38e5e6cc28f7c0f7b3/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L120-L120)
+
+## Reconciliation
+
+This section describes how a workflow is executed, considering first which rules apply, then
+demonstrated using examples:
+
+### Rules
+
+1. A workflow is a Directed Acyclic Graph (DAG) build from the DRs and their associated
+ `depends-on` relations.
+2. Root nodes, i.e. nodes in the graph that do not depend on other nodes are reconciled first,
+ in a parallel manner.
+3. A DR is reconciled if it does not depend on any other DRs, or *ALL* the DRs it depends on are
+ reconciled and ready. If a DR defines a reconcile pre-condition and/or an activation condition,
+ then these condition must become `true` before the DR is reconciled.
+4. A DR is considered *ready* if it got successfully reconciled and any ready post-condition it
+ might define is `true`.
+5. If a DR's reconcile pre-condition is not met, this DR is deleted. All the DRs that depend
+ on the dependent resource are also recursively deleted. This implies that
+ DRs are deleted in reverse order compared the one in which they are reconciled. The reason
+ for this behavior is (Will make a more detailed blog post about the design decision, much deeper
+ than the reference documentation)
+ The reasoning behind this behavior is as follows: a DR with a reconcile pre-condition is only
+ reconciled if the condition holds `true`. This means that if the condition is `false` and the
+ resource didn't exist already, then the associated resource would not be created. To ensure
+ idempotency (i.e. with the same input state, we should have the same output state), from this
+ follows that if the condition doesn't hold `true` anymore, the associated resource needs to
+ be deleted because the resource shouldn't exist/have been created.
+6. If a DR's activation condition is not met, it won't be reconciled or deleted. If other DR's depend on it, those will
+ be recursively deleted in a way similar to reconcile pre-conditions. Event sources for a dependent resource with
+ activation condition are registered/de-registered dynamically, thus during the reconciliation.
+7. For a DR to be deleted by a workflow, it needs to implement the `Deleter` interface, in which
+ case its `delete` method will be called, unless it also implements the `GarbageCollected`
+ interface. If a DR doesn't implement `Deleter` it is considered as automatically deleted. If
+ a delete post-condition exists for this DR, it needs to become `true` for the workflow to
+ consider the DR as successfully deleted.
+
+### Samples
+
+Notation: The arrows depicts reconciliation ordering, thus following the reverse direction of the
+`depends-on` relation:
+`1 --> 2` mean `DR 2` depends-on `DR 1`.
+
+#### Reconcile Sample
+
+```mermaid
+stateDiagram-v2
+1 --> 2
+1 --> 3
+2 --> 4
+3 --> 4
+```
+
+
+- Root nodes (i.e. nodes that don't depend on any others) are reconciled first. In this example,
+ DR `1` is reconciled first since it doesn't depend on others.
+ After that both DR `2` and `3` are reconciled concurrently, then DR `4` once both are
+ reconciled successfully.
+- If DR `2` had a ready condition and if it evaluated to as `false`, DR `4` would not be reconciled.
+ However `1`,`2` and `3` would be.
+- If `1` had a `false` ready condition, neither `2`,`3` or `4` would be reconciled.
+- If `2`'s reconciliation resulted in an error, `4` would not be reconciled, but `3`
+ would be (and `1` as well, of course).
+
+#### Sample with Reconcile Precondition
+
+
+```mermaid
+stateDiagram-v2
+1 --> 2
+1 --> 3
+3 --> 4
+3 --> 5
+```
+
+
+- If `3` has a reconcile pre-condition that is not met, `1` and `2` would be reconciled. However,
+ DR `3`,`4`,`5` would be deleted: `4` and `5` would be deleted concurrently but `3` would only
+ be deleted if `4` and `5` were deleted successfully (i.e. without error) and all existing
+ delete post-conditions were met.
+- If `5` had a delete post-condition that was `false`, `3` would not be deleted but `4`
+ would still be because they don't depend on one another.
+- Similarly, if `5`'s deletion resulted in an error, `3` would not be deleted but `4` would be.
+
+## Cleanup
+
+Cleanup works identically as delete for resources in reconciliation in case reconcile pre-condition
+is not met, just for the whole workflow.
+
+### Rules
+
+1. Delete is called on a DR if there is no DR that depends on it
+2. If a DR has DRs that depend on it, it will only be deleted if all these DRs are successfully
+ deleted without error and any delete post-condition is `true`.
+3. A DR is "manually" deleted (i.e. it's `Deleter.delete` method is called) if it implements the
+ `Deleter` interface but does not implement `GarbageCollected`. If a DR does not implement
+ `Deleter` interface, it is considered as deleted automatically.
+
+### Sample
+
+```mermaid
+stateDiagram-v2
+1 --> 2
+1 --> 3
+2 --> 4
+3 --> 4
+```
+
+- The DRs are deleted in the following order: `4` is deleted first, then `2` and `3` are deleted
+ concurrently, and, only after both are successfully deleted, `1` is deleted.
+- If `2` had a delete post-condition that was `false`, `1` would not be deleted. `4` and `3`
+ would be deleted.
+- If `2` was in error, DR `1` would not be deleted. DR `4` and `3` would be deleted.
+- if `4` was in error, no other DR would be deleted.
+
+## Error Handling
+
+As mentioned before if an error happens during a reconciliation, the reconciliation of other
+dependent resources will still happen, assuming they don't depend on the one that failed. If
+case multiple DRs fail, the workflow would throw an
+['AggregatedOperatorException'](https://github.com/java-operator-sdk/java-operator-sdk/blob/86e5121d56ed4ecb3644f2bc8327166f4f7add72/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/AggregatedOperatorException.java)
+containing all the related exceptions.
+
+The exceptions can be handled
+by [`ErrorStatusHandler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/14620657fcacc8254bb96b4293eded84c20ba685/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ErrorStatusHandler.java)
+
+## Waiting for the actual deletion of Kubernetes Dependent Resources
+
+Let's consider a case when a Kubernetes Dependent Resources (KDR) depends on another resource, on cleanup
+the resources will be deleted in reverse order, thus the KDR will be deleted first.
+However, the workflow implementation currently simply asks the Kubernetes API server to delete the resource. This is,
+however, an asynchronous process, meaning that the deletion might not occur immediately, in particular if the resource
+uses finalizers that block the deletion or if the deletion itself takes some time. From the SDK's perspective, though,
+the deletion has been requested and it moves on to other tasks without waiting for the resource to be actually deleted
+from the server (which might never occur if it uses finalizers which are not removed).
+In situations like these, if your logic depends on resources being actually removed from the cluster before a
+cleanup workflow can proceed correctly, you need to block the workflow progression using a delete post-condition that
+checks that the resource is actually removed or that it, at least, doesn't have any finalizers any longer. JOSDK
+provides such a delete post-condition implementation in the form of
+[`KubernetesResourceDeletedCondition`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/KubernetesResourceDeletedCondition.java)
+
+Also, check usage in an [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionReconciler.java).
+
+In such cases the Kubernetes Dependent Resource should extend `CRUDNoGCKubernetesDependentResource`
+and NOT `CRUDKubernetesDependentResource` since otherwise the Kubernetes Garbage Collector would delete the resources.
+In other words if a Kubernetes Dependent Resource depends on another dependent resource, it should not implement
+`GargageCollected` interface, otherwise the deletion order won't be guaranteed.
+
+
+## Explicit Managed Workflow Invocation
+
+Managed workflows, i.e. ones that are declared via annotations and therefore completely managed by JOSDK, are reconciled
+before the primary resource. Each dependent resource that can be reconciled (according to the workflow configuration)
+will therefore be reconciled before the primary reconciler is called to reconcile the primary resource. There are,
+however, situations where it would be be useful to perform additional steps before the workflow is reconciled, for
+example to validate the current state, execute arbitrary logic or even skip reconciliation altogether. Explicit
+invocation of managed workflow was therefore introduced to solve these issues.
+
+To use this feature, you need to set the `explicitInvocation` field to `true` on the `@Workflow` annotation and then
+call the `reconcileManagedWorkflow` method from the `
+ManagedWorkflowAndDependentResourceContext` retrieved from the reconciliation `Context` provided as part of your primary
+resource reconciler `reconcile` method arguments.
+
+See
+related [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation)
+for more details.
+
+For `cleanup`, if the `Cleaner` interface is implemented, the `cleanupManageWorkflow()` needs to be called explicitly.
+However, if `Cleaner` interface is not implemented, it will be called implicitly.
+See
+related [integration test](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup).
+
+While nothing prevents calling the workflow multiple times in a reconciler, it isn't typical or even recommended to do
+so. Conversely, if explicit invocation is requested but `reconcileManagedWorkflow` is not called in the primary resource
+reconciler, the workflow won't be reconciled at all.
+
+## Notes and Caveats
+
+- Delete is almost always called on every resource during the cleanup. However, it might be the case
+ that the resources were already deleted in a previous run, or not even created. This should
+ not be a problem, since dependent resources usually cache the state of the resource, so are
+ already aware that the resource does not exist and that nothing needs to be done if delete is
+ called.
+- If a resource has owner references, it will be automatically deleted by the Kubernetes garbage
+ collector if the owner resource is marked for deletion. This might not be desirable, to make
+ sure that delete is handled by the workflow don't use garbage collected kubernetes dependent
+ resource, use for
+ example [`CRUDNoGCKubernetesDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/86e5121d56ed4ecb3644f2bc8327166f4f7add72/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java)
+ .
+- No state is persisted regarding the workflow execution. Every reconciliation causes all the
+ resources to be reconciled again, in other words the whole workflow is again evaluated.
+
diff --git a/docs/content/en/docs/documentation/error-handling-retries.md b/docs/content/en/docs/documentation/error-handling-retries.md
new file mode 100644
index 0000000000..eeecf54751
--- /dev/null
+++ b/docs/content/en/docs/documentation/error-handling-retries.md
@@ -0,0 +1,146 @@
+---
+title: Error handling and retries
+weight: 46
+---
+
+## How Automatic Retries Work
+
+JOSDK automatically schedules retries whenever your `Reconciler` throws an exception. This robust retry mechanism helps handle transient issues like network problems or temporary resource unavailability.
+
+### Default Retry Behavior
+
+The default retry implementation covers most typical use cases with exponential backoff:
+
+```java
+GenericRetry.defaultLimitedExponentialRetry()
+ .setInitialInterval(5000) // Start with 5-second delay
+ .setIntervalMultiplier(1.5D) // Increase delay by 1.5x each retry
+ .setMaxAttempts(5); // Maximum 5 attempts
+```
+
+### Configuration Options
+
+**Using the `@GradualRetry` annotation:**
+
+```java
+@ControllerConfiguration
+@GradualRetry(maxAttempts = 3, initialInterval = 2000)
+public class MyReconciler implements Reconciler {
+ // reconciler implementation
+}
+```
+
+**Custom retry implementation:**
+
+Specify a custom retry class in the `@ControllerConfiguration` annotation:
+
+```java
+@ControllerConfiguration(retry = MyCustomRetry.class)
+public class MyReconciler implements Reconciler {
+ // reconciler implementation
+}
+```
+
+Your custom retry class must:
+- Provide a no-argument constructor for automatic instantiation
+- Optionally implement `AnnotationConfigurable` for configuration from annotations. See [`GenericRetry`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetry.java#)
+ implementation for more details.
+
+### Accessing Retry Information
+
+The [Context](https://github.com/java-operator-sdk/java-operator-sdk/blob/master/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Context.java) object provides retry state information:
+
+```java
+@Override
+public UpdateControl reconcile(MyResource resource, Context context) {
+ if (context.isLastAttempt()) {
+ // Handle final retry attempt differently
+ resource.getStatus().setErrorMessage("Failed after all retry attempts");
+ return UpdateControl.patchStatus(resource);
+ }
+
+ // Normal reconciliation logic
+ // ...
+}
+```
+
+### Important Retry Behavior Notes
+
+- **Retry limits don't block new events**: When retry limits are reached, new reconciliations still occur for new events
+- **No retry on limit reached**: If an error occurs after reaching the retry limit, no additional retries are scheduled until new events arrive
+- **Event-driven recovery**: Fresh events can restart the retry cycle, allowing recovery from previously failed states
+
+A successful execution resets the retry state.
+
+### Reconciler Error Handler
+
+In order to facilitate error reporting you can override [`updateErrorStatus`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java#L52)
+method in `Reconciler`:
+
+```java
+public class MyReconciler implements Reconciler {
+
+ @Override
+ public ErrorStatusUpdateControl updateErrorStatus(
+ WebPage resource, Context context, Exception e) {
+ return handleError(resource, e);
+ }
+
+}
+```
+
+The `updateErrorStatus` method is called in case an exception is thrown from the `Reconciler`. It is
+also called even if no retry policy is configured, just after the reconciler execution.
+`RetryInfo.getAttemptCount()` is zero after the first reconciliation attempt, since it is not a
+result of a retry (regardless of whether a retry policy is configured).
+
+`ErrorStatusUpdateControl` tells the SDK what to do and how to perform the status
+update on the primary resource, which is always performed as a status sub-resource request. Note that
+this update request will also produce an event and result in a reconciliation if the
+controller is not generation-aware.
+
+This feature is only available for the `reconcile` method of the `Reconciler` interface, since
+there should not be updates to resources that have been marked for deletion.
+
+Retry can be skipped in cases of unrecoverable errors:
+
+```java
+ ErrorStatusUpdateControl.patchStatus(customResource).withNoRetry();
+```
+
+### Correctness and Automatic Retries
+
+While it is possible to deactivate automatic retries, this is not desirable unless there is a particular reason.
+Errors naturally occur, whether it be transient network errors or conflicts
+when a given resource is handled by a `Reconciler` but modified simultaneously by a user in
+a different process. Automatic retries handle these cases nicely and will eventually result in a
+successful reconciliation.
+
+## Retry, Rescheduling and Event Handling Common Behavior
+
+Retry, reschedule, and standard event processing form a relatively complex system, each of these
+functionalities interacting with the others. In the following, we describe the interplay of
+these features:
+
+1. A successful execution resets a retry and the rescheduled executions that were present before
+ the reconciliation. However, the reconciliation outcome can instruct a new rescheduling (`UpdateControl` or `DeleteControl`).
+
+ For example, if a reconciliation had previously been rescheduled for after some amount of time, but an event triggered
+ the reconciliation (or cleanup) in the meantime, the scheduled execution would be automatically cancelled, i.e.
+ rescheduling a reconciliation does not guarantee that one will occur precisely at that time; it simply guarantees that a reconciliation will occur at the latest.
+ Of course, it's always possible to reschedule a new reconciliation at the end of that "automatic" reconciliation.
+
+ Similarly, if a retry was scheduled, any event from the cluster triggering a successful execution in the meantime
+ would cancel the scheduled retry (because there's now no point in retrying something that already succeeded)
+
+2. In case an exception is thrown, a retry is initiated. However, if an event is received
+ meanwhile, it will be reconciled instantly, and this execution won't count as a retry attempt.
+3. If the retry limit is reached (so no more automatic retry would happen), but a new event
+ received, the reconciliation will still happen, but won't reset the retry, and will still be
+ marked as the last attempt in the retry info. The point (1) still holds - thus successful reconciliation will reset the retry - but no retry will happen in case of an error.
+
+The thing to remember when it comes to retrying or rescheduling is that JOSDK tries to avoid unnecessary work. When
+you reschedule an operation, you instruct JOSDK to perform that operation by the end of the rescheduling
+delay at the latest. If something occurred on the cluster that triggers that particular operation (reconciliation or cleanup), then
+JOSDK considers that there's no point in attempting that operation again at the end of the specified delay since there
+is no point in doing so anymore. The same idea also applies to retries.
diff --git a/docs/content/en/docs/documentation/eventing.md b/docs/content/en/docs/documentation/eventing.md
new file mode 100644
index 0000000000..77daeb6fa3
--- /dev/null
+++ b/docs/content/en/docs/documentation/eventing.md
@@ -0,0 +1,327 @@
+---
+title: Event sources and related topics
+weight: 47
+---
+
+## Handling Related Events with Event Sources
+
+See also
+this [blog post](https://csviri.medium.com/java-operator-sdk-introduction-to-event-sources-a1aab5af4b7b)
+.
+
+Event sources are a relatively simple yet powerful and extensible concept to trigger controller
+executions, usually based on changes to dependent resources. You typically need an event source
+when you want your `Reconciler` to be triggered when something occurs to secondary resources
+that might affect the state of your primary resource. This is needed because a given
+`Reconciler` will only listen by default to events affecting the primary resource type it is
+configured for. Event sources act as listen to events affecting these secondary resources so
+that a reconciliation of the associated primary resource can be triggered when needed. Note that
+these secondary resources need not be Kubernetes resources. Typically, when dealing with
+non-Kubernetes objects or services, we can extend our operator to handle webhooks or websockets
+or to react to any event coming from a service we interact with. This allows for very efficient
+controller implementations because reconciliations are then only triggered when something occurs
+on resources affecting our primary resources thus doing away with the need to periodically
+reschedule reconciliations.
+
+
+
+There are few interesting points here:
+
+The `CustomResourceEventSource` event source is a special one, responsible for handling events
+pertaining to changes affecting our primary resources. This `EventSource` is always registered
+for every controller automatically by the SDK. It is important to note that events always relate
+to a given primary resource. Concurrency is still handled for you, even in the presence of
+`EventSource` implementations, and the SDK still guarantees that there is no concurrent execution of
+the controller for any given primary resource (though, of course, concurrent/parallel executions
+of events pertaining to other primary resources still occur as expected).
+
+### Caching and Event Sources
+
+Kubernetes resources are handled in a declarative manner. The same also holds true for event
+sources. For example, if we define an event source to watch for changes of a Kubernetes Deployment
+object using an `InformerEventSource`, we always receive the whole associated object from the
+Kubernetes API. This object might be needed at any point during our reconciliation process and
+it's best to retrieve it from the event source directly when possible instead of fetching it
+from the Kubernetes API since the event source guarantees that it will provide the latest
+version. Not only that, but many event source implementations also cache resources they handle
+so that it's possible to retrieve the latest version of resources without needing to make any
+calls to the Kubernetes API, thus allowing for very efficient controller implementations.
+
+Note after an operator starts, caches are already populated by the time the first reconciliation
+is processed for the `InformerEventSource` implementation. However, this does not necessarily
+hold true for all event source implementations (`PerResourceEventSource` for example). The SDK
+provides methods to handle this situation elegantly, allowing you to check if an object is
+cached, retrieving it from a provided supplier if not. See
+related [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java#L146)
+.
+
+### Registering Event Sources
+
+To register event sources, your `Reconciler` has to override the `prepareEventSources` and return
+list of event sources to register. One way to see this in action is
+to look at the
+[WebPage example](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java)
+(irrelevant details omitted):
+
+```java
+
+import java.util.List;
+
+@ControllerConfiguration
+public class WebappReconciler
+ implements Reconciler, Cleaner, EventSourceInitializer {
+ // ommitted code
+
+ @Override
+ public List> prepareEventSources(EventSourceContext context) {
+ InformerEventSourceConfiguration configuration =
+ InformerEventSourceConfiguration.from(Deployment.class, Webapp.class)
+ .withLabelSelector(SELECTOR)
+ .build();
+ return List.of(new InformerEventSource<>(configuration, context));
+ }
+}
+```
+
+In the example above an `InformerEventSource` is configured and registered.
+`InformerEventSource` is one of the bundled `EventSource` implementations that JOSDK provides to
+cover common use cases.
+
+### Managing Relation between Primary and Secondary Resources
+
+Event sources let your operator know when a secondary resource has changed and that your
+operator might need to reconcile this new information. However, in order to do so, the SDK needs
+to somehow retrieve the primary resource associated with which ever secondary resource triggered
+the event. In the `Webapp` example above, when an event occurs on a tracked `Deployment`, the
+SDK needs to be able to identify which `Webapp` resource is impacted by that change.
+
+Seasoned Kubernetes users already know one way to track this parent-child kind of relationship:
+using owner references. Indeed, that's how the SDK deals with this situation by default as well,
+that is, if your controller properly set owner references on your secondary resources, the SDK
+will be able to follow that reference back to your primary resource automatically without you
+having to worry about it.
+
+However, owner references cannot always be used as they are restricted to operating within a
+single namespace (i.e. you cannot have an owner reference to a resource in a different namespace)
+and are, by essence, limited to Kubernetes resources so you're out of luck if your secondary
+resources live outside of a cluster.
+
+This is why JOSDK provides the `SecondaryToPrimaryMapper` interface so that you can provide
+alternative ways for the SDK to identify which primary resource needs to be reconciled when
+something occurs to your secondary resources. We even provide some of these alternatives in the
+[Mappers](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java)
+class.
+
+Note that, while a set of `ResourceID` is returned, this set usually consists only of one
+element. It is however possible to return multiple values or even no value at all to cover some
+rare corner cases. Returning an empty set means that the mapper considered the secondary
+resource event as irrelevant and the SDK will thus not trigger a reconciliation of the primary
+resource in that situation.
+
+Adding a `SecondaryToPrimaryMapper` is typically sufficient when there is a one-to-many relationship
+between primary and secondary resources. The secondary resources can be mapped to its primary
+owner, and this is enough information to also get these secondary resources from the `Context`
+object that's passed to your `Reconciler`.
+
+There are however cases when this isn't sufficient and you need to provide an explicit mapping
+between a primary resource and its associated secondary resources using an implementation of the
+`PrimaryToSecondaryMapper` interface. This is typically needed when there are many-to-one or
+many-to-many relationships between primary and secondary resources, e.g. when the primary resource
+is referencing secondary resources.
+See [PrimaryToSecondaryIT](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java)
+integration test for a sample.
+
+### Built-in EventSources
+
+There are multiple event-sources provided out of the box, the following are some more central ones:
+
+#### `InformerEventSource`
+
+[InformerEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java)
+is probably the most important `EventSource` implementation to know about. When you create an
+`InformerEventSource`, JOSDK will automatically create and register a `SharedIndexInformer`, a
+fabric8 Kubernetes client class, that will listen for events associated with the resource type
+you configured your `InformerEventSource` with. If you want to listen to Kubernetes resource
+events, `InformerEventSource` is probably the only thing you need to use. It's highly
+configurable so you can tune it to your needs. Take a look at
+[InformerEventSourceConfiguration](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java)
+and associated classes for more details but some interesting features we can mention here is the
+ability to filter events so that you can only get notified for events you care about. A
+particularly interesting feature of the `InformerEventSource`, as opposed to using your own
+informer-based listening mechanism is that caches are particularly well optimized preventing
+reconciliations from being triggered when not needed and allowing efficient operators to be written.
+
+#### `PerResourcePollingEventSource`
+
+[PerResourcePollingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java)
+is used to poll external APIs, which don't support webhooks or other event notifications. It
+extends the abstract
+[ExternalResourceCachingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java)
+to support caching.
+See [MySQL Schema sample](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java)
+for usage.
+
+#### `PollingEventSource`
+
+[PollingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java)
+is similar to `PerResourceCachingEventSource` except that, contrary to that event source, it
+doesn't poll a specific API separately per resource, but periodically and independently of
+actually observed primary resources.
+
+#### Inbound event sources
+
+[SimpleInboundEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/SimpleInboundEventSource.java)
+and
+[CachingInboundEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java)
+are used to handle incoming events from webhooks and messaging systems.
+
+#### `ControllerResourceEventSource`
+
+[ControllerResourceEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java)
+is a special `EventSource` implementation that you will never have to deal with directly. It is,
+however, at the core of the SDK is automatically added for you: this is the main event source
+that listens for changes to your primary resources and triggers your `Reconciler` when needed.
+It features smart caching and is really optimized to minimize Kubernetes API accesses and avoid
+triggering unduly your `Reconciler`.
+
+More on the philosophy of the non Kubernetes API related event source see in
+issue [#729](https://github.com/java-operator-sdk/java-operator-sdk/issues/729).
+
+
+## InformerEventSource Multi-Cluster Support
+
+It is possible to handle resources for remote cluster with `InformerEventSource`. To do so,
+simply set a client that connects to a remote cluster:
+
+```java
+
+InformerEventSourceConfiguration configuration =
+ InformerEventSourceConfiguration.from(SecondaryResource.class, PrimaryResource.class)
+ .withKubernetesClient(remoteClusterClient)
+ .withSecondaryToPrimaryMapper(Mappers.fromDefaultAnnotations());
+
+```
+
+You will also need to specify a `SecondaryToPrimaryMapper`, since the default one
+is based on owner references and won't work across cluster instances. You could, for example, use the provided implementation that relies on annotations added to the secondary resources to identify the associated primary resource.
+
+See related [integration test](https://github.com/operator-framework/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster).
+
+
+## Generation Awareness and Event Filtering
+
+A best practice when an operator starts up is to reconcile all the associated resources because
+changes might have occurred to the resources while the operator was not running.
+
+When this first reconciliation is done successfully, the next reconciliation is triggered if either
+dependent resources are changed or the primary resource `.spec` field is changed. If other fields
+like `.metadata` are changed on the primary resource, the reconciliation could be skipped. This
+behavior is supported out of the box and reconciliation is by default not triggered if
+changes to the primary resource do not increase the `.metadata.generation` field.
+Note that changes to `.metada.generation` are automatically handled by Kubernetes.
+
+To turn off this feature, set `generationAwareEventProcessing` to `false` for the `Reconciler`.
+
+
+## Max Interval Between Reconciliations
+
+When informers / event sources are properly set up, and the `Reconciler` implementation is
+correct, no additional reconciliation triggers should be needed. However, it's
+a [common practice](https://github.com/java-operator-sdk/java-operator-sdk/issues/848#issuecomment-1016419966)
+to have a failsafe periodic trigger in place, just to make sure resources are nevertheless
+reconciled after a certain amount of time. This functionality is in place by default, with a
+rather high time interval (currently 10 hours) after which a reconciliation will be
+automatically triggered even in the absence of other events. See how to override this using the
+standard annotation:
+
+```java
+@ControllerConfiguration(maxReconciliationInterval = @MaxReconciliationInterval(
+ interval = 50,
+ timeUnit = TimeUnit.MILLISECONDS))
+public class MyReconciler implements Reconciler {}
+```
+
+The event is not propagated at a fixed rate, rather it's scheduled after each reconciliation. So the
+next reconciliation will occur at most within the specified interval after the last reconciliation.
+
+This feature can be turned off by setting `maxReconciliationInterval`
+to [`Constants.NO_MAX_RECONCILIATION_INTERVAL`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Constants.java#L20-L20)
+or any non-positive number.
+
+The automatic retries are not affected by this feature so a reconciliation will be re-triggered
+on error, according to the specified retry policy, regardless of this maximum interval setting.
+
+## Rate Limiting
+
+It is possible to rate limit reconciliation on a per-resource basis. The rate limit also takes
+precedence over retry/re-schedule configurations: for example, even if a retry was scheduled for
+the next second but this request would make the resource go over its rate limit, the next
+reconciliation will be postponed according to the rate limiting rules. Note that the
+reconciliation is never cancelled, it will just be executed as early as possible based on rate
+limitations.
+
+Rate limiting is by default turned **off**, since correct configuration depends on the reconciler
+implementation, in particular, on how long a typical reconciliation takes.
+(The parallelism of reconciliation itself can be
+limited [`ConfigurationService`](https://github.com/java-operator-sdk/java-operator-sdk/blob/ce4d996ee073ebef5715737995fc3d33f4751275/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L120-L120)
+by configuring the `ExecutorService` appropriately.)
+
+A default rate limiter implementation is provided, see:
+[`PeriodRateLimiter`](https://github.com/java-operator-sdk/java-operator-sdk/blob/ce4d996ee073ebef5715737995fc3d33f4751275/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/PeriodRateLimiter.java#L14-L14)
+.
+Users can override it by implementing their own
+[`RateLimiter`](https://github.com/java-operator-sdk/java-operator-sdk/blob/ce4d996ee073ebef5715737995fc3d33f4751275/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/RateLimiter.java)
+and specifying this custom implementation using the `rateLimiter` field of the
+`@ControllerConfiguration` annotation. Similarly to the `Retry` implementations,
+`RateLimiter` implementations must provide an accessible, no-arg constructor for instantiation
+purposes and can further be automatically configured from your own, provided annotation provided
+your `RateLimiter` implementation also implements the `AnnotationConfigurable` interface,
+parameterized by your custom annotation type.
+
+To configure the default rate limiter use the `@RateLimited` annotation on your
+`Reconciler` class. The following configuration limits each resource to reconcile at most twice
+within a 3 second interval:
+
+```java
+
+@RateLimited(maxReconciliations = 2, within = 3, unit = TimeUnit.SECONDS)
+@ControllerConfiguration
+public class MyReconciler implements Reconciler {
+
+}
+```
+
+Thus, if a given resource was reconciled twice in one second, no further reconciliation for this
+resource will happen before two seconds have elapsed. Note that, since rate is limited on a
+per-resource basis, other resources can still be reconciled at the same time, as long, of course,
+that they stay within their own rate limits.
+
+## Optimizing Caches
+
+One of the ideas around the operator pattern is that all the relevant resources are cached, thus reconciliation is
+usually very fast (especially if no resources are updated in the process) since the operator is then mostly working with
+in-memory state. However for large clusters, caching huge amount of primary and secondary resources might consume lots
+of memory. JOSDK provides ways to mitigate this issue and optimize the memory usage of controllers. While these features
+are working and tested, we need feedback from real production usage.
+
+### Bounded Caches for Informers
+
+Limiting caches for informers - thus for Kubernetes resources - is supported by ensuring that resources are in the cache
+for a limited time, via a cache eviction of least recently used resources. This means that when resources are created
+and frequently reconciled, they stay "hot" in the cache. However, if, over time, a given resource "cools" down, i.e. it
+becomes less and less used to the point that it might not be reconciled anymore, it will eventually get evicted from the
+cache to free up memory. If such an evicted resource were to become reconciled again, the bounded cache implementation
+would then fetch it from the API server and the "hot/cold" cycle would start anew.
+
+Since all resources need to be reconciled when a controller start, it is not practical to set a maximal cache size as
+it's desirable that all resources be cached as soon as possible to make the initial reconciliation process on start as
+fast and efficient as possible, avoiding undue load on the API server. It's therefore more interesting to gradually
+evict cold resources than try to limit cache sizes.
+
+See usage of the related implementation using [Caffeine](https://github.com/ben-manes/caffeine) cache in integration
+tests
+for [primary resources](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java).
+
+See
+also [CaffeineBoundedItemStores](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java)
+for more details.
\ No newline at end of file
diff --git a/docs/content/en/docs/documentation/features.md b/docs/content/en/docs/documentation/features.md
new file mode 100644
index 0000000000..8c8909c8b2
--- /dev/null
+++ b/docs/content/en/docs/documentation/features.md
@@ -0,0 +1,55 @@
+---
+title: Other Features
+weight: 57
+---
+
+The Java Operator SDK (JOSDK) is a high-level framework and tooling suite for implementing Kubernetes operators. By default, features follow best practices in an opinionated way. However, configuration options and feature flags are available to fine-tune or disable these features.
+
+## Support for Well-Known Kubernetes Resources
+
+Controllers can be registered for standard Kubernetes resources (not just custom resources), such as `Ingress`, `Deployment`, and others.
+
+See the [integration test](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment) for an example of reconciling deployments.
+
+```java
+public class DeploymentReconciler
+ implements Reconciler, TestExecutionInfoProvider {
+
+ @Override
+ public UpdateControl reconcile(
+ Deployment resource, Context context) {
+ // omitted code
+ }
+}
+```
+
+## Leader Election
+
+Operators are typically deployed with a single active instance. However, you can deploy multiple instances where only one (the "leader") processes events. This is achieved through "leader election."
+
+While all instances run and start their event sources to populate caches, only the leader processes events. If the leader crashes, other instances are already warmed up and ready to take over when a new leader is elected.
+
+See sample configuration in the [E2E test](https://github.com/java-operator-sdk/java-operator-sdk/blob/8865302ac0346ee31f2d7b348997ec2913d5922b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java#L21-L23).
+
+## Automatic CRD Generation
+
+**Note:** This feature is provided by the [Fabric8 Kubernetes Client](https://github.com/fabric8io/kubernetes-client), not JOSDK itself.
+
+To automatically generate CRD manifests from your annotated Custom Resource classes, add this dependency to your project:
+
+```xml
+
+
+ io.fabric8
+ crd-generator-apt
+ provided
+
+```
+
+The CRD will be generated in `target/classes/META-INF/fabric8` (or `target/test-classes/META-INF/fabric8` for test scope) with the CRD name suffixed by the generated spec version.
+
+For example, a CR using the `java-operator-sdk.io` group with a `mycrs` plural form will result in these files:
+- `mycrs.java-operator-sdk.io-v1.yml`
+- `mycrs.java-operator-sdk.io-v1beta1.yml`
+
+**Note for Quarkus users:** If you're using the `quarkus-operator-sdk` extension, you don't need to add any extra dependency for CRD generation - the extension handles this automatically.
diff --git a/docs/content/en/docs/documentation/observability.md b/docs/content/en/docs/documentation/observability.md
new file mode 100644
index 0000000000..27a68086d5
--- /dev/null
+++ b/docs/content/en/docs/documentation/observability.md
@@ -0,0 +1,112 @@
+---
+title: Observability
+weight: 55
+---
+
+## Runtime Info
+
+[RuntimeInfo](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RuntimeInfo.java#L16-L16)
+is used mainly to check the actual health of event sources. Based on this information it is easy to implement custom
+liveness probes.
+
+[stopOnInformerErrorDuringStartup](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L168-L168)
+setting, where this flag usually needs to be set to false, in order to control the exact liveness properties.
+
+See also an example implementation in the
+[WebPage sample](https://github.com/java-operator-sdk/java-operator-sdk/blob/3e2e7c4c834ef1c409d636156b988125744ca911/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java#L38-L43)
+
+## Contextual Info for Logging with MDC
+
+Logging is enhanced with additional contextual information using
+[MDC](http://www.slf4j.org/manual.html#mdc). The following attributes are available in most
+parts of reconciliation logic and during the execution of the controller:
+
+| MDC Key | Value added from primary resource |
+|:---------------------------|:----------------------------------|
+| `resource.apiVersion` | `.apiVersion` |
+| `resource.kind` | `.kind` |
+| `resource.name` | `.metadata.name` |
+| `resource.namespace` | `.metadata.namespace` |
+| `resource.resourceVersion` | `.metadata.resourceVersion` |
+| `resource.generation` | `.metadata.generation` |
+| `resource.uid` | `.metadata.uid` |
+
+For more information about MDC see this [link](https://www.baeldung.com/mdc-in-log4j-2-logback).
+
+## Metrics
+
+JOSDK provides built-in support for metrics reporting on what is happening with your reconcilers in the form of
+the `Metrics` interface which can be implemented to connect to your metrics provider of choice, JOSDK calling the
+methods as it goes about reconciling resources. By default, a no-operation implementation is provided thus providing a
+no-cost sane default. A [micrometer](https://micrometer.io)-based implementation is also provided.
+
+You can use a different implementation by overriding the default one provided by the default `ConfigurationService`, as
+follows:
+
+```java
+Metrics metrics; // initialize your metrics implementation
+Operator operator = new Operator(client, o -> o.withMetrics(metrics));
+```
+
+### Micrometer implementation
+
+The micrometer implementation is typically created using one of the provided factory methods which, depending on which
+is used, will return either a ready to use instance or a builder allowing users to customized how the implementation
+behaves, in particular when it comes to the granularity of collected metrics. It is, for example, possible to collect
+metrics on a per-resource basis via tags that are associated with meters. This is the default, historical behavior but
+this will change in a future version of JOSDK because this dramatically increases the cardinality of metrics, which
+could lead to performance issues.
+
+To create a `MicrometerMetrics` implementation that behaves how it has historically behaved, you can just create an
+instance via:
+
+```java
+MeterRegistry registry; // initialize your registry implementation
+Metrics metrics = new MicrometerMetrics(registry);
+```
+
+Note, however, that this constructor is deprecated and we encourage you to use the factory methods instead, which either
+return a fully pre-configured instance or a builder object that will allow you to configure more easily how the instance
+will behave. You can, for example, configure whether or not the implementation should collect metrics on a per-resource
+basis, whether or not associated meters should be removed when a resource is deleted and how the clean-up is performed.
+See the relevant classes documentation for more details.
+
+For example, the following will create a `MicrometerMetrics` instance configured to collect metrics on a per-resource
+basis, deleting the associated meters after 5 seconds when a resource is deleted, using up to 2 threads to do so.
+
+```java
+MicrometerMetrics.newPerResourceCollectingMicrometerMetricsBuilder(registry)
+ .withCleanUpDelayInSeconds(5)
+ .withCleaningThreadNumber(2)
+ .build();
+```
+
+### Operator SDK metrics
+
+The micrometer implementation records the following metrics:
+
+| Meter name | Type | Tag names | Description |
+|-------------------------------------------------------------|----------------|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|
+| operator.sdk.reconciliations.executions.`` | gauge | group, version, kind | Number of executions of the named reconciler |
+| operator.sdk.reconciliations.queue.size.`` | gauge | group, version, kind | How many resources are queued to get reconciled by named reconciler |
+| operator.sdk.``.size | gauge map size | | Gauge tracking the size of a specified map (currently unused but could be used to monitor caches size) |
+| operator.sdk.events.received | counter | ``, event, action | Number of received Kubernetes events |
+| operator.sdk.events.delete | counter | `` | Number of received Kubernetes delete events |
+| operator.sdk.reconciliations.started | counter | ``, reconciliations.retries.last, reconciliations.retries.number | Number of started reconciliations per resource type |
+| operator.sdk.reconciliations.failed | counter | ``, exception | Number of failed reconciliations per resource type |
+| operator.sdk.reconciliations.success | counter | `` | Number of successful reconciliations per resource type |
+| operator.sdk.controllers.execution.reconcile | timer | ``, controller | Time taken for reconciliations per controller |
+| operator.sdk.controllers.execution.cleanup | timer | ``, controller | Time taken for cleanups per controller |
+| operator.sdk.controllers.execution.reconcile.success | counter | controller, type | Number of successful reconciliations per controller |
+| operator.sdk.controllers.execution.reconcile.failure | counter | controller, exception | Number of failed reconciliations per controller |
+| operator.sdk.controllers.execution.cleanup.success | counter | controller, type | Number of successful cleanups per controller |
+| operator.sdk.controllers.execution.cleanup.failure | counter | controller, exception | Number of failed cleanups per controller |
+
+As you can see all the recorded metrics start with the `operator.sdk` prefix. ``, in the table above,
+refers to resource-specific metadata and depends on the considered metric and how the implementation is configured and
+could be summed up as follows: `group?, version, kind, [name, namespace?], scope` where the tags in square
+brackets (`[]`) won't be present when per-resource collection is disabled and tags followed by a question mark are
+omitted if the associated value is empty. Of note, when in the context of controllers' execution metrics, these tag
+names are prefixed with `resource.`. This prefix might be removed in a future version for greater consistency.
+
+
diff --git a/docs/content/en/docs/documentation/reconciler.md b/docs/content/en/docs/documentation/reconciler.md
new file mode 100644
index 0000000000..3ea09cf167
--- /dev/null
+++ b/docs/content/en/docs/documentation/reconciler.md
@@ -0,0 +1,212 @@
+---
+title: Implementing a reconciler
+weight: 45
+---
+
+## How Reconciliation Works
+
+The reconciliation process is event-driven and follows this flow:
+
+1. **Event Reception**: Events trigger reconciliation from:
+ - **Primary resources** (usually custom resources) when created, updated, or deleted
+ - **Secondary resources** through registered event sources
+
+2. **Reconciliation Execution**: Each reconciler handles a specific resource type and listens for events from the Kubernetes API server. When an event arrives, it triggers reconciliation unless one is already running for that resource. The framework ensures no concurrent reconciliation occurs for the same resource.
+
+3. **Post-Reconciliation Processing**: After reconciliation completes, the framework:
+ - Schedules a retry if an exception was thrown
+ - Schedules new reconciliation if events were received during execution
+ - Schedules a timer event if rescheduling was requested (`UpdateControl.rescheduleAfter(..)`)
+ - Finishes reconciliation if none of the above apply
+
+The SDK core implements an event-driven system where events trigger reconciliation requests.
+
+## Implementing Reconciler and Cleaner Interfaces
+
+To implement a reconciler, you must implement the [`Reconciler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java) interface.
+
+A Kubernetes resource lifecycle has two phases depending on whether the resource is marked for deletion:
+
+**Normal Phase**: The framework calls the `reconcile` method for regular resource operations.
+
+**Deletion Phase**: If the resource is marked for deletion and your `Reconciler` implements the [`Cleaner`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java) interface, only the `cleanup` method is called. The framework automatically handles finalizers for you.
+
+If you need explicit cleanup logic, always use finalizers. See [Finalizer support](#finalizer-support) for details.
+
+### Using `UpdateControl` and `DeleteControl`
+
+These classes control the behavior after reconciliation completes.
+
+[`UpdateControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java) can instruct the framework to:
+- Update the status sub-resource
+- Reschedule reconciliation with a time delay
+
+```java
+ @Override
+ public UpdateControl reconcile(
+ EventSourceTestCustomResource resource, Context context) {
+ // omitted code
+
+ return UpdateControl.patchStatus(resource).rescheduleAfter(10, TimeUnit.SECONDS);
+ }
+```
+
+without an update:
+
+```java
+ @Override
+ public UpdateControl reconcile(
+ EventSourceTestCustomResource resource, Context context) {
+ // omitted code
+
+ return UpdateControl.noUpdate().rescheduleAfter(10, TimeUnit.SECONDS);
+ }
+```
+
+Note, though, that using `EventSources` is the preferred way of scheduling since the
+reconciliation is triggered only when a resource is changed, not on a timely basis.
+
+At the end of the reconciliation, you typically update the status sub-resources.
+It is also possible to update both the status and the resource with the `patchResourceAndStatus` method. In this case,
+the resource is updated first followed by the status, using two separate requests to the Kubernetes API.
+
+From v5 `UpdateControl` only supports patching the resources, by default
+using [Server Side Apply (SSA)](https://kubernetes.io/docs/reference/using-api/server-side-apply/).
+It is important to understand how SSA works in Kubernetes. Mainly, resources applied using SSA
+should contain only the fields identifying the resource and those the user is interested in (a 'fully specified intent'
+in Kubernetes parlance), thus usually using a resource created from scratch, see
+[sample](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa).
+To contrast, see the same sample, this time [without SSA](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAReconciler.java).
+
+Non-SSA based patch is still supported.
+You can control whether or not to use SSA
+using [`ConfigurationServcice.useSSAToPatchPrimaryResource()`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L385-L385)
+and the related `ConfigurationServiceOverrider.withUseSSAToPatchPrimaryResource` method.
+Related integration test can be
+found [here](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa).
+
+Handling resources directly using the client, instead of delegating these updates operations to JOSDK by returning
+an `UpdateControl` at the end of your reconciliation, should work appropriately. However, we do recommend to
+use `UpdateControl` instead since JOSDK makes sure that the operations are handled properly, since there are subtleties
+to be aware of. For example, if you are using a finalizer, JOSDK makes sure to include it in your fully specified intent
+so that it is not unintentionally removed from the resource (which would happen if you omit it, since your controller is
+the designated manager for that field and Kubernetes interprets the finalizer being gone from the specified intent as a
+request for removal).
+
+[`DeleteControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DeleteControl.java)
+typically instructs the framework to remove the finalizer after the dependent
+resource are cleaned up in `cleanup` implementation.
+
+```java
+
+public DeleteControl cleanup(MyCustomResource customResource,Context context){
+ // omitted code
+
+ return DeleteControl.defaultDelete();
+ }
+
+```
+
+However, it is possible to instruct the SDK to not remove the finalizer, this allows to clean up
+the resources in a more asynchronous way, mostly for cases when there is a long waiting period
+after a delete operation is initiated. Note that in this case you might want to either schedule
+a timed event to make sure `cleanup` is executed again or use event sources to get notified
+about the state changes of the deleted resource.
+
+### Finalizer Support
+
+[Kubernetes finalizers](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/)
+make sure that your `Reconciler` gets a chance to act before a resource is actually deleted
+after it's been marked for deletion. Without finalizers, the resource would be deleted directly
+by the Kubernetes server.
+
+Depending on your use case, you might or might not need to use finalizers. In particular, if
+your operator doesn't need to clean any state that would not be automatically managed by the
+Kubernetes cluster (e.g. external resources), you might not need to use finalizers. You should
+use the
+Kubernetes [garbage collection](https://kubernetes.io/docs/concepts/architecture/garbage-collection/#owners-dependents)
+mechanism as much as possible by setting owner references for your secondary resources so that
+the cluster can automatically delete them for you whenever the associated primary resource is
+deleted. Note that setting owner references is the responsibility of the `Reconciler`
+implementation, though [dependent resources](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/)
+make that process easier.
+
+If you do need to clean such a state, you need to use finalizers so that their
+presence will prevent the Kubernetes server from deleting the resource before your operator is
+ready to allow it. This allows for clean-up even if your operator was down when the resource was marked for deletion.
+
+JOSDK makes cleaning resources in this fashion easier by taking care of managing finalizers
+automatically for you when needed. The only thing you need to do is let the SDK know that your
+operator is interested in cleaning the state associated with your primary resources by having it
+implement
+the [`Cleaner`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java)
+interface. If your `Reconciler` doesn't implement the `Cleaner` interface, the SDK will consider
+that you don't need to perform any clean-up when resources are deleted and will, therefore, not activate finalizer support.
+In other words, finalizer support is added only if your `Reconciler` implements the `Cleaner` interface.
+
+The framework automatically adds finalizers as the first step, thus after a resource
+is created but before the first reconciliation. The finalizer is added via a separate
+Kubernetes API call. As a result of this update, the finalizer will then be present on the
+resource. The reconciliation can then proceed as normal.
+
+The automatically added finalizer will also be removed after the `cleanup` is executed on
+the reconciler. This behavior is customizable as explained
+[above](#using-updatecontrol-and-deletecontrol) when we addressed the use of
+`DeleteControl`.
+
+You can specify the name of the finalizer to use for your `Reconciler` using the
+[`@ControllerConfiguration`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java)
+annotation. If you do not specify a finalizer name, one will be automatically generated for you.
+
+From v5, by default, the finalizer is added using Server Side Apply. See also `UpdateControl` in docs.
+
+### Making sure the primary resource is up to date for the next reconciliation
+
+It is typical to want to update the status subresource with the information that is available during the reconciliation.
+This is sometimes referred to as the last observed state. When the primary resource is updated, though, the framework
+does not cache the resource directly, relying instead on the propagation of the update to the underlying informer's
+cache. It can, therefore, happen that, if other events trigger other reconciliations, before the informer cache gets
+updated, your reconciler does not see the latest version of the primary resource. While this might not typically be a
+problem in most cases, as caches eventually become consistent, depending on your reconciliation logic, you might still
+require the latest status version possible, for example, if the status subresource is used to store allocated values.
+See [Representing Allocated Values](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#representing-allocated-values)
+from the Kubernetes docs for more details.
+
+The framework provides the
+[`PrimaryUpdateAndCacheUtils`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/PrimaryUpdateAndCacheUtils.java) utility class
+to help with these use cases.
+
+This class' methods use internal caches in combination with update methods that leveraging
+optimistic locking. If the update method fails on optimistic locking, it will retry
+using a fresh resource from the server as base for modification.
+
+```java
+@Override
+public UpdateControl reconcile(
+ StatusPatchCacheCustomResource resource, Context context) {
+
+ // omitted logic
+
+ // update with SSA requires a fresh copy
+ var freshCopy = createFreshCopy(primary);
+ freshCopy.getStatus().setValue(statusWithState());
+
+ var updatedResource = PrimaryUpdateAndCacheUtils.ssaPatchStatusAndCacheResource(resource, freshCopy, context);
+
+ // the resource was updated transparently via the utils, no further action is required via UpdateControl in this case
+ return UpdateControl.noUpdate();
+ }
+```
+
+After the update `PrimaryUpdateAndCacheUtils.ssaPatchStatusAndCacheResource` puts the result of the update into an internal
+cache and the framework will make sure that the next reconciliation contains the most recent version of the resource.
+Note that it is not necessarily the same version returned as response from the update, it can be a newer version since other parties
+can do additional updates meanwhile. However, unless it has been explicitly modified, that
+resource will contain the up-to-date status.
+
+Note that you can also perform additional updates after the `PrimaryUpdateAndCacheUtils.*PatchStatusAndCacheResource` is
+called, either by calling any of the `PrimeUpdateAndCacheUtils` methods again or via `UpdateControl`. Using
+`PrimaryUpdateAndCacheUtils` guarantees that the next reconciliation will see a resource state no older than the version
+updated via `PrimaryUpdateAndCacheUtils`.
+
+See related integration test [here](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuscache).
diff --git a/docs/content/en/docs/documentation/working-with-es-caches.md b/docs/content/en/docs/documentation/working-with-es-caches.md
new file mode 100644
index 0000000000..bb1e140303
--- /dev/null
+++ b/docs/content/en/docs/documentation/working-with-es-caches.md
@@ -0,0 +1,218 @@
+---
+title: Working with EventSource caches
+weight: 48
+---
+
+As described in [Event sources and related topics](eventing.md), event sources serve as the backbone
+for caching resources and triggering reconciliation for primary resources that are related
+to these secondary resources.
+
+In the Kubernetes ecosystem, the component responsible for this is called an Informer. Without delving into
+the details (there are plenty of excellent resources online about informers), informers
+watch resources, cache them, and emit events when resources change.
+
+`EventSource` is a generalized concept that extends the Informer pattern to non-Kubernetes resources,
+allowing you to cache external resources and trigger reconciliation when those resources change.
+
+## The InformerEventSource
+
+The underlying informer implementation comes from the Fabric8 client, called [DefaultSharedIndexInformer](https://github.com/fabric8io/kubernetes-client/blob/main/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/informers/impl/DefaultSharedIndexInformer.java).
+[InformerEventSource](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java)
+in Java Operator SDK wraps the Fabric8 client informers.
+While this wrapper adds additional capabilities specifically required for controllers, this is the event
+source that most likely will be used to deal with Kubernetes resources.
+
+These additional capabilities include:
+- Maintaining an index that maps secondary resources in the informer cache to their related primary resources
+- Setting up multiple informers for the same resource type when needed (for example, you need one informer per namespace if the informer is not watching the entire cluster)
+- Dynamically adding and removing watched namespaces
+- Other capabilities that are beyond the scope of this document
+
+### Associating Secondary Resources to Primary Resource
+
+Event sources need to trigger the appropriate reconciler, providing the correct primary resource, whenever one of their
+handled secondary resources changes. It is thus core to an event source's role to identify which primary resource
+(usually, your custom resource) is potentially impacted by that change.
+The framework uses [`SecondaryToPrimaryMapper`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/SecondaryToPrimaryMapper.java)
+for this purpose. For `InformerEventSources`, which target Kubernetes resources, this mapping is typically done using
+either the owner reference or an annotation on the secondary resource. For external resources, other mechanisms need to
+be used and there are also cases where the default mechanisms provided by the SDK do not work, even for Kubernetes
+resources.
+
+However, once the event source has triggered a primary resource reconciliation, the associated reconciler needs to
+access the secondary resources which changes caused the reconciliation. Indeed, the information from the secondary
+resources might be needed during the reconciliation. For that purpose,
+`InformerEventSource` maintains a reverse
+index [PrimaryToSecondaryIndex](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/DefaultPrimaryToSecondaryIndex.java),
+based on the result of the `SecondaryToPrimaryMapper`result.
+
+## Unified API for Related Resources
+
+To access all related resources for a primary resource, the framework provides an API to access the related
+secondary resources using the `Set getSecondaryResources(Class expectedType)` method of the `Context` object
+provided as part of the `reconcile` method.
+
+For `InformerEventSource`, this will leverage the associated `PrimaryToSecondaryIndex`. Resources are then retrieved
+from the informer's cache. Note that since all those steps work on top of indexes, those operations are very fast,
+usually O(1).
+
+While we've focused mostly on `InformerEventSource`, this concept can be extended to all `EventSources`, since
+[`EventSource`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java#L93)
+actually implements the `Set getSecondaryResources(P primary)` method that can be called from the `Context`.
+
+As there can be multiple event sources for the same resource types, things are a little more complex: the union of each
+event source results is returned.
+
+## Getting Resources Directly from Event Sources
+
+Note that nothing prevents you from directly accessing resources in the cache without going through
+`getSecondaryResources(...)`:
+
+```java
+public class WebPageReconciler implements Reconciler {
+
+ InformerEventSource configMapEventSource;
+
+ @Override
+ public UpdateControl reconcile(WebPage webPage, Context context) {
+ // accessing resource directly from an event source
+ var mySecondaryResource = configMapEventSource.get(new ResourceID("name","namespace"));
+ // details omitted
+ }
+
+ @Override
+ public List> prepareEventSources(EventSourceContext context) {
+ configMapEventSource = new InformerEventSource<>(
+ InformerEventSourceConfiguration.from(ConfigMap.class, WebPage.class)
+ .withLabelSelector(SELECTOR)
+ .build(),
+ context);
+
+ return List.of(configMapEventSource);
+ }
+}
+```
+
+## The Use Case for PrimaryToSecondaryMapper
+
+**TL;DR**: `PrimaryToSecondaryMapper` allows `InformerEventSource` to access secondary resources directly
+instead of using the `PrimaryToSecondaryIndex`. When this mapper is configured, `InformerEventSource.getSecondaryResources(..)`
+will call the mapper to retrieve the target secondary resources. This is typically required when the `SecondaryToPrimaryMapper`
+uses informer caches to list the target resources.
+
+As discussed, we provide a unified API to access related resources using `Context.getSecondaryResources(...)`.
+The term "Secondary" refers to resources that a reconciler needs to consider when properly reconciling a primary
+resource. These resources encompass more than just "child" resources (resources created by a reconciler that
+typically have an owner reference pointing to the primary custom resource). They also include
+"related" resources (which may or may not be managed by Kubernetes) that serve as input for reconciliations.
+
+In some cases, the SDK needs additional information beyond what's readily available, particularly when
+secondary resources lack owner references or any direct link to their associated primary resource.
+
+Consider this example: a `Job` primary resource can be assigned to run on a cluster, represented by a
+`Cluster` resource.
+Multiple jobs can run on the same cluster, so multiple `Job` resources can reference the same `Cluster` resource. However,
+a `Cluster` resource shouldn't know about `Job` resources, as this information isn't part of what defines a cluster.
+When a cluster changes, though, we might want to redirect associated jobs to other clusters. Our reconciler
+therefore needs to determine which `Job` (primary) resources are associated with the changed `Cluster` (secondary)
+resource.
+See full
+sample [here](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary).
+
+```java
+InformerEventSourceConfiguration
+ .from(Cluster.class, Job.class)
+ .withSecondaryToPrimaryMapper(cluster ->
+ context.getPrimaryCache()
+ .list()
+ .filter(job -> job.getSpec().getClusterName().equals(cluster.getMetadata().getName()))
+ .map(ResourceID::fromResource)
+ .collect(Collectors.toSet()))
+```
+
+This configuration will trigger all related `Jobs` when the associated cluster changes and maintains the `PrimaryToSecondaryIndex`,
+allowing us to use `getSecondaryResources` in the `Job` reconciler to access the cluster.
+However, there's a potential issue: when a new `Job` is created, it doesn't automatically propagate
+to the `PrimaryToSecondaryIndex` in the `Cluster`'s `InformerEventSource`. Re-indexing only occurs
+when a `Cluster` event is received, which triggers all related `Jobs` again.
+Until this re-indexing happens, you cannot use `getSecondaryResources` for the new `Job`, since it
+won't be present in the reverse index.
+
+You can work around this by accessing the Cluster directly from the cache in the reconciler:
+
+```java
+
+@Override
+public UpdateControl reconcile(Job resource, Context context) {
+
+ clusterInformer.get(new ResourceID(job.getSpec().getClusterName(), job.getMetadata().getNamespace()));
+
+ // omitted details
+}
+```
+
+However, if you prefer to use the unified API (`context.getSecondaryResources()`), you need to add
+a `PrimaryToSecondaryMapper`:
+
+```java
+clusterInformer.withPrimaryToSecondaryMapper( job ->
+ Set.of(new ResourceID(job.getSpec().getClusterName(), job.getMetadata().getNamespace())));
+```
+
+When using `PrimaryToSecondaryMapper`, the InformerEventSource bypasses the `PrimaryToSecondaryIndex`
+and instead calls the mapper to retrieve resources based on its results.
+In fact, when this mapper is configured, the `PrimaryToSecondaryIndex` isn't even initialized.
+
+### Using Informer Indexes to Improve Performance
+
+In the `SecondaryToPrimaryMapper` example above, we iterate through all resources in the cache:
+
+```java
+context.getPrimaryCache().list().filter(job -> job.getSpec().getClusterName().equals(cluster.getMetadata().getName()))
+```
+
+This approach can be inefficient when dealing with a large number of primary (`Job`) resources. To improve performance,
+you can create an index in the underlying Informer that indexes the target jobs for each cluster:
+
+```java
+
+@Override
+public List> prepareEventSources(EventSourceContext context) {
+
+ context.getPrimaryCache()
+ .addIndexer(JOB_CLUSTER_INDEX,
+ (job -> List.of(indexKey(job.getSpec().getClusterName(), job.getMetadata().getNamespace()))));
+
+ // omitted details
+}
+```
+
+where `indexKey` is a String that uniquely identifies a Cluster:
+
+```java
+private String indexKey(String clusterName, String namespace) {
+ return clusterName + "#" + namespace;
+}
+```
+
+With this index in place, you can retrieve the target resources very efficiently:
+
+```java
+
+ InformerEventSource clusterInformer =
+ new InformerEventSource(
+ InformerEventSourceConfiguration.from(Cluster.class, Job.class)
+ .withSecondaryToPrimaryMapper(
+ cluster ->
+ context
+ .getPrimaryCache()
+ .byIndex(
+ JOB_CLUSTER_INDEX,
+ indexKey(
+ cluster.getMetadata().getName(),
+ cluster.getMetadata().getNamespace()))
+ .stream()
+ .map(ResourceID::fromResource)
+ .collect(Collectors.toSet()))
+ .withNamespacesInheritedFromController().build(), context);
+```
diff --git a/docs/content/en/docs/faq/_index.md b/docs/content/en/docs/faq/_index.md
new file mode 100644
index 0000000000..977a725b0d
--- /dev/null
+++ b/docs/content/en/docs/faq/_index.md
@@ -0,0 +1,162 @@
+---
+title: FAQ
+weight: 90
+---
+
+## Events and Reconciliation
+
+### How can I access the events that triggered reconciliation?
+
+In v1.* versions, events were exposed to `Reconciler` (then called `ResourceController`). This included custom resource events (Create, Update) and events from Event Sources. After extensive discussions with golang controller-runtime developers, we decided to remove event access.
+
+**Why this change was made:**
+- Events can be lost in distributed systems
+- Best practice is to reconcile all resources on every execution
+- Aligns with Kubernetes [level-based](https://cloud.redhat.com/blog/kubernetes-operators-best-practices) reconciliation approach
+
+**Recommendation**: Always reconcile all resources instead of relying on specific events.
+
+### Can I reschedule a reconciliation with a specific delay?
+
+Yes, you can reschedule reconciliation using [`UpdateControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java) and [`DeleteControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DeleteControl.java).
+
+**With status update:**
+```java
+@Override
+public UpdateControl reconcile(
+ EventSourceTestCustomResource resource, Context context) {
+ // ... reconciliation logic
+ return UpdateControl.patchStatus(resource).rescheduleAfter(10, TimeUnit.SECONDS);
+}
+```
+
+**Without an update:**
+```java
+@Override
+public UpdateControl reconcile(
+ EventSourceTestCustomResource resource, Context context) {
+ // ... reconciliation logic
+ return UpdateControl.noUpdate().rescheduleAfter(10, TimeUnit.SECONDS);
+}
+```
+
+**Note**: Consider using `EventSources` for smarter reconciliation triggering instead of time-based scheduling.
+
+### How can I make status updates trigger reconciliation?
+
+By default, the framework filters out events that don't increase the `generation` field of the primary resource's metadata. Since `generation` typically only increases when the `.spec` field changes, status-only changes won't trigger reconciliation.
+
+To change this behavior, set [`generationAwareEventProcessing`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java#L43) to `false`:
+
+```java
+@ControllerConfiguration(generationAwareEventProcessing = false)
+static class TestCustomReconciler implements Reconciler {
+ @Override
+ public UpdateControl reconcile(
+ TestCustomResource resource, Context context) {
+ // reconciliation logic
+ }
+}
+```
+
+For secondary resources, every change should trigger reconciliation by default, except when you add explicit filters or use dependent resource implementations that filter out self-triggered changes. See [related docs](../documentation/dependent-resource-and-workflows/dependent-resources.md#caching-and-event-handling-in-kubernetesdependentresource).
+
+## Permissions and Access Control
+
+### How can I run an operator without cluster-scope rights?
+
+By default, JOSDK requires cluster-scope access to custom resources. Without these rights, you'll see startup errors like:
+
+```plain
+io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://kubernetes.local.svc/apis/mygroup/v1alpha1/mycr. Message: Forbidden! Configured service account doesn't have access. Service account may have been revoked. mycrs.mygroup is forbidden: User "system:serviceaccount:ns:sa" cannot list resource "mycrs" in API group "mygroup" at the cluster scope.
+```
+
+**Solution 1: Restrict to specific namespaces**
+
+Override watched namespaces using [Reconciler-level configuration](../configuration.md#reconciler-level-configuration):
+
+```java
+Operator operator;
+Reconciler reconciler;
+// ...
+operator.register(reconciler, configOverrider ->
+ configOverrider.settingNamespace("mynamespace"));
+```
+
+**Note**: You can also configure watched namespaces using the `@ControllerConfiguration` annotation.
+
+**Solution 2: Disable CRD validation**
+
+If you can't list CRDs at startup (required when `checkingCRDAndValidateLocalModel` is `true`), disable it using [Operator-level configuration](../configuration#operator-level-configuration):
+
+```java
+Operator operator = new Operator(override -> override.checkingCRDAndValidateLocalModel(false));
+```
+
+## State Management
+
+### Where should I store generated IDs for external resources?
+
+When managing external (non-Kubernetes) resources, they often have generated IDs that aren't simply addressable based on your custom resource spec. You need to store these IDs for subsequent reconciliations.
+
+**Storage Options:**
+1. **Separate resource** (usually ConfigMap, Secret, or dedicated CustomResource)
+2. **Custom resource status field**
+
+**Important considerations:**
+
+Both approaches require guaranteeing resources are cached for the next reconciliation. If you patch status at the end of reconciliation (`UpdateControl.patchStatus(...)`), the fresh resource isn't guaranteed to be available during the next reconciliation. Controllers typically cache updated status in memory to ensure availability.
+
+**Modern solution**: From version 5.1, use [this utility](../documentation/reconciler.md#making-sure-the-primary-resource-is-up-to-date-for-the-next-reconciliation) to ensure updated status is available for the next reconciliation.
+
+**Dependent Resources**: This feature supports [the first approach](../documentation/dependent-resource-and-workflows/dependent-resources.md#external-state-tracking-dependent-resources) natively.
+
+## Advanced Use Cases
+
+### How can I skip the reconciliation of a dependent resource?
+
+Skipping workflow reconciliation altogether is possible with the explicit invocation feature since v5. You can read more about this in [v5 release notes](https://javaoperatorsdk.io/blog/2025/01/06/version-5-released/#explicit-workflow-invocation).
+
+However, what if you want to avoid reconciling a single dependent resource based on some state? First, remember that the dependent resource won't be modified if the desired state and actual state match. Moreover, it's generally good practice to reconcile all your resources, with JOSDK taking care of only processing resources whose state doesn't match the desired one.
+
+However, in some corner cases (for example, if it's expensive to compute the desired state or compare it to the actual state), it's sometimes useful to skip the reconciliation of some resources but not all, if it's known that they don't need processing based on the status of the custom resource.
+
+A common mistake is to use `ReconcilePrecondition`. If the condition doesn't hold, it will delete the resources. This is by design (although the name might be misleading), but not what we want in this case.
+
+The correct approach is to override the matcher in the dependent resource:
+
+```java
+public Result match(R actualResource, R desired, P primary, Context context) {
+ if (alreadyIsCertainState(primary.getStatus())) {
+ return true;
+ } else {
+ return super.match(actual, desired, primary, context);
+ }
+}
+```
+
+This ensures the dependent resource isn't updated if the primary resource is in a certain state.
+
+## Troubleshooting
+
+### How to fix SSL certificate issues with Rancher Desktop and k3d/k3s
+
+This is a common issue when using k3d and the fabric8 client tries to connect to the cluster:
+
+```
+Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
+ at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
+ at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:352)
+ at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:295)
+```
+
+**Cause**: The fabric8 kubernetes client doesn't handle elliptical curve encryption by default.
+
+**Solution**: Add the following dependency to your classpath:
+
+```xml
+
+ org.bouncycastle
+ bcpkix-jdk15on
+
+```
diff --git a/docs/content/en/docs/getting-started/_index.md b/docs/content/en/docs/getting-started/_index.md
new file mode 100644
index 0000000000..df8a4b77fe
--- /dev/null
+++ b/docs/content/en/docs/getting-started/_index.md
@@ -0,0 +1,4 @@
+---
+title: Getting started
+weight: 10
+---
\ No newline at end of file
diff --git a/docs/content/en/docs/getting-started/bootstrap-and-samples.md b/docs/content/en/docs/getting-started/bootstrap-and-samples.md
new file mode 100644
index 0000000000..d0d94f860d
--- /dev/null
+++ b/docs/content/en/docs/getting-started/bootstrap-and-samples.md
@@ -0,0 +1,95 @@
+---
+title: Bootstrapping and samples
+weight: 20
+---
+
+## Creating a New Operator Project
+
+### Using the Maven Plugin
+
+The simplest way to start a new operator project is using the provided Maven plugin, which generates a complete project skeleton:
+
+```shell
+mvn io.javaoperatorsdk:bootstrapper:[version]:create \
+ -DprojectGroupId=org.acme \
+ -DprojectArtifactId=getting-started
+```
+
+This command creates a new Maven project with:
+- A basic operator implementation
+- Maven configuration with required dependencies
+- Generated [CustomResourceDefinition](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) (CRD)
+
+### Building Your Project
+
+Build the generated project with Maven:
+```shell
+mvn clean install
+```
+
+The build process automatically generates the CustomResourceDefinition YAML file that you'll need to apply to your Kubernetes cluster.
+
+## Exploring Sample Operators
+
+The [sample-operators](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/sample-operators) directory contains real-world examples demonstrating different JOSDK features and patterns:
+
+### Available Samples
+
+**[webpage](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/sample-operators/webpage)**
+- **Purpose**: Creates NGINX webservers from Custom Resources containing HTML code
+- **Key Features**: Multiple implementation approaches using both low-level APIs and higher-level abstractions
+- **Good for**: Understanding basic operator concepts and API usage patterns
+
+**[mysql-schema](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/sample-operators/mysql-schema)**
+- **Purpose**: Manages database schemas in MySQL instances
+- **Key Features**: Demonstrates managing non-Kubernetes resources (external systems)
+- **Good for**: Learning how to integrate with external services and manage state outside Kubernetes
+
+**[tomcat](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/sample-operators/tomcat)**
+- **Purpose**: Manages Tomcat instances and web applications
+- **Key Features**: Multiple controllers managing related custom resources
+- **Good for**: Understanding complex operators with multiple resource types and relationships
+
+## Running the Samples
+
+### Prerequisites
+
+The easiest way to try samples is using a local Kubernetes cluster:
+- [minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/)
+- [kind](https://kind.sigs.k8s.io/)
+- [Docker Desktop with Kubernetes](https://docs.docker.com/desktop/kubernetes/)
+
+### Step-by-Step Instructions
+
+1. **Apply the CustomResourceDefinition**:
+ ```shell
+ kubectl apply -f target/classes/META-INF/fabric8/[resource-name]-v1.yml
+ ```
+
+2. **Run the operator**:
+ ```shell
+ mvn exec:java -Dexec.mainClass="your.main.ClassName"
+ ```
+ Or run your main class directly from your IDE.
+
+3. **Create custom resources**:
+ The operator will automatically detect and reconcile custom resources when you create them:
+ ```shell
+ kubectl apply -f examples/sample-resource.yaml
+ ```
+
+### Detailed Examples
+
+For comprehensive setup instructions and examples, see:
+- [MySQL Schema sample README](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/mysql-schema/README.md)
+- Individual sample directories for specific setup requirements
+
+## Next Steps
+
+After exploring the samples:
+1. Review the [patterns and best practices](../patterns-best-practices) guide
+2. Learn about [implementing reconcilers](../../documentation/reconciler)
+3. Explore [dependent resources and workflows](../../documentation/dependent-resource-and-workflows) for advanced use cases
+
+
+
diff --git a/docs/content/en/docs/getting-started/intro-to-operators.md b/docs/content/en/docs/getting-started/intro-to-operators.md
new file mode 100644
index 0000000000..2879f00db9
--- /dev/null
+++ b/docs/content/en/docs/getting-started/intro-to-operators.md
@@ -0,0 +1,33 @@
+---
+title: Introduction to Kubernetes operators
+weight: 15
+---
+
+## What are Kubernetes Operators?
+
+Kubernetes operators are software extensions that manage both cluster and non-cluster resources on behalf of Kubernetes. The Java Operator SDK (JOSDK) makes it easy to implement Kubernetes operators in Java, with APIs designed to feel natural to Java developers and framework handling of common problems so you can focus on your business logic.
+
+## Why Use Java Operator SDK?
+
+JOSDK provides several key advantages:
+
+- **Java-native APIs** that feel familiar to Java developers
+- **Automatic handling** of common operator challenges (caching, event handling, retries)
+- **Production-ready features** like observability, metrics, and error handling
+- **Simplified development** so you can focus on business logic instead of Kubernetes complexities
+
+## Learning Resources
+
+### Getting Started
+- [Introduction to Kubernetes operators](https://blog.container-solutions.com/kubernetes-operators-explained) - Core concepts explained
+- [Implementing Kubernetes Operators in Java](https://www.youtube.com/watch?v=CvftaV-xrB4) - Introduction talk
+- [Kubernetes operator pattern documentation](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) - Official Kubernetes docs
+
+### Deep Dives
+- [Problems JOSDK solves](https://blog.container-solutions.com/a-deep-dive-into-the-java-operator-sdk) - Technical deep dive
+- [Why Java operators make sense](https://blog.container-solutions.com/cloud-native-java-infrastructure-automation-with-kubernetes-operators) - Java in cloud-native infrastructure
+- [Building a Kubernetes operator SDK for Java](https://csviri.medium.com/deep-dive-building-a-kubernetes-operator-sdk-for-java-developers-5008218822cb) - Framework design principles
+
+### Tutorials
+- [Writing Kubernetes operators using JOSDK](https://developers.redhat.com/articles/2022/02/15/write-kubernetes-java-java-operator-sdk) - Step-by-step blog series
+
diff --git a/docs/content/en/docs/getting-started/patterns-best-practices.md b/docs/content/en/docs/getting-started/patterns-best-practices.md
new file mode 100644
index 0000000000..f092d48971
--- /dev/null
+++ b/docs/content/en/docs/getting-started/patterns-best-practices.md
@@ -0,0 +1,118 @@
+---
+title: Patterns and best practices
+weight: 25
+---
+
+This document describes patterns and best practices for building and running operators, and how to implement them using the Java Operator SDK (JOSDK).
+
+See also best practices in the [Operator SDK](https://sdk.operatorframework.io/docs/best-practices/best-practices/).
+
+## Implementing a Reconciler
+
+### Always Reconcile All Resources
+
+Reconciliation can be triggered by events from multiple sources. It might be tempting to check the events and only reconcile the related resource or subset of resources that the controller manages. However, this is **considered an anti-pattern** for operators.
+
+**Why this is problematic:**
+- Kubernetes' distributed nature makes it difficult to ensure all events are received
+- If your operator misses some events and doesn't reconcile the complete state, it might operate with incorrect assumptions about the cluster state
+- Always reconcile all resources, regardless of the triggering event
+
+JOSDK makes this efficient by providing smart caches to avoid unnecessary Kubernetes API server access and ensuring your reconciler is triggered only when needed.
+
+Since there's industry consensus on this topic, JOSDK no longer provides event access from `Reconciler` implementations starting with version 2.
+
+### Event Sources and Caching
+
+During reconciliation, best practice is to reconcile all dependent resources managed by the controller. This means comparing the desired state with the actual cluster state.
+
+**The Challenge**: Reading the actual state directly from the Kubernetes API Server every time would create significant load.
+
+**The Solution**: Create a watch for dependent resources and cache their latest state using the Informer pattern. In JOSDK, informers are wrapped into `EventSource` to integrate with the framework's eventing system via the `InformerEventSource` class.
+
+**How it works**:
+- New events trigger reconciliation only when the resource is already cached
+- Reconciler implementations compare desired state with cached observed state
+- If a resource isn't in cache, it needs to be created
+- If actual state doesn't match desired state, the resource needs updating
+
+### Idempotency
+
+Since all resources should be reconciled when your `Reconciler` is triggered, and reconciliations can be triggered multiple times for any given resource (especially with retry policies), it's crucial that `Reconciler` implementations be **idempotent**.
+
+**Idempotency means**: The same observed state should always result in exactly the same outcome.
+
+**Key implications**:
+- Operators should generally operate in a stateless fashion
+- Since operators usually manage declarative resources, ensuring idempotency is typically straightforward
+
+### Synchronous vs Asynchronous Resource Handling
+
+Sometimes your reconciliation logic needs to wait for resources to reach their desired state (e.g., waiting for a `Pod` to become ready). You can approach this either synchronously or asynchronously.
+
+#### Asynchronous Approach (Recommended)
+
+Exit the reconciliation logic as soon as the `Reconciler` determines it cannot complete at this point. This frees resources to process other events.
+
+**Requirements**: Set up adequate event sources to monitor state changes of all resources the operator waits for. When state changes occur, the `Reconciler` is triggered again and can finish processing.
+
+#### Synchronous Approach
+
+Periodically poll resources' state until they reach the desired state. If done within the `reconcile` method, this blocks the current thread for potentially long periods.
+
+**Recommendation**: Use the asynchronous approach for better resource utilization.
+
+## Why Use Automatic Retries?
+
+Automatic retries are enabled by default and configurable. While you can deactivate this feature, we advise against it.
+
+**Why retries are important**:
+- **Transient network errors**: Common in Kubernetes' distributed environment, easily resolved with retries
+- **Resource conflicts**: When multiple actors modify resources simultaneously, conflicts can be resolved by reconciling again
+- **Transparency**: Automatic retries make error handling completely transparent when successful
+
+## Managing State
+
+Thanks to Kubernetes resources' declarative nature, operators dealing only with Kubernetes resources can operate statelessly. They don't need to maintain resource state information since it should be possible to rebuild the complete resource state from its representation.
+
+### When State Management Becomes Necessary
+
+This stateless approach typically breaks down when dealing with external resources. You might need to track external state or allocated
+values for future reconciliations. There are multiple options:
+
+
+1. Putting state in the primary resource's status sub-resource. This is a bit more complex that might seem at the first look.
+ Refer to the [documentation](../documentation/reconciler.md#making-sure-the-primary-resource-is-up-to-date-for-the-next-reconciliation)
+ for further details.
+
+2. Store state in separate resources designed for this purpose:
+- Kubernetes Secret or ConfigMap
+- Dedicated Custom Resource with validated structure
+
+## Handling Informer Errors and Cache Sync Timeouts
+
+You can [configure](https://github.com/java-operator-sdk/java-operator-sdk/blob/2cb616c4c4fd0094ee6e3a0ef2a0ea82173372bf/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L168-L168) whether the operator should stop when informer errors occur on startup.
+
+### Default Behavior
+By default, if there's a startup error (e.g., the informer lacks permissions to list target resources for primary or secondary resources), the operator stops immediately.
+
+### Alternative Configuration
+Set the flag to `false` to start the operator even when some informers fail to start. In this case:
+- The operator continuously retries connection with exponential backoff
+- This applies both to startup failures and runtime problems
+- The operator only stops for fatal errors (currently when a resource cannot be deserialized)
+
+**Use case**: When watching multiple namespaces, it's better to start the operator so it can handle other namespaces while resolving permission issues in specific namespaces.
+
+### Cache Sync Timeout Impact
+The `stopOnInformerErrorDuringStartup` setting affects [cache sync timeout](https://github.com/java-operator-sdk/java-operator-sdk/blob/114c4312c32b34688811df8dd7cea275878c9e73/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L177-L179) behavior:
+- **If `true`**: Operator stops on cache sync timeout
+- **If `false`**: After timeout, the controller starts reconciling resources even if some event source caches haven't synced yet
+
+## Graceful Shutdown
+
+You can provide sufficient time for the reconciler to process and complete ongoing events before shutting down. Simply set an appropriate duration value for `reconciliationTerminationTimeout` using `ConfigurationServiceOverrider`.
+
+```java
+final var operator = new Operator(override -> override.withReconciliationTerminationTimeout(Duration.ofSeconds(5)));
+```
diff --git a/docs/content/en/docs/glossary/_index.md b/docs/content/en/docs/glossary/_index.md
new file mode 100644
index 0000000000..282a98d4df
--- /dev/null
+++ b/docs/content/en/docs/glossary/_index.md
@@ -0,0 +1,12 @@
+---
+title: Glossary
+weight: 100
+---
+
+- **Primary Resource** - The resource representing the desired state that the controller works to achieve. While often a Custom Resource, it can also be a native Kubernetes resource (Deployment, ConfigMap, etc.).
+
+- **Secondary Resource** - Any resource the controller needs to manage to reach the desired state represented by the primary resource. These can be created, updated, deleted, or simply read depending on the use case. For example, the `Deployment` controller manages `ReplicaSet` instances to realize the state represented by the `Deployment`. Here, `Deployment` is the primary resource while `ReplicaSet` is a secondary resource.
+
+- **Dependent Resource** - A JOSDK feature that makes managing secondary resources easier. A dependent resource represents a secondary resource with associated reconciliation logic.
+
+- **Low-level API** - SDK APIs that don't use features beyond the core [`Reconciler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java) interface (such as Dependent Resources or Workflows). See the [WebPage sample](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java). The same logic is also implemented using [Dependent Resource and Workflows](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java).
\ No newline at end of file
diff --git a/docs/content/en/docs/migration/_index.md b/docs/content/en/docs/migration/_index.md
new file mode 100644
index 0000000000..115adab35d
--- /dev/null
+++ b/docs/content/en/docs/migration/_index.md
@@ -0,0 +1,5 @@
+---
+title: Migrations
+weight: 150
+---
+
diff --git a/docs/documentation/v2-migration.md b/docs/content/en/docs/migration/v2-migration.md
similarity index 98%
rename from docs/documentation/v2-migration.md
rename to docs/content/en/docs/migration/v2-migration.md
index 4500672308..5b0ef31c45 100644
--- a/docs/documentation/v2-migration.md
+++ b/docs/content/en/docs/migration/v2-migration.md
@@ -1,12 +1,9 @@
---
title: Migrating from v1 to v2
-description: Migrating from v1 to v2
layout: docs
permalink: /docs/v2-migration
---
-# Migrating from v1 to v2
-
Version 2 of the framework introduces improvements, features and breaking changes for the APIs both
internal and user facing ones. The migration should be however trivial in most of the cases. For
detailed overview of all major issues until the release of
diff --git a/docs/content/en/docs/migration/v3-1-migration.md b/docs/content/en/docs/migration/v3-1-migration.md
new file mode 100644
index 0000000000..b4b42d9a5e
--- /dev/null
+++ b/docs/content/en/docs/migration/v3-1-migration.md
@@ -0,0 +1,44 @@
+---
+title: Migrating from v3 to v3.1
+layout: docs
+permalink: /docs/v3-1-migration
+---
+
+## ReconciliationMaxInterval Annotation has been renamed to MaxReconciliationInterval
+
+Associated methods on both the `ControllerConfiguration` class and annotation have also been
+renamed accordingly.
+
+## Workflows Impact on Managed Dependent Resources Behavior
+
+Version 3.1 comes with a workflow engine that replaces the previous behavior of managed dependent
+resources.
+See [Workflows documentation](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/workflows/) for further details.
+The primary impact after upgrade is a change of the order in which managed dependent resources
+are reconciled. They are now reconciled in parallel with optional ordering defined using the
+['depends_on'](https://github.com/java-operator-sdk/java-operator-sdk/blob/df44917ef81725c10bbcb772ab7b434d511b13b9/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Dependent.java#L23-L23)
+relation to define order between resources if needed. In v3, managed dependent resources were
+implicitly reconciled in the order they were defined in.
+
+## Garbage Collected Kubernetes Dependent Resources
+
+In version 3 all Kubernetes Dependent Resource
+implementing [`Deleter`](https://github.com/java-operator-sdk/java-operator-sdk/blob/bd063ccb7d55c110e96f24d2a10860d10aedfdb6/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Deleter.java#L13-L13)
+interface were meant to be also using owner references (thus garbage collected by Kubernetes).
+In 3.1 there is a
+dedicated [`GarbageCollected`](https://github.com/java-operator-sdk/java-operator-sdk/blob/bd063ccb7d55c110e96f24d2a10860d10aedfdb6/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/GarbageCollected.java#L28-L28)
+interface to distinguish between Kubernetes resources meant to be garbage collected or explicitly
+deleted. Please refer also to the `GarbageCollected` javadoc for more details on how this
+impacts how owner references are managed.
+
+The supporting classes were also updated. Instead
+of [`CRUKubernetesDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/d99f65a736e9180e3f6de9a4239f80e47fc653fc/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUKubernetesDependentResource.java)
+there are two:
+
+- [`CRUDKubernetesDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/bd063ccb7d55c110e96f24d2a10860d10aedfdb6/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDKubernetesDependentResource.java)
+ that is `GarbageCollected`
+- [`CRUDNoGCKubernetesDependentResource`](https://github.com/java-operator-sdk/java-operator-sdk/blob/bd063ccb7d55c110e96f24d2a10860d10aedfdb6/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java)
+ what is `Deleter` but not `GarbageCollected`
+
+Use the one according to your use case. We anticipate that most people would want to use
+`CRUDKubernetesDependentResource` whenever they have to work with Kubernetes dependent resources.
\ No newline at end of file
diff --git a/docs/content/en/docs/migration/v3-migration.md b/docs/content/en/docs/migration/v3-migration.md
new file mode 100644
index 0000000000..462ab26f9f
--- /dev/null
+++ b/docs/content/en/docs/migration/v3-migration.md
@@ -0,0 +1,37 @@
+---
+title: Migrating from v2 to v3
+layout: docs
+permalink: /docs/v3-migration
+---
+
+Version 3 introduces some breaking changes to APIs, however the migration to these changes should be trivial.
+
+## Reconciler
+
+- [`Reconciler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/67d8e25c26eb92392c6d2a9eb39ea6dddbbfafcc/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java#L16-L16)
+ can throw checked exception (not just runtime exception), and that also can be handled by `ErrorStatusHandler`.
+- `cleanup` method is extracted from the `Reconciler` interface to a
+ separate [`Cleaner`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java)
+ interface. Finalizers only makes sense that the `Cleanup` is implemented, from
+ now finalizer is only added if the `Reconciler` implements this interface (or has managed dependent resources
+ implementing `Deleter` interface, see dependent resource docs).
+- [`Context`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java#L9-L9)
+ object of `Reconciler` now takes the Primary resource as parametrized type: `Context`.
+- [`ErrorStatusHandler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/67d8e25c26eb92392c6d2a9eb39ea6dddbbfafcc/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ErrorStatusHandler.java)
+ result changed, it functionally has been extended to now prevent Exception to be retried and handles checked
+ exceptions as mentioned above.
+
+
+## Event Sources
+
+- Event Sources are now registered with a name. But [utility method](https://github.com/java-operator-sdk/java-operator-sdk/blob/92bfafd8831e5fb9928663133f037f1bf4783e3e/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java#L33-L33)
+ is available to make it easy to [migrate](https://github.com/java-operator-sdk/java-operator-sdk/blob/92bfafd8831e5fb9928663133f037f1bf4783e3e/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java#L51-L52)
+ to a default name.
+- [InformerEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/92bfafd8831e5fb9928663133f037f1bf4783e3e/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java#L75-L75)
+ constructor changed to reflect additional functionality in a non backwards compatible way. All the configuration
+ options from the constructor where moved to [`InformerConfiguration`](https://github.com/java-operator-sdk/java-operator-sdk/blob/f6c6d568ea0a098e11beeeded20fe70f9c5bf692/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java)
+ . See sample usage in [`WebPageReconciler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/f6c6d568ea0a098e11beeeded20fe70f9c5bf692/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java#L56-L59)
+ .
+- `PrimaryResourcesRetriever` was renamed to `SecondaryToPrimaryMapper`
+- `AssociatedSecondaryResourceIdentifier` was renamed to `PrimaryToSecondaryMapper`
+- `getAssociatedResource` is now renamed to get `getSecondaryResource` in multiple places
\ No newline at end of file
diff --git a/docs/content/en/docs/migration/v4-3-migration.md b/docs/content/en/docs/migration/v4-3-migration.md
new file mode 100644
index 0000000000..e9fd58c5f8
--- /dev/null
+++ b/docs/content/en/docs/migration/v4-3-migration.md
@@ -0,0 +1,47 @@
+---
+title: Migrating from v4.2 to v4.3
+layout: docs
+permalink: /docs/v4-3-migration
+---
+
+## Condition API Change
+
+In Workflows the target of the condition was the managed resource itself, not the target dependent resource.
+This changed, now the API contains the dependent resource.
+
+New API:
+
+```java
+public interface Condition {
+
+ boolean isMet(DependentResource dependentResource, P primary, Context context);
+
+}
+```
+
+Former API:
+
+```java
+public interface Condition {
+
+ boolean isMet(P primary, R secondary, Context context);
+
+}
+```
+
+Migration is trivial. Since the secondary resource can be accessed from the dependent resource. So to access the
+secondary
+resource just use `dependentResource.getSecondaryResource(primary,context)`.
+
+## HTTP client choice
+
+It is now possible to change the HTTP client used by the Fabric8 client to communicate with the Kubernetes API server.
+By default, the SDK uses the historical default HTTP client which relies on Okhttp and there shouldn't be anything
+needed to keep using this implementation. The `tomcat-operator` sample has been migrated to use the Vert.X based
+implementation. You can see how to change the client by looking at
+that [sample POM file](https://github.com/java-operator-sdk/java-operator-sdk/blob/d259fcd084f7e22032dfd0df3c7e64fe68850c1b/sample-operators/tomcat-operator/pom.xml#L37-L50):
+
+- You need to exclude the default implementation (in this case okhttp) from the `operator-framework` dependency
+- You need to add the appropriate implementation dependency, `kubernetes-httpclient-vertx` in this case, HTTP client
+ implementations provided as part of the Fabric8 client all following the `kubernetes-httpclient-`
+ pattern for their artifact identifier.
\ No newline at end of file
diff --git a/docs/content/en/docs/migration/v4-4-migration.md b/docs/content/en/docs/migration/v4-4-migration.md
new file mode 100644
index 0000000000..913c08b843
--- /dev/null
+++ b/docs/content/en/docs/migration/v4-4-migration.md
@@ -0,0 +1,90 @@
+---
+title: Migrating from v4.3 to v4.4
+layout: docs
+permalink: /docs/v4-4-migration
+---
+
+## API changes
+
+### ConfigurationService
+
+We have simplified how to deal with the Kubernetes client. Previous versions provided direct
+access to underlying aspects of the client's configuration or serialization mechanism. However,
+the link between these aspects wasn't as explicit as it should have been. Moreover, the Fabric8
+client framework has also revised their serialization architecture in the 6.7 version (see [this
+fabric8 pull request](https://github.com/fabric8io/kubernetes-client/pull/4662) for a discussion of
+that change), moving from statically configured serialization to a per-client configuration
+(though it's still possible to share serialization mechanism between client instances). As a
+consequence, we made the following changes to the `ConfigurationService` API:
+
+- Replaced `getClientConfiguration` and `getObjectMapper` methods by a new `getKubernetesClient`
+ method: instead of providing the configuration and mapper, you now provide a client instance
+ configured according to your needs and the SDK will extract the needed information from it
+
+If you had previously configured a custom configuration or `ObjectMapper`, it is now recommended
+that you do so when creating your client instance, as follows, usually using
+`ConfigurationServiceOverrider.withKubernetesClient`:
+
+```java
+
+class Example {
+
+ public static void main(String[] args) {
+ Config config; // your configuration
+ ObjectMapper mapper; // your mapper
+ final var operator = new Operator(overrider -> overrider.withKubernetesClient(
+ new KubernetesClientBuilder()
+ .withConfig(config)
+ .withKubernetesSerialization(new KubernetesSerialization(mapper, true))
+ .build()
+ ));
+ }
+}
+```
+
+Consequently, it is now recommended to get the client instance from the `ConfigurationService`.
+
+### Operator
+
+It is now recommended to configure your Operator instance by using a
+`ConfigurationServiceOverrider` when creating it. This allows you to change the default
+configuration values as needed. In particular, instead of passing a Kubernetes client instance
+explicitly to the Operator constructor, it is now recommended to provide that value using
+`ConfigurationServiceOverrider.withKubernetesClient` as shown above.
+
+## Using Server-Side Apply in Dependent Resources
+
+From this version by
+default [Dependent Resources](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/) use
+[Server Side Apply (SSA)](https://kubernetes.io/docs/reference/using-api/server-side-apply/) to
+create and
+update Kubernetes resources. A
+new [default matching](https://github.com/java-operator-sdk/java-operator-sdk/blob/2cc3bb7710adb8fca14767fbff8d93533dd05ef0/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java#L157-L157)
+algorithm is provided for `KubernetesDependentResource` that is based on `managedFields` of SSA. For
+details
+see [SSABasedGenericKubernetesResourceMatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java)
+
+Since those features are hard to completely test, we provided feature flags to revert to the
+legacy behavior if needed,
+see
+in [ConfigurationService](https://github.com/java-operator-sdk/java-operator-sdk/blob/2cc3bb7710adb8fca14767fbff8d93533dd05ef0/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L332-L347)
+
+Note that it is possible to override the related methods/behavior on class level when extending
+the `KubernetesDependentResource`.
+
+The SSA based create/update can be combined with the legacy matcher, simply override the `match` method
+and use the [GenericKubernetesResourceMatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java#L19-L19)
+directly. See related [sample](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/ssalegacymatcher/ServiceDependentResource.java#L39-L44).
+
+### Migration from plain Update/Create to SSA Based Patch
+
+Migration to SSA might not be trivial based on the uses cases and the type of managed resources.
+In general this is not a solved problem is Kubernetes. The Java Operator SDK Team tries to follow
+the related issues, but in terms of implementation this is not something that the framework explicitly
+supports. Thus, no code is added that tries to mitigate related issues. Users should thoroughly
+test the migration, and even consider not to migrate in some cases (see feature flags above).
+
+See some related issues in [kubernetes](https://github.com/kubernetes/kubernetes/issues/118725) or
+[here](https://github.com/keycloak/keycloak/pull). Please create related issue in JOSDK if any.
+
+
diff --git a/docs/content/en/docs/migration/v4-5-migration.md b/docs/content/en/docs/migration/v4-5-migration.md
new file mode 100644
index 0000000000..42e78d76dc
--- /dev/null
+++ b/docs/content/en/docs/migration/v4-5-migration.md
@@ -0,0 +1,23 @@
+---
+title: Migrating from v4.4 to v4.5
+layout: docs
+permalink: /docs/v4-5-migration
+---
+
+Version 4.5 introduces improvements related to event handling for Dependent Resources, more precisely the
+[caching and event handling](https://javaoperatorsdk.io/docs/documentation/dependent-resource-and-workflows/dependent-resources/#caching-and-event-handling-in-kubernetesdependentresource)
+features. As a result the Kubernetes resources managed using
+[KubernetesDependentResource](https://github.com/java-operator-sdk/java-operator-sdk/blob/73b1d8db926a24502c3a70da34f6bcac4f66b4eb/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java#L72-L72)
+or its subclasses, will add an annotation recording the resource's version whenever JOSDK updates or creates such
+resources. This can be turned off using a
+[feature flag](https://github.com/java-operator-sdk/java-operator-sdk/blob/73b1d8db926a24502c3a70da34f6bcac4f66b4eb/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L375-L375)
+if causes some issues in your use case.
+
+Using this feature, JOSDK now tracks versions of cached resources. It also uses, by default, that information to prevent
+unneeded reconciliations that could occur when, depending on the timing of operations, an outdated resource would happen
+to be in the cache. This relies on the fact that versions (as recorded by the `metadata.resourceVersion` field) are
+currently implemented as monotonically increasing integers (though they should be considered as opaque and their
+interpretation discouraged). Note that, while this helps preventing unneeded reconciliations, things would eventually
+reach consistency even in the absence of this feature. Also, if this interpreting of the resource versions causes
+issues, you can turn the feature off using the
+[following feature flag](https://github.com/java-operator-sdk/java-operator-sdk/blob/73b1d8db926a24502c3a70da34f6bcac4f66b4eb/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L390-L390).
diff --git a/docs/content/en/docs/migration/v5-0-migration.md b/docs/content/en/docs/migration/v5-0-migration.md
new file mode 100644
index 0000000000..31b3c2ca22
--- /dev/null
+++ b/docs/content/en/docs/migration/v5-0-migration.md
@@ -0,0 +1,6 @@
+---
+title: Migrating from v4.7 to v5.0
+description: Migrating from v4.7 to v5.0
+---
+
+For migration to v5 see [this blogpost](../../blog/releases/v5-release.md).
\ No newline at end of file
diff --git a/docs/content/en/featured-background.jpg b/docs/content/en/featured-background.jpg
new file mode 100644
index 0000000000..9be72c65cf
Binary files /dev/null and b/docs/content/en/featured-background.jpg differ
diff --git a/docs/content/en/search.md b/docs/content/en/search.md
new file mode 100644
index 0000000000..394feea5fd
--- /dev/null
+++ b/docs/content/en/search.md
@@ -0,0 +1,4 @@
+---
+title: Search Results
+layout: search
+---
diff --git a/docs/content/fileList.txt b/docs/content/fileList.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/docker-compose.yaml b/docs/docker-compose.yaml
new file mode 100644
index 0000000000..9069dc0679
--- /dev/null
+++ b/docs/docker-compose.yaml
@@ -0,0 +1,13 @@
+version: "3.8"
+
+services:
+
+ site:
+ image: docsy/docsy-example
+ build:
+ context: .
+ command: server
+ ports:
+ - "1313:1313"
+ volumes:
+ - .:/src
diff --git a/docs/docsy.work b/docs/docsy.work
new file mode 100644
index 0000000000..074dc2a129
--- /dev/null
+++ b/docs/docsy.work
@@ -0,0 +1,5 @@
+go 1.19
+
+use .
+use ../docsy/ // Local docsy clone resides in sibling folder to this project
+// use ./themes/docsy/ // Local docsy clone resides in themes folder
diff --git a/docs/docsy.work.sum b/docs/docsy.work.sum
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/documentation/architecture-and-internals.md b/docs/documentation/architecture-and-internals.md
deleted file mode 100644
index 7163824a3d..0000000000
--- a/docs/documentation/architecture-and-internals.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-title: Architecture and Internals
-description: Architecture and Internals for Developers
-layout: docs
-permalink: /docs/architecture-and-internals
----
-
-# Architecture and Internals
-
-This document gives an overview of the internal structure and components of Java Operator SDK core, in order to make it
-easier for developers to understand and contribute to it. However, this is just an extract of the backbone of the core
-module, but other parts should be fairly easy to understand. We will maintain this document on developer feedback.
-
-## The Big Picture and Core Components
-
-
-
-[Operator](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java)
-is a set of
-independent [controllers](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java)
-. Controller however, is an internal class managed by the framework itself. It encapsulates directly or indirectly all
-the processing units for a single custom resource. Other components:
-
-- [EventSourceManager](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java)
- aggregates all the event sources regarding a controller. Provides starts and stops the event sources.
-- [ControllerResourceEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java)
- is a central event source that watches the controller related custom resource for changes, propagates events and
- caches the state of the custom resources. In the background from V2 it uses Informers.
-- [EventProcessor](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java)
- processes the incoming events. Implements execution serialization. Manages the executor service for execution. Also
- implements the post-processing of after the reconciler was executed, like re-schedules and retries of events.
-- [ReconcilerDispatcher](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java)
- is responsible for managing logic around reconciler execution, deciding which method should be called of the
- reconciler, managing the result
- (UpdateControl and DeleteControl), making the instructed Kubernetes API calls.
-- [Reconciler](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java)
- is the primary entry-point for the developers of the framework to implement the reconciliation logic.
-
-## Typical Workflow
-
-A typical workflows looks like following:
-
-1. An EventSource produces and event, that is propagated to the event processor.
-2. In the event processor the related `CustomResource` is read from the cache based on the `ResourceID` in the event.
-3. If there is no other execution running for the custom resource, an execution is submitted for the executor (thread
- pool) .
-4. Executor call EventDispatcher what decides which method to execute of the reconciler. Let's say in this case it
- was `reconcile(...)`
-5. After reconciler execution the Dispatcher calls Kubernetes API server, since the `reconcile` method returned
- with `UpdateControl.updateStatus(...)` result.
-6. Now the dispatcher finishes the execution and calls back `EventProcessor` to finalize the execution.
-7. EventProcessor checks if there is no `reschedule` or `retry` required and if there are no subsequent events received
- for the custom resource
-8. Neither of this happened, therefore the event execution finished.
diff --git a/docs/documentation/contributing.md b/docs/documentation/contributing.md
deleted file mode 100644
index 8e9f95fdcd..0000000000
--- a/docs/documentation/contributing.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Contributing To Java Operator SDK
-description: Contributing To Java Operator SDK
-layout: docs
-permalink: /docs/contributing
----
-# Contributing To Java Operator SDK
-
-Firstly, big thanks for considering contributing to the project. We really hope to make this into a
-community project and to do that we need your help!
-
-## Code of Conduct
-
-We are serious about making this a welcoming, happy project. We will not tolerate discrimination,
-aggressive or insulting behaviour.
-
-To this end, the project and everyone participating in it is bound by the [Code of
-Conduct]({{baseurl}}/coc). By participating, you are expected to uphold this code. Please report
-unacceptable behaviour to any of the project admins or adam.sandor@container-solutions.com.
-
-## Bugs
-
-If you find a bug, please [open an issue](https://github.com/java-operator-sdk/java-operator-sdk/issues)! Do try
-to include all the details needed to recreate your problem. This is likely to include:
-
- - The version of the Operator SDK being used
- - The exact platform and version of the platform that you're running on
- - The steps taken to cause the bug
-
-## Building Features and Documentation
-
-If you're looking for something to work on, take look at the issue tracker, in particular any items
-labelled [good first issue](https://github.com/java-operator-sdk/java-operator-sdk/labels/good%20first%20issue).
-Please leave a comment on the issue to mention that you have started work, in order to avoid
-multiple people working on the same issue.
-
-If you have an idea for a feature - whether or not you have time to work on it - please also open an
-issue describing your feature and label it "enhancement". We can then discuss it as a community and
-see what can be done. Please be aware that some features may not align with the project goals and
-might therefore be closed. In particular, please don't start work on a new feature without
-discussing it first to avoid wasting effort. We do commit to listening to all proposals and will do
-our best to work something out!
-
-Once you've got the go ahead to work on a feature, you can start work. Feel free to communicate with
-team via updates on the issue tracker or the [Discord channel](https://discord.gg/DacEhAy) and ask for feedback, pointers etc.
-Once you're happy with your code, go ahead and open a Pull Request.
-
-## Pull Request Process
-
-First, please format your commit messages so that they follow the [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) format.
-
-On opening a PR, a GitHub action will execute the test suite against the new code. All code is
-required to pass the tests, and new code must be accompanied by new tests.
-
-All PRs have to be reviewed and signed off by another developer before being merged to the master
-branch. This review will likely ask for some changes to the code - please don't be alarmed or upset
-at this; it is expected that all PRs will need tweaks and a normal part of the process.
-
-The PRs are checked to be compliant with the Java Google code style.
-
-Be aware that all Operator SDK code is released under the [Apache 2.0 licence](LICENSE).
-
-## Development environment setup
-
-### Code style
-
-The SDK modules and samples are formatted to follow the Java Google code style.
-On every `compile` the code gets formatted automatically,
-however, to make things simpler (i.e. avoid getting a PR rejected simply because of code style issues), you can import one of the following code style schemes based on the IDE you use:
-
-- for *Intellij IDEA* import [contributing/intellij-google-style.xml](contributing/intellij-google-style.xml)
-- for *Eclipse* import [contributing/eclipse-google-style.xml](contributing/eclipse-google-style.xml)
-
-## Thanks
-
-These guidelines were best on several sources, including
-[Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md), [PurpleBooth's
-advice](https://gist.github.com/PurpleBooth/b24679402957c63ec426) and the [Contributor
-Covenant](https://www.contributor-covenant.org/).
diff --git a/docs/documentation/faq.md b/docs/documentation/faq.md
deleted file mode 100644
index da9de05aaa..0000000000
--- a/docs/documentation/faq.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: FAQ
-description: Frequently asked questions
-layout: docs
-permalink: /docs/faq
----
-
-### Q: How can I access the events which triggered the Reconciliation?
-In the v1.* version events were exposed to `Reconciler` (in v1 called `ResourceController`). This
-included events (Create, Update) of the custom resource, but also events produced by Event Sources. After
-long discussions also with developers of golang version (controller-runtime), we decided to remove access to
-these events. We already advocated to not use events in the reconciliation logic, since events can be lost.
-Instead reconcile all the resources on every execution of reconciliation. On first this might sound a little
-opinionated, but there was a sound agreement between the developers that this is the way to go.
-
-### Q: Can I re-schedule a reconciliation, possibly with a specific delay?
-Yes, this can be done using [`UpdateControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java) and [`DeleteControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DeleteControl.java)
-, see:
-
-```java
- @Override
- public UpdateControl reconcile(
- EventSourceTestCustomResource resource, Context context) {
- ...
- return UpdateControl.updateStatus(resource).rescheduleAfter(10, TimeUnit.SECONDS);
- }
-```
-
-without an update:
-
-```java
- @Override
- public UpdateControl reconcile(
- EventSourceTestCustomResource resource, Context context) {
- ...
- return UpdateControl.noUpdate().rescheduleAfter(10, TimeUnit.SECONDS);
- }
-```
-
-Although you might consider using `EventSources`, to handle reconciliation triggering in a smarter way.
\ No newline at end of file
diff --git a/docs/documentation/features.md b/docs/documentation/features.md
deleted file mode 100644
index 95924e24dd..0000000000
--- a/docs/documentation/features.md
+++ /dev/null
@@ -1,484 +0,0 @@
----
-title: Features
-description: Features of the SDK
-layout: docs
-permalink: /docs/features
----
-
-# Features
-
-Java Operator SDK is a high level framework and related tooling in order to facilitate implementation of Kubernetes
-operators. The features are by default following the best practices in an opinionated way. However, feature flags and
-other configuration options are provided to fine tune or turn off these features.
-
-## Reconciliation Execution in a Nutshell
-
-Reconciliation execution is always triggered by an event. Events typically come from the custom resource
-(i.e. custom resource is created, updated or deleted) that the controller is watching, but also from different sources
-(see event sources). When an event is received reconciliation is executed, unless there is already a reconciliation
-happening for a particular custom resource. In other words it is guaranteed by the framework that no concurrent
-reconciliation happens for a custom resource.
-
-After a reconciliation (
-i.e. [Reconciler](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java)
-called, a post-processing phase follows, where typically framework checks if:
-
-- an exception was thrown during execution, if yes schedules a retry.
-- there are new events received during the controller execution, if yes schedule the execution again.
-- there is an instruction to re-schedule the execution for the future, if yes schedules a timer event with the specified
- delay.
-- if none above, the reconciliation is finished.
-
-Briefly, in the hearth of the execution is an eventing system, where events are the triggers of the reconciliation
-execution.
-
-## Finalizer Support
-
-[Kubernetes finalizers](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/)
-make sure that a reconciliation happens when a custom resource is instructed to be deleted. Typical case when it's
-useful, when an operator is down (pod not running). Without a finalizer the reconciliation - thus the cleanup -
-i.e. [`Reconciler.cleanup(...)`](https://github.com/java-operator-sdk/java-operator-sdk/blob/b91221bb54af19761a617bf18eef381e8ceb3b4c/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java#L31)
-would not happen if a custom resource is deleted.
-
-Finalizers are automatically added by the framework as the first step, thus after a custom resource is created, but
-before the first reconciliation. The finalizer is added via a separate Kubernetes API call. As a result of this update,
-the finalizer will be present. The subsequent event will be received, which will trigger the first reconciliation.
-
-The finalizer that is automatically added will be also removed after the `cleanup` is executed on the reconciler.
-However, the removal behaviour can be further customized, and can be instructed to "not remove yet" - this is useful just
-in some specific corner cases, when there would be a long waiting period for some dependent resource cleanup.
-
-The name of the finalizers can be specified, in case it is not, a name will be generated.
-
-Automatic finalizer handling can be turned off, so when configured no finalizer will be added or removed.
-See [`@ControllerConfiguration`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java)
-annotation for more details.
-
-### When not to Use Finalizers?
-
-Typically, automated finalizer handling should be turned off, in case the cleanup of **all** the dependent resources is
-handled by Kubernetes itself. This is handled by
-Kubernetes [garbage collection](https://kubernetes.io/docs/concepts/architecture/garbage-collection/#owners-dependents).
-Setting the owner reference and related fields are not in the scope of the SDK, it's up to the user to have them set
-properly when creating the objects.
-
-When automatic finalizer handling is turned off, the `Reconciler.cleanup(...)` method is not called at all. Not even in
-case when a delete event received. So it does not make sense to implement this method and turn off finalizer at the same
-time.
-
-## The `reconcile` and `cleanup` Methods of [`Reconciler`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java)
-
-The lifecycle of a custom resource can be clearly separated into two phases from the perspective of an operator. When a
-custom resource is created or update, or on the other hand when the custom resource is deleted - or rather marked for
-deletion in case a finalizer is used.
-
-This separation-related logic is automatically handled by the framework. The framework will always call `reconcile`
-method, unless the custom resource is
-[marked from deletion](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/#how-finalizers-work)
-. From the point when the custom resource is marked from deletion, only the `cleanup` method is called.
-
-If there is **no finalizer** in place (see Finalizer Support section), the `cleanup` method is **not called**.
-
-### Using [`UpdateControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java) and [`DeleteControl`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DeleteControl.java)
-
-These two classes are used to control the outcome or the desired behaviour after the reconciliation.
-
-The `UpdateControl` can instruct the framework to update the status sub-resource of the resource and/or re-schedule a
-reconciliation with a desired time delay.
-
-```java
- @Override
- public UpdateControl reconcile(
- EventSourceTestCustomResource resource, Context context) {
- ...
- return UpdateControl.updateStatus(resource).rescheduleAfter(10, TimeUnit.SECONDS);
- }
-```
-
-without an update:
-
-```java
- @Override
- public UpdateControl reconcile(
- EventSourceTestCustomResource resource, Context context) {
- ...
- return UpdateControl.noUpdate().rescheduleAfter(10, TimeUnit.SECONDS);
- }
-```
-
-Note, that it's not always desirable to always schedule a retry, rather to use `EventSources` to trigger the
-reconciliation.
-
-Those are the typical use cases of resource updates, however in some cases there it can happen that the controller wants
-to update the custom resource itself (like adding annotations) or not to do any updates, which is also supported.
-
-It is also possible to update both the status and the custom resource with the `updateCustomResourceAndStatus` method. In
-this case first the custom resource is updated then the status in two separate requests to K8S API.
-
-Always update the custom resource with `UpdateControl`, not with the actual kubernetes client if possible.
-
-On resource updates there is always an optimistic version control in place, to make sure that another update is not
-overwritten (by setting `resourceVersion` ) .
-
-The `DeleteControl` typically instructs the framework to remove the finalizer after the dependent resource are cleaned
-up in `cleanup` implementation.
-
-```java
-
-public DeleteControl cleanup(MyCustomResource customResource, Context context) {
- ...
- return DeleteControl.defaultDelete();
-}
-
-```
-
-However, there is a possibility to not remove the finalizer, this allows to clean up the resources in a more async way,
-mostly for the cases when there is a long waiting period after a delete operation is initiated. Note that in this case
-you might want to either schedule a timed event to make sure
-`cleanup` is executed again or use event sources to get notified about the state changes of a deleted resource.
-
-## Automatic Observed Generation Handling
-
-Having `.observedGeneration` value on the status of the resource is a best practice to indicate the last generation of
-the resource reconciled successfully by the controller. This helps the users / administrators to check if the custom
-resource was reconciled.
-
-In order to have this feature working:
-
-- the **status class** (not the resource) must implement the
- [`ObservedGenerationAware`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/ObservedGenerationAware.java)
- interface. See also
- the [`ObservedGenerationAwareStatus`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/ObservedGenerationAwareStatus.java)
- which can also be extended.
-- The other condition is that the `CustomResource.getStatus()` method should not return `null`
- , but an instance of the class representing `status`. The best way to achieve this is to
- override [`CustomResource.initStatus()`](https://github.com/fabric8io/kubernetes-client/blob/865e0ddf67b99f954aa55ab14e5806d53ae149ec/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/CustomResource.java#L139)
- .
-
-If these conditions are fulfilled and generation awareness not turned off, the observed generation is automatically set
-by the framework after the `reconcile` method is called. Note that the observed generation is updated also
-when `UpdateControl.noUpdate()` is returned from the reconciler. See this feature working in
-the [WebPage example](https://github.com/java-operator-sdk/java-operator-sdk/blob/b91221bb54af19761a617bf18eef381e8ceb3b4c/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStatus.java#L5)
-.
-
-```java
-public class WebPageStatus extends ObservedGenerationAwareStatus {
-
- private String htmlConfigMap;
-
- ...
-}
-```
-
-Initializing status on custom resource:
-
-```java
-@Group("sample.javaoperatorsdk")
-@Version("v1")
-public class WebPage extends CustomResource
- implements Namespaced {
-
- @Override
- protected WebPageStatus initStatus() {
- return new WebPageStatus();
- }
-}
-```
-
-## Generation Awareness and Event Filtering
-
-On an operator startup, the best practice is to reconcile all the resources. Since while operator was down, changes
-might have made both to custom resource and dependent resources.
-
-When the first reconciliation is done successfully, the next reconciliation is triggered if either the dependent
-resources are changed or the custom resource `.spec` is changed. If other fields like `.metadata` is changed on the
-custom resource, the reconciliation could be skipped. This is supported out of the box, thus the reconciliation by
-default is not triggered if the change to the main custom resource does not increase the `.metadata.generation` field.
-Note that the increase of `.metada.generation` is handled automatically by Kubernetes.
-
-To turn on this feature set `generationAwareEventProcessing` to `false` for the `Reconciler`.
-
-## Support for Well Known (non-custom) Kubernetes Resources
-
-A Controller can be registered for a non-custom resource, so well known Kubernetes resources like (
-Ingress,Deployment,...). Note that automatic observed generation handling is not supported for these resources. Although
-in case adding a secondary controller for well known k8s resource, probably the observed generation should be handled by
-the primary controller.
-
-See
-the [integration test](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/deployment/DeploymentReconciler.java)
-for reconciling deployments.
-
-```java
-public class DeploymentReconciler
- implements Reconciler, TestExecutionInfoProvider {
-
- @Override
- public UpdateControl reconcile(
- Deployment resource, Context context) {
- ...
- }
-```
-
-## Max Interval Between Reconciliations
-
-In case informers are all in place and reconciler is implemented correctly, there is no need for additional triggers.
-However, it's a [common practice](https://github.com/java-operator-sdk/java-operator-sdk/issues/848#issuecomment-1016419966)
-to have a failsafe periodic trigger in place,
-just to make sure the resources are reconciled after certain time. This functionality is in place by default, there
-is quite high interval (currently 10 hours) while the reconciliation is triggered. See how to override this using
-the standard annotation:
-
-```java
-@ControllerConfiguration(finalizerName = NO_FINALIZER,
- reconciliationMaxInterval = @ReconciliationMaxInterval(
- interval = 50,
- timeUnit = TimeUnit.MILLISECONDS))
-```
-
-The event is not propagated in a fixed rate, rather it's scheduled after each reconciliation. So the
-next reconciliation will after at most within the specified interval after last reconciliation.
-
-This feature can be turned off by setting `reconciliationMaxInterval` to [`Constants.NO_RECONCILIATION_MAX_INTERVAL`](https://github.com/java-operator-sdk/java-operator-sdk/blob/442e7d8718e992a36880e42bd0a5c01affaec9df/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Constants.java#L8-L8)
-or any non-positive number.
-
-The automatic retries are not affected by this feature, in case of an error no schedule is set by this feature.
-
-## Automatic Retries on Error
-
-When an exception is thrown from a controller, the framework will schedule an automatic retry of the reconciliation. The
-retry is behavior is configurable, an implementation is provided that should cover most of the use-cases, see
-[GenericRetry](https://github.com/java-operator-sdk/java-operator-sdk/blob/master/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetry.java)
-. But it is possible to provide a custom implementation.
-
-It is possible to set a limit on the number of retries. In
-the [Context](https://github.com/java-operator-sdk/java-operator-sdk/blob/master/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Context.java)
-object information is provided about the retry, particularly interesting is the `isLastAttempt`, since a different
-behavior could be implemented based on this flag. Like setting an error message in the status in case of a last attempt;
-
-```java
- GenericRetry.defaultLimitedExponentialRetry()
- .setInitialInterval(5000)
- .setIntervalMultiplier(1.5D)
- .setMaxAttempts(5);
-```
-
-Event if the retry reached a limit, in case of a new event is received the reconciliation would happen again, it's just
-won't be a result of a retry, but the new event. However, in case of an error happens also in this case, it won't
-schedule a retry is at this point the retry limit is already reached.
-
-A successful execution resets the retry.
-
-### Setting Error Status After Last Retry Attempt
-
-In order to facilitate error reporting Reconciler can implement the following
-[interface](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ErrorStatusHandler.java):
-
-```java
-public interface ErrorStatusHandler {
-
- Optional updateErrorStatus(T resource, RetryInfo retryInfo, RuntimeException e);
-
-}
-```
-
-The `updateErrorStatus` method is called in case an exception is thrown from the reconciler. It is also called when
-there is no retry configured, just after the reconciler execution. In the first call the `RetryInfo.getAttemptCount()`
-is always zero, since it is not a result of a retry
-(regardless if retry is configured or not).
-
-The result of the method call is used to make a status update on the custom resource. This is always a sub-resource
-update request, so no update on custom resource itself (like spec of metadata) happens. Note that this update request
-will also produce an event, and will result in a reconciliation if the controller is not generation aware.
-
-The scope of this feature is only the `reconcile` method of the reconciler, since there should not be updates on custom
-resource after it is marked for deletion.
-
-### Correctness and Automatic Retries
-
-There is a possibility to turn off the automatic retries. This is not desirable, unless there is a very specific reason.
-Errors naturally happen, typically network errors can cause some temporal issues, another case is when a custom resource
-is updated during the reconciliation (using `kubectl` for example), in this case if an update of the custom resource
-from the controller (using `UpdateControl`) would fail on a conflict. The automatic retries covers these cases and will
-result in a reconciliation, even if normally an event would not be processed as a result of a custom resource update
-from previous example (like if there is no generation update as a result of the change and generation filtering is
-turned on)
-
-## Retry and Rescheduling and Event Handling Common Behavior
-
-Retry, reschedule and standard event processing forms a relatively complex system, where these functionalities are not
-independent of each other. In the following we describe the behavior in this section, so it is easier to understand the
-intersections:
-
-1. A successful execution resets a retry and the rescheduled executions which were present before the reconciliation.
- However, a new rescheduling can be instructed from the reconciliation outcome (`UpdateControl` or `DeleteControl`).
-2. In case an exception happened, and a retry is initiated, but an event received meanwhile, then reconciliation will be
- executed instantly, and this execution won't count as a retry attempt.
-3. If the retry limit is reached (so no more automatic retry would happen), but a new event received, the reconciliation
- will still happen, but won't reset the retry, will be still marked as the last attempt in the retry info. The point
- (1) still holds, but in case of an error, no retry will happen.
-
-## Handling Related Events with Event Sources
-
-See also this [blog post](https://csviri.medium.com/java-operator-sdk-introduction-to-event-sources-a1aab5af4b7b).
-
-Event sources are a relatively simple yet powerful and extensible concept to trigger controller executions. Usually
-based on changes of dependent resources. To solve the mentioned problems above, de-facto we watch resources we manage
-for changes, and reconcile the state if a resource is changed. Note that resources we are watching can be Kubernetes and
-also non-Kubernetes objects. Typically, in case of non-Kubernetes objects or services we can extend our operator to
-handle webhooks or websockets or to react to any event coming from a service we interact with. What happens is when we
-create a dependent resource we also register an Event Source that will propagate events regarding the changes of that
-resource. This way we avoid the need of polling, and can implement controllers very efficiently.
-
-
-
-There are few interesting points here:
-The CustomResourceEvenSource event source is a special one, which sends events regarding changes of our custom resource,
-this is an event source which is always registered for every controller by default. An event is always related to a
-custom resource. Concurrency is still handled for you, thus we still guarantee that there is no concurrent execution of
-the controller for the same custom resource (
-there is parallel execution if an event is related to another custom resource instance).
-
-### Caching and Event Sources
-
-Typically, when we work with Kubernetes (but possibly with others), we manage the objects in a declarative way. This is
-true also for Event Sources. For example if we watch for changes of a Kubernetes Deployment object in the
-InformerEventSource, we always receive the whole object from the Kubernetes API. Later when we try to reconcile in the
-controller (not using events) we would like to check the state of this deployment (but also other dependent resources),
-we could read the object again from Kubernetes API. However since we watch for the changes, we know that we always
-receive the most up-to-date version in the Event Source. So naturally, what we can do is cache the latest received
-objects (in the Event Source) and read it from there if needed. This is the preferred way, since it reduces the number
-of requests to Kubernetes API server, and leads to faster reconciliation cycles.
-
-Note that when an operator starts and the first reconciliation is executed the caches are already populated for example
-for `InformerEventSource`. Currently, this is not true however for `PerResourceEventSource`, where the cache might or
-might not be populated. To handle this situation elegantly methods are provided which checks the object in cache, if
-not found tries to get it from the supplier. See related [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/e7fd79968a238d7e0acc446d949b83a06cea17b5/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java#L145)
-.
-
-### Registering Event Sources
-
-To register event sources `Reconciler` has to
-implement [`EventSourceInitializer`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java)
-interface and init a list of event sources to register. The easiest way to see it is
-on [tomcat example](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java)
-(irrelevant details omitted):
-
-```java
-
-@ControllerConfiguration
-public class TomcatReconciler implements Reconciler, EventSourceInitializer {
-
- @Override
- public List prepareEventSources(EventSourceContext context) {
- SharedIndexInformer deploymentInformer =
- kubernetesClient.apps()
- .deployments()
- .inAnyNamespace()
- .withLabel("app.kubernetes.io/managed-by", "tomcat-operator")
- .runnableInformer(0);
-
- return List.of(
- new InformerEventSource<>(deploymentInformer, d -> {
- var ownerReferences = d.getMetadata().getOwnerReferences();
- if (!ownerReferences.isEmpty()) {
- return Set.of(new ResourceID(ownerReferences.get(0).getName(), d.getMetadata().getNamespace()));
- } else {
- return EMPTY_SET;
- }
- }));
- }
- ...
-}
-```
-
-In the example above an `InformerEventSource` is registered (more on this specific eventsource later). Multiple things
-are going on here:
-
-1. An `SharedIndexInformer` (class from fabric8 Kubernetes client) is created. This will watch and produce events for
- `Deployments` in every namespace, but will filter them based on label. So `Deployments` which are not managed by
- `tomcat-operator` (the label is not present on them) will not trigger a reconciliation.
-2. In the next step
- an [InformerEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java)
- is created, which wraps the `SharedIndexInformer`. In addition to that a mapping functions is provided, **this maps
- the event of the watched resource (in this case `Deployment`) to the custom resources to reconcile**. Not that in
- this case this is a simple task, since `Deployment` is already created with an owner reference. Therefore,
- the `ResourceID`
- what identifies the custom resource to reconcile is created from the owner reference.
-
-Note that a set of `ResourceID` is returned, this is usually just a set with one element. The possibility to specify
-multiple values are there to cover some rare corner cases. If an irrelevant resource is observed, an empty set can
-be returned to not reconcile any custom resource.
-
-### Built-in EventSources
-
-There are multiple event-sources provided out of the box, the following are some more central ones:
-
-1. [InformerEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java) -
- is there to cover events for all Kubernetes resources. Provides also a cache to use during the reconciliation.
- Basically no other event source required to watch Kubernetes resources.
-2. [PerResourcePollingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java) -
- is used to poll external API, which don't support webhooks or other event notifications. It extends the abstract
- [CachingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CachingEventSource.java)
- to support caching. See [MySQL Schema sample](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java) for usage.
-3. [PollingEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java)
- is similar to `PerResourceCachingEventSource` only it not polls a specific API separately per custom resource, but
- periodically and independently of actually observed custom resources.
-5. [SimpleInboundEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/SimpleInboundEventSource.java)
- and [CachingInboundEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java)
- is used to handle incoming events from webhooks and messaging systems.
-6. [ControllerResourceEventSource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java) -
- an eventsource that is automatically registered to listen to the changes of the main
- resource the operation manages, it also maintains a cache of those objects that can be accessed from the Reconciler.
-
-More on the philosophy of the non Kubernetes API related event source see in issue [#729](https://github.com/java-operator-sdk/java-operator-sdk/issues/729).
-
-## Contextual Info for Logging with MDC
-
-Logging is enhanced with additional contextual information using [MDC](http://www.slf4j.org/manual.html#mdc). This
-following attributes are available in most parts of reconciliation logic and during the execution of the controller:
-
-| MDC Key | Value added from Custom Resource |
-| :--- | :--- |
-| `resource.apiVersion` | `.apiVersion` |
-| `resource.kind` | `.kind` |
-| `resource.name` | `.metadata.name` |
-| `resource.namespace` | `.metadata.namespace` |
-| `resource.resourceVersion` | `.metadata.resourceVersion` |
-| `resource.generation` | `.metadata.generation` |
-| `resource.uid` | `.metadata.uid` |
-
-For more information about MDC see this [link](https://www.baeldung.com/mdc-in-log4j-2-logback).
-
-## Monitoring with Micrometer
-
-## Automatic generation of CRDs
-
-Note that this is feature of [Fabric8 Kubernetes Client](https://github.com/fabric8io/kubernetes-client) not the JOSDK.
-But it's worth to mention here.
-
-To automatically generate CRD manifests from your annotated Custom Resource classes, you only need to add the following
-dependencies to your project:
-
-```xml
-
-
- io.fabric8
- crd-generator-apt
- provided
-
-```
-
-The CRD will be generated in `target/classes/META-INF/fabric8` (or in `target/test-classes/META-INF/fabric8`, if you use
-the `test` scope) with the CRD name suffixed by the generated spec version. For example, a CR using
-the `java-operator-sdk.io` group with a `mycrs` plural form will result in 2 files:
-
-- `mycrs.java-operator-sdk.io-v1.yml`
-- `mycrs.java-operator-sdk.io-v1beta1.yml`
-
-**NOTE:**
-> Quarkus users using the `quarkus-operator-sdk` extension do not need to add any extra dependency to get their CRD generated as this is handled by the extension itself.
-
-
-
-
diff --git a/docs/documentation/getting-started.md b/docs/documentation/getting-started.md
deleted file mode 100644
index 72a06df93c..0000000000
--- a/docs/documentation/getting-started.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: java-operator-sdk
-description: Build Kubernetes Operators in Java without hassle
-layout: docs
-permalink: /docs/getting-started
----
-
-# Java Operator SDK - Documentation
-
-## Introduction & Resources on Operators
-
-Operators are easy and simple way to manage resource on Kubernetes clusters but
-also outside the cluster. The goal of this SDK is to allow writing operators in Java by
-providing a nice API and handling common issues regarding the operators on framework level.
-
-For an introduction, what is an operator see this [blog post](https://blog.container-solutions.com/kubernetes-operators-explained).
-
-You can read about the common problems what is this operator framework is solving for you [here](https://blog.container-solutions.com/a-deep-dive-into-the-java-operator-sdk).
-
-## Getting Started
-
-The easiest way to get started with SDK is start [minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/) and
-execute one of our [examples](https://github.com/java-operator-sdk/samples/tree/main/mysql-schema).
-There is a dedicated page to describe how to [use samples](/docs/using-samples).
-
-Here are the main steps to develop the code and deploy the operator to a Kubernetes cluster. A more detailed and specific
-version can be found under `samples/mysql-schema/README.md`.
-
-1. Setup kubectl to work with your Kubernetes cluster of choice.
-1. Apply Custom Resource Definition
-1. Compile the whole project (framework + samples) using `mvn install` in the root directory
-1. Run the main class of the sample you picked and check out the sample's README to see what it does.
-When run locally the framework will use your Kubernetes client configuration (in ~/.kube/config) to make the connection
-to the cluster. This is why it was important to set up kubectl up front.
-1. You can work in this local development mode to play with the code.
-1. Build the Docker image and push it to the registry
-1. Apply RBAC configuration
-1. Apply deployment configuration
-1. Verify if the operator is up and running. Don't run it locally anymore to avoid conflicts in processing events from
-the cluster's API server.
-
-
-
diff --git a/docs/documentation/intro-operators.md b/docs/documentation/intro-operators.md
deleted file mode 100644
index f69cb2895a..0000000000
--- a/docs/documentation/intro-operators.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Introduction to Operators
-description: Introduction to Operators
-layout: docs
-permalink: /docs/intro-operators
----
-
-# Introduction To Operators
-
-This page provides a selection of articles that gives an introduction to Kubernetes operators.
-
-## Operators in General
-
- - [Introduction of the concept of Kubernetes Operators](https://blog.container-solutions.com/kubernetes-operators-explained)
- - [Operator pattern explained in Kubernetes documentation](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
- - [An explanation why Java Operators makes sense](https://blog.container-solutions.com/cloud-native-java-infrastructure-automation-with-kubernetes-operators)
- - [What are the problems an operator framework is solving](https://csviri.medium.com/deep-dive-building-a-kubernetes-operator-sdk-for-java-developers-5008218822cb)
-
diff --git a/docs/documentation/patterns-best-practices.md b/docs/documentation/patterns-best-practices.md
deleted file mode 100644
index 20dafcf30d..0000000000
--- a/docs/documentation/patterns-best-practices.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: Patterns and Best Practices
-description: Patterns and Best Practices Implementing a Controller
-layout: docs
-permalink: /docs/patterns-best-practices
----
-
-# Patterns and Best Practices
-
-This document describes patterns and best practices, to build and run operators, and how to implement them in terms of
-Java Operator SDK.
-
-See also best practices in [Operator SDK](https://sdk.operatorframework.io/docs/best-practices/best-practices/).
-
-## Implementing a Reconciler
-
-### Reconcile All The Resources All the Time
-
-The reconciliation can be triggered by events from multiple sources. It could be tempting to check the events and
-reconcile just the related resource or subset of resources that the controller manages. However, this is **considered as
-an anti-pattern** in operators. If triggered, all resources should be reconciled. Usually this means only comparing the
-target state with the current state in the cache for most of the resource. The reason behind this is events not reliable
-In general, this means events can be lost. In addition to that the operator can crash and while down will miss events.
-
-In addition to that such approach might even complicate implementation logic in the `Reconciler`, since parallel
-execution of the reconciler is not allowed for the same custom resource, there can be multiple events received for the
-same resource or dependent resource during an ongoing execution, ordering those events could be also challenging.
-
-Since there is a consensus regarding this in the industry, from v2 the events are not even accessible for
-the `Reconciler`.
-
-### EventSources and Caching
-
-As mentioned above during a reconciliation best practice is to reconcile all the dependent resources managed by the
-controller. This means that we want to compare a target state with the actual state of the cluster. Reading the actual
-state of a resource from the Kubernetes API Server directly all the time would mean a significant load. Therefore, it's
-a common practice to instead create a watch for the dependent resources and cache their latest state. This is done
-following the Informer pattern. In Java Operator SDK, informer is wrapped into an EventSource, to integrate it with the
-eventing system of the framework, resulting in `InformerEventSource`.
-
-A new event that triggers the reconciliation is propagated when the actual resource is already in cache. So in
-reconciler what should be just done is to compare the target calculated state of a dependent resource of the actual
-state from the cache of the event source. If it is changed or not in the cache it needs to be created, respectively
-updated.
-
-### Idempotency
-
-Since all the resources are reconciled during an execution and an execution can be triggered quite often, also retries
-of a reconciliation can happen naturally in operators, the implementation of a `Reconciler`
-needs to be idempotent. Luckily, since operators are usually managing already declarative resources, this is trivial to
-do in most cases.
-
-### Sync or Async Way of Resource Handling
-
-In an implementation of reconciliation there can be a point when reconciler needs to wait a non-insignificant amount of
-time while a resource gets up and running. For example, reconciler would do some additional step only if a Pod is ready
-to receive requests. This problem can be approached in two ways synchronously or asynchronously.
-
-The async way is just return from the reconciler, if there are informers properly in place for the target resource,
-reconciliation will be triggered on change. During the reconciliation the pod can be read from the cache of the informer
-and a check on it's state can be conducted again. The benefit of this approach is that it will free up the thread, so it
-can be used to reconcile other resources.
-
-The sync way would be to periodically poll the cache of the informer for the pod's state, until the target state is
-reached. This would block the thread until the state is reached, which in some cases could take quite long.
-
-## Why to Have Automated Retries?
-
-Automatic retries are in place by default, it can be fine-tuned, but in general it's not advised to turn of automatic
-retries. One of the reasons is that issues like network error naturally happen and are usually solved by a retry.
-Another typical situation is for example when a dependent resource or the custom resource is updated, during the update
-usually there is optimistic version control in place. So if someone updated the resource during reconciliation, maybe
-using `kubectl` or another process, the update would fail on a conflict. A retry solves this problem simply by executing
-the reconciliation again.
-
-## Managing State
-
-When managing only kubernetes resources an explicit state is not necessary about the resources. The state can be
-read/watched, also filtered using labels. Or just following some naming convention. However, when managing external
-resources, there can be a situation for example when the created resource can only be addressed by an ID generated when
-the resource was created. This ID needs to be stored, so on next reconciliation it could be used to addressing the
-resource. One place where it could go is the status sub-resource. On the other hand by definition status should be just
-the result of a reconciliation. Therefore, it's advised in general, to put such state into a separate resource usually a
-Kubernetes Secret or ConfigMap or a dedicated CustomResource, where the structure can be also validated.
-
diff --git a/docs/documentation/use-samples.md b/docs/documentation/use-samples.md
deleted file mode 100644
index 616a782181..0000000000
--- a/docs/documentation/use-samples.md
+++ /dev/null
@@ -1,245 +0,0 @@
----
-title: Using sample Operators
-description: How to use sample Operators
-layout: docs
-permalink: /docs/using-samples
----
-
-# Sample Operators we Provide
-
-We have few simple Operators under
-the [smoke-test-samples](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/smoke-test-samples) directory.
-These are used mainly to showcase some minimal operators, but also to do some sanity checks during development:
-
-* *pure-java*: Minimal Operator implementation which only parses the Custom Resource and prints to stdout. Implemented
- with and without Spring Boot support. The two samples share the common module.
-* *spring-boot-plain*: Sample showing integration with Spring Boot.
-
-In addition to that, there are examples under [sample-operators](https://github.com/java-operator-sdk/java-operator-sdk/tree/master/sample-operators)
-directory which are intended to show usage of different components in different scenarios, but mainly are more real world
-examples:
-
-* *webpage*: Simple example creating an NGINX webserver from a Custom Resource containing HTML code.
-* *mysql-schema*: Operator managing schemas in a MySQL database. Shows how to manage non Kubernetes resources.
-* *tomcat*: Operator with two controllers, managing Tomcat instances and Webapps running in Tomcat. The intention
- with this example to show how to manage multiple related custom resources and/or more controllers.
-
-# Implementing a Sample Operator
-
-Add [dependency](https://search.maven.org/search?q=a:operator-framework) to your project with Maven:
-
-```xml
-
-
- io.javaoperatorsdk
- operator-framework
- {see https://search.maven.org/search?q=a:operator-framework for latest version}
-
-```
-
-Or alternatively with Gradle, which also requires declaring the SDK as an annotation processor to generate the mappings
-between controllers and custom resource classes:
-
-```groovy
-dependencies {
- implementation "io.javaoperatorsdk:operator-framework:${javaOperatorVersion}"
- annotationProcessor "io.javaoperatorsdk:operator-framework:${javaOperatorVersion}"
-}
-```
-
-Once you've added the dependency, define a main method initializing the Operator and registering a controller.
-
-```java
-public class Runner {
-
- public static void main(String[] args) {
- Operator operator = new Operator(DefaultConfigurationService.instance());
- operator.register(new WebServerController());
- operator.start();
- }
-}
-```
-
-The Controller implements the business logic and describes all the classes needed to handle the CRD.
-
-```java
-
-@ControllerConfiguration
-public class WebPageReconciler implements Reconciler {
-
- // Return the changed resource, so it gets updated. See javadoc for details.
- @Override
- public UpdateControl reconcile(CustomService resource,
- Context context) {
- // ... your logic ...
- return UpdateControl.updateStatus(resource);
- }
-}
-```
-
-A sample custom resource POJO representation
-
-```java
-
-@Group("sample.javaoperatorsdk")
-@Version("v1")
-public class WebPage extends CustomResource implements
- Namespaced {
-}
-
-public class WebServerSpec {
-
- private String html;
-
- public String getHtml() {
- return html;
- }
-
- public void setHtml(String html) {
- this.html = html;
- }
-}
-```
-
-### Deactivating CustomResource implementations validation
-
-The operator will, by default, query the deployed CRDs to check that the `CustomResource`
-implementations match what is known to the cluster. This requires an additional query to the cluster and, sometimes,
-elevated privileges for the operator to be able to read the CRDs from the cluster. This validation is mostly meant to
-help users new to operator development get started and avoid common mistakes. Advanced users or production deployments
-might want to skip this step. This is done by setting the `CHECK_CRD_ENV_KEY` environment variable to `false`.
-
-### Automatic generation of CRDs
-
-To automatically generate CRD manifests from your annotated Custom Resource classes, you only need to add the following
-dependencies to your project (in the background an annotation processor is used), with Maven:
-
-```xml
-
-
- io.fabric8
- crd-generator-apt
- provided
-
-```
-
-or with Gradle:
-
-```groovy
-dependencies {
- annotationProcessor 'io.fabric8:crd-generator-apt:'
- ...
-}
-```
-
-The CRD will be generated in `target/classes/META-INF/fabric8` (or in `target/test-classes/META-INF/fabric8`, if you use
-the `test` scope) with the CRD name suffixed by the generated spec version. For example, a CR using
-the `java-operator-sdk.io` group with a `mycrs` plural form will result in 2 files:
-
-- `mycrs.java-operator-sdk.io-v1.yml`
-- `mycrs.java-operator-sdk.io-v1beta1.yml`
-
-**NOTE:**
-> Quarkus users using the `quarkus-operator-sdk` extension do not need to add any extra dependency to get their CRD generated as this is handled by the extension itself.
-
-### Quarkus
-
-A [Quarkus](https://quarkus.io) extension is also provided to ease the development of Quarkus-based operators.
-
-Add [this dependency](https://search.maven.org/search?q=a:quarkus-operator-sdk)
-to your project:
-
-```xml
-
-
- io.quarkiverse.operatorsdk
- quarkus-operator-sdk
- {see https://search.maven.org/search?q=a:quarkus-operator-sdk for latest version}
-
-
-```
-
-Create an Application, Quarkus will automatically create and inject a `KubernetesClient` (
-or `OpenShiftClient`), `Operator`, `ConfigurationService` and `ResourceController` instances that your application can
-use. Below, you can see the minimal code you need to write to get your operator and controllers up and running:
-
-```java
-
-@QuarkusMain
-public class QuarkusOperator implements QuarkusApplication {
-
- @Inject
- Operator operator;
-
- public static void main(String... args) {
- Quarkus.run(QuarkusOperator.class, args);
- }
-
- @Override
- public int run(String... args) throws Exception {
- operator.start();
- Quarkus.waitForExit();
- return 0;
- }
-}
-```
-
-### Spring Boot
-
-You can also let Spring Boot wire your application together and automatically register the controllers.
-
-Add [this dependency](https://search.maven.org/search?q=a:operator-framework-spring-boot-starter) to your project:
-
-```xml
-
-
- io.javaoperatorsdk
- operator-framework-spring-boot-starter
- {see https://search.maven.org/search?q=a:operator-framework-spring-boot-starter for
- latest version}
-
-
-```
-
-Create an Application
-
-```java
-
-@SpringBootApplication
-public class Application {
-
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
-}
-```
-
-#### Spring Boot test support
-
-Adding the following dependency would let you mock the operator for the tests where loading the spring container is
-necessary, but it doesn't need real access to a Kubernetes cluster.
-
-```xml
-
-
- io.javaoperatorsdk
- operator-framework-spring-boot-starter-test
- {see https://search.maven.org/search?q=a:operator-framework-spring-boot-starter for
- latest version}
-
-
-```
-
-Mock the operator:
-
-```java
-
-@SpringBootTest
-@EnableMockOperator
-public class SpringBootStarterSampleApplicationTest {
-
- @Test
- void contextLoads() {
- }
-}
-```
diff --git a/docs/etc/v1_model.drawio.svg b/docs/etc/v1_model.drawio.svg
deleted file mode 100644
index 162e573db2..0000000000
--- a/docs/etc/v1_model.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-Operator ConfiguredController DefaultEventSourceManager
DefaultEventSourceManager DefaultEventHandler EventDispatcher ResourceController EventSource EventHandler 1 1..* 1 1..* Viewer does not support full SVG 1.1
\ No newline at end of file
diff --git a/docs/etc/v2_model.drawio.svg b/docs/etc/v2_model.drawio.svg
deleted file mode 100644
index 9670b7d747..0000000000
--- a/docs/etc/v2_model.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-Operator Controller EventSourceManager EventProcessor EventSource ReconcilationDispatcher Reconciler 1 1..* 1..* Label 1 Viewer does not support full SVG 1.1
\ No newline at end of file
diff --git a/docs/event-design.xml b/docs/event-design.xml
deleted file mode 100644
index d7484bc84a..0000000000
--- a/docs/event-design.xml
+++ /dev/null
@@ -1 +0,0 @@
-5Vtbc5s4GP01nuk+pMNVxo+1kzad3W46cXazfZRBtjUFxICc2Pn1K4yEkYQdQsCmu3kJfICAo3P03fDInkXbLylM1t9IgMKRZQTbkX09stjf2GL/csuusHieWRhWKQ4KU8Uwxy+IGw1u3eAAZdKJlJCQ4kQ2+iSOkU8lG0xT8iyftiShfNcErpBmmPsw1K2POKBr/haucbDfIrxaizubBj8SQXEyN2RrGJDnism+GdmzlBBabEXbGQpz8AQuxXWfjxwtHyxFMW1ywQ1AV8vbP+nfuyv/8XfDu7t7ebjiozzBcMNf+OYpH88y5v4aBZsQpfzp6U5AkpJNHKB8VGNkT5/XmKJ5Av386DMjAbOtaRSyPZNt6k8pbolSirYVE3/qL4hEiKY7doogkc0R5BSyAN9/PkyIOea2dXUyxFxAToJVOfYBJ7bBoXoDbNZR2K5xlkDKsBsebs744rg5Om5b5G8oJjEzcwwV2FAcfMqFzPb8EGYZ9mWk0BbTf3JQP7p870flyPWW473f2YmdmL1N5aJ890f12OGy/Z647uisZGST+ujEm4u1C6YrRF9nFgqkZUmf48ocujVTKGwpCiHFT/JiVjet/A7fCd7TeKvQQ1DIUZhRvDe/qrr4KAOVqyAfyJ4oAxXAaAPtWVa+dnvigePrXDFzlvENxmwxH4JsXQkqr0a14KyqHWvgtRfpgCU6aShRc1ASdRSJmqqymkrUVSRqqlrvWaIi4qvQ7HtKWIAFKTo4B+PDbJNREt0jPp/WTBz8TWclm6I/4IKFpBIZYYhXcc5UdhETvD3NxYlZzPeJH4hwEORjTFOU4Re42I+XkyvJX34Phzsdude1dDspIXUVKANXfpNRNTasWx2ucjlI09QNi+RlXpl5slxmqJdJn7y6Ll94NXZNWRV1MVSdulUVdrYYm3rI/pgHnBWJDAQ6BzSI2+uw83rDTo/b23syKdw0Wvkys79ws2m8ORmUMxsrKYvttnRmY08ZSA2O+nZmeqZzz5FUVQpChuF0wQJPsMq3PnzNvVIMQ92fnVvBYHgKdi+j4Hco0RmWwhxlStsqDBhKHALOrDA9pTNPUYEkKFZ4EIt6I/ML9jRjD0zF2QGGEYmDhzWOxSFxriMMn3FYDsUmd85vS1K6JivCBHxzsJYxZ4iWtCbiXBDKgtoKOc0qNUuivuZepETp4Gs6dy+gY+8igltTXrQ7Ybxj10dwb86PJqfH6Zvvehb+gCPmDCzjHiUp8VGW6c7kF3I24yP4Vn2NdVZf43Xga4Q0zbdJs65e8toy8A4fNe5Yz2fyZUqQp+WtTaXtKUuEVkPpW9t6GjwjjA8kHGL/BTTtv/SWA4tloPso8HRNsr3CrIYCM4elMFOpCQKrpcLURoJ7Zu9p6fnYFNPFxv+Z17U6rZwEMFvvz+1IfhNrrJT8ymbKa65RDcm7E+CF0rB6d9pfGUXQ5hdzjEApWjptY161AOCo+u9btj21noaXUYmF/1WmgUExzQUdOQiVsk0dBJt6uKucxjs0xz2aVs93Tzsu5XzTlr6yYRvFE3RLez3zuEcrnOXdKt1ZnWiJFaew3A7AKHdT8SJLSpoOslFmddYpMz7aliP3tUQY9k7SezIjRJ7Yf7fM1ns/d3HOgLwS0HEY00XkomT0dV8ynDVsse3u3MmwC3SNM3pBqYH4E9NwZc6UyeebM47yexihU7VQ1HPsYusx8hzHqzAX6tc4ozD2B6hZT22cTWpEC8qMpEoB1WN3J1u91N9atgP/SrBpviHINRDZqqxxzJaqnagN4DN3leyaSpwSXBmzFEGaF97fI9UlDsMZCUm6v9ZeLpeW7+87Syn5iSpHArAALuhG3K6jlhJcp0bedbU8tU3Y3SfBei3vGiUh2UXFutgH2gFE3rIWbeB7aLHsC21gNERbLWR3h7YeQUpo/5UE/xm0x5dH2/ofod20K9Af2np0X+mMHvl1wXugRmbgonEd1BMwtmFvi7ZnXhxqvZwuEXtOId1kJcO7JbiLvMCpQ92zFjboDXXgXhx1PQ6ewygJq2nELWbRCr9XFXH22lSGVYYvJjFSsOam5kWgunmUZ7qXian9XZNVk6D0F8N08KXAUWga5/oDyQXU7zhaNx8mx1LRjkvCnlLDFt+Ktizxst3DjzqL0w8/jbVv/gU=
\ No newline at end of file
diff --git a/docs/go.mod b/docs/go.mod
new file mode 100644
index 0000000000..65768398bb
--- /dev/null
+++ b/docs/go.mod
@@ -0,0 +1,5 @@
+module github.com/google/docsy-example
+
+go 1.12
+
+require github.com/google/docsy v0.11.0 // indirect
diff --git a/docs/go.sum b/docs/go.sum
new file mode 100644
index 0000000000..c7a05f45f1
--- /dev/null
+++ b/docs/go.sum
@@ -0,0 +1,12 @@
+github.com/FortAwesome/Font-Awesome v0.0.0-20240108205627-a1232e345536/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/FortAwesome/Font-Awesome v0.0.0-20240716171331-37eff7fa00de/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/google/docsy v0.9.1 h1:+jqges1YCd+yHeuZ1BUvD8V8mEGVtPxULg5j/vaJ984=
+github.com/google/docsy v0.9.1/go.mod h1:saOqKEUOn07Bc0orM/JdIF3VkOanHta9LU5Y53bwN2U=
+github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg=
+github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc=
+github.com/google/docsy v0.11.0 h1:QnV40cc28QwS++kP9qINtrIv4hlASruhC/K3FqkHAmM=
+github.com/google/docsy v0.11.0/go.mod h1:hGGW0OjNuG5ZbH5JRtALY3yvN8ybbEP/v2iaK4bwOUI=
+github.com/twbs/bootstrap v5.2.3+incompatible h1:lOmsJx587qfF7/gE7Vv4FxEofegyJlEACeVV+Mt7cgc=
+github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
+github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
diff --git a/docs/hugo.toml b/docs/hugo.toml
new file mode 100644
index 0000000000..435cad2451
--- /dev/null
+++ b/docs/hugo.toml
@@ -0,0 +1,199 @@
+baseURL = "/"
+title = "Java Operator SDK"
+
+# Language settings
+contentDir = "content/en"
+defaultContentLanguage = "en"
+defaultContentLanguageInSubdir = false
+# Useful when translating.
+enableMissingTranslationPlaceholders = true
+
+enableRobotsTXT = true
+
+# Will give values to .Lastmod etc.
+enableGitInfo = true
+
+# Comment out to enable taxonomies in Docsy
+# disableKinds = ["taxonomy", "taxonomyTerm"]
+
+# You can add your own taxonomies
+[taxonomies]
+tag = "tags"
+category = "categories"
+
+[params.taxonomy]
+# set taxonomyCloud = [] to hide taxonomy clouds
+taxonomyCloud = ["tags", "categories"]
+
+# If used, must have same length as taxonomyCloud
+taxonomyCloudTitle = ["Tag Cloud", "Categories"]
+
+# set taxonomyPageHeader = [] to hide taxonomies on the page headers
+taxonomyPageHeader = ["tags", "categories"]
+
+
+# Highlighting config
+pygmentsCodeFences = true
+pygmentsUseClasses = false
+# Use the new Chroma Go highlighter in Hugo.
+pygmentsUseClassic = false
+#pygmentsOptions = "linenos=table"
+# See https://help.farbox.com/pygments.html
+pygmentsStyle = "tango"
+
+# Configure how URLs look like per section.
+[permalinks]
+blog = "/:section/:year/:month/:day/:slug/"
+
+# Image processing configuration.
+[imaging]
+resampleFilter = "CatmullRom"
+quality = 75
+anchor = "smart"
+
+# Language configuration
+
+[languages]
+[languages.en]
+languageName ="English"
+# Weight used for sorting.
+weight = 1
+[languages.en.params]
+title = "Java Operator SDK Docs"
+description = "Documentation for Java Operator SDK"
+
+[markup]
+ [markup.goldmark]
+ [markup.goldmark.parser.attribute]
+ block = true
+ [markup.goldmark.renderer]
+ unsafe = true
+ [markup.highlight]
+ # See a complete list of available styles at https://xyproto.github.io/splash/docs/all.html
+ style = "tango"
+ # Uncomment if you want your chosen highlight style used for code blocks without a specified language
+ # guessSyntax = "true"
+
+# Everything below this are Site Params
+
+# Comment out if you don't want the "print entire section" link enabled.
+[outputs]
+section = ["HTML", "print", "RSS"]
+
+[params]
+#privacy_policy = "https://policies.google.com/privacy"
+
+# First one is picked as the Twitter card image if not set on page.
+# images = ["images/project-illustration.png"]
+
+# Menu title if your navbar has a versions selector to access old versions of your site.
+# This menu appears only if you have at least one [params.versions] set.
+version_menu = "Releases"
+
+# Flag used in the "version-banner" partial to decide whether to display a
+# banner on every page indicating that this is an archived version of the docs.
+# Set this flag to "true" if you want to display the banner.
+archived_version = false
+
+# The version number for the version of the docs represented in this doc set.
+# Used in the "version-banner" partial to display a version number for the
+# current doc set.
+version = "0.0"
+
+# A link to latest version of the docs. Used in the "version-banner" partial to
+# point people to the main doc site.
+url_latest_version = "https://javaoperatorsdk.io/"
+
+# Repository configuration (URLs for in-page links to opening issues and suggesting changes)
+github_repo = "https://github.com/operator-framework/java-operator-sdk/"
+# An optional link to a related project repo. For example, the sibling repository where your product code lives.
+# github_project_repo = "https://github.com/operator-framework/java-operator-sdk"
+
+# Specify a value here if your content directory is not in your repo's root directory
+github_subdir = "docs"
+
+# Uncomment this if your GitHub repo does not have "main" as the default branch,
+# or specify a new value if you want to reference another branch in your GitHub links
+github_branch= "main"
+
+# Google Custom Search Engine ID. Remove or comment out to disable search.
+gcs_engine_id = "3062936b676d2428a"
+
+# Enable Lunr.js offline search
+offlineSearch = false
+
+# Enable syntax highlighting and copy buttons on code blocks with Prism
+prism_syntax_highlighting = false
+
+[params.copyright]
+ authors = "Java Operator SDK Developers"
+ from_year = 2019
+
+# User interface configuration
+[params.ui]
+# Set to true to disable breadcrumb navigation.
+breadcrumb_disable = false
+# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top navbar
+navbar_logo = true
+# Set to true if you don't want the top navbar to be translucent when over a `block/cover`, like on the homepage.
+navbar_translucent_over_cover_disable = true
+# Enable to show the side bar menu in its compact state.
+sidebar_menu_compact = false
+# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled)
+sidebar_search_disable = false
+
+# Adds a H2 section titled "Feedback" to the bottom of each doc. The responses are sent to Google Analytics as events.
+# This feature depends on [services.googleAnalytics] and will be disabled if "services.googleAnalytics.id" is not set.
+# If you want this feature, but occasionally need to remove the "Feedback" section from a single page,
+# add "hide_feedback: true" to the page's front matter.
+[params.ui.feedback]
+enable = true
+# The responses that the user sees after clicking "yes" (the page was helpful) or "no" (the page was not helpful).
+yes = 'Glad to hear it! Please tell us how we can improve .'
+no = 'Sorry to hear that. Please tell us how we can improve .'
+
+# Adds a reading time to the top of each doc.
+# If you want this feature, but occasionally need to remove the Reading time from a single page,
+# add "hide_readingtime: true" to the page's front matter
+[params.ui.readingtime]
+enable = false
+
+[params.links]
+[[params.links.user]]
+ name ="BlueSky"
+ url = "https://bsky.app/profile/javaoperatorsdk.bsky.social"
+ icon = "fa-brands fa-bluesky"
+ desc = "Follow us on BlueSky to get the latest news!"
+[[params.links.user]]
+name = "Slack"
+url = "https://kubernetes.slack.com/archives/CAW0GV7A5"
+icon = "fab fa-slack"
+desc = "Chat with other project developers on Kubernetes slack"
+[[params.links.user]]
+name = "Discord"
+url = "https://discord.gg/DacEhAy"
+icon = "fab fa-discord"
+desc = "Chat with others on our dedicated Discord server"
+#[[params.links.user]]
+# name = "Stack Overflow"
+# url = "https://example.org/stack"
+# icon = "fab fa-stack-overflow"
+# desc = "Practical questions and curated answers"
+# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
+[[params.links.developer]]
+ name = "GitHub"
+ url = "https://github.com/operator-framework/java-operator-sdk"
+ icon = "fab fa-github"
+ desc = "Development takes place here!"
+
+# hugo module configuration
+
+[module]
+ # Uncomment the next line to build and serve using local docsy clone declared in the named Hugo workspace:
+ # workspace = "docsy.work"
+ [module.hugoVersion]
+ extended = true
+ min = "0.110.0"
+ [[module.imports]]
+ path = "github.com/google/docsy"
+ disable = false
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index 3ec0499797..0000000000
--- a/docs/index.html
+++ /dev/null
@@ -1,149 +0,0 @@
----
-title: java-operator-sdk
-description: Build Kubernetes Operators in Java without hassle
-layout: homepage
----
-
-
-
-
Sponsored by:
-
-
-
&
-
-
-
-
-
-
-
-
- Whether you want to build applications that operate themselves or provision infrastructure from
- Java code, Kubernetes Operators are the way to go. java-operator-sdk is
- based on the fabric8 Kubernetes client and will make it
- easy for Java developers to embrace this new way of automation.
-
-
-
-
Why build your own Operator?
-
-
-
-
Infrastructure automation using the power and flexibility of Java
-
- see blog
- post
-
-
-
-
-
Provisioning of complex applications
-
- avoid Helm chart hell
-
-
-
-
-
Integration with Cloud services
-
- e.g. Secret stores
-
-
-
-
-
Safer deployment of applications
-
- only expose cluster to users by Custom Resources
-
-
-
-
-
-
-
Features
-
-
-
- Framework for handling Kubernetes API events
- Mapping Custom Resources to Java classes
- Retry action on failure
- Smart event scheduling (only handle latest event for the same resource)
-
-
-
-
- Avoid concurrency issues - related events are serialized, unrelated executed in parallel
- Smooth integration with Quarkus and Spring Boot
- Handling of events from non-Kubernetes resources
-
-
-
-
-
-
-
-
Roadmap
-
-
-
- Comprehensive
- documentation
-
-
-
- Integrate with
- operator-sdk to generate project skeleton
-
-
-
- Testing of the
- framework and all samples while running on a real cluster.
-
-
-
- Generate Java
- classes from CRD definion (and/or the other way around)
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/layouts/404.html b/docs/layouts/404.html
new file mode 100644
index 0000000000..1a9bd70440
--- /dev/null
+++ b/docs/layouts/404.html
@@ -0,0 +1,7 @@
+{{ define "main" -}}
+
+
Not found
+
Oops! This page doesn't exist. Try going back to the home page .
+
You can learn how to make a 404 page like this in Custom 404 Pages .
+
+{{- end }}
diff --git a/docs/layouts/_default/_markup/render-heading.html b/docs/layouts/_default/_markup/render-heading.html
new file mode 100644
index 0000000000..7f8e97424d
--- /dev/null
+++ b/docs/layouts/_default/_markup/render-heading.html
@@ -0,0 +1 @@
+{{ template "_default/_markup/td-render-heading.html" . }}
diff --git a/docs/layouts/partials/scripts/mermaid.html b/docs/layouts/partials/scripts/mermaid.html
new file mode 100644
index 0000000000..ac9290a10f
--- /dev/null
+++ b/docs/layouts/partials/scripts/mermaid.html
@@ -0,0 +1,68 @@
+
+{{ $version := .Site.Params.mermaid.version | default "latest" -}}
+
+{{ $cdnurl := printf "https://cdn.jsdelivr.net/npm/mermaid@%s/dist/mermaid.esm.min.mjs" $version -}}
+{{ with try (resources.GetRemote $cdnurl) -}}
+{{ with .Err -}}
+{{ errorf "Could not retrieve mermaid script from CDN. Reason: %s." . -}}
+{{ end -}}
+{{ else -}}
+{{ errorf "Invalid Mermaid version %s, could not retrieve this version from CDN." $version -}}
+{{ end -}}
+
+
\ No newline at end of file
diff --git a/docs/netlify.toml b/docs/netlify.toml
new file mode 100644
index 0000000000..e087db8274
--- /dev/null
+++ b/docs/netlify.toml
@@ -0,0 +1,12 @@
+# Hugo build configuration for Netlify
+# (https://gohugo.io/hosting-and-deployment/hosting-on-netlify/#configure-hugo-version-in-netlify)
+
+[build]
+command = "npm run build:preview"
+publish = "public"
+
+[build.environment]
+GO_VERSION = "1.21.4"
+
+[context.production]
+command = "npm run build:production"
diff --git a/docs/package.json b/docs/package.json
new file mode 100644
index 0000000000..a5a57eaa4c
--- /dev/null
+++ b/docs/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "java-operator-sdk",
+ "version": "0.10.0",
+ "version.next": "0.10.1-dev.0-unreleased",
+ "description": "Example site that uses Docsy theme for technical documentation.",
+ "repository": "github:google/docsy-example",
+ "homepage": "https://javaoperatorsdk.io/",
+ "author": "Java Operator SDK Devs",
+ "license": "Apache-2.0",
+ "bugs": "https://github.com/google/docsy-example/issues",
+ "spelling": "cSpell:ignore HTMLTEST precheck postbuild -",
+ "scripts": {
+ "_build": "npm run _hugo-dev --",
+ "_check:links": "echo IMPLEMENTATION PENDING for check-links; echo",
+ "_hugo": "hugo --cleanDestinationDir",
+ "_hugo-dev": "npm run _hugo -- -e dev -DFE",
+ "_local": "npx cross-env HUGO_MODULE_WORKSPACE=docsy.work",
+ "_serve": "npm run _hugo-dev -- --minify serve",
+ "build:preview": "npm run _hugo-dev -- --minify --baseURL \"${DEPLOY_PRIME_URL:-/}\"",
+ "build:production": "npm run _hugo -- --minify",
+ "build": "npm run _build -- ",
+ "check:links:all": "HTMLTEST_ARGS= npm run _check:links",
+ "check:links": "npm run _check:links",
+ "clean": "rm -Rf public/* resources",
+ "local": "npm run _local -- npm run",
+ "make:public": "git init -b main public",
+ "precheck:links:all": "npm run build",
+ "precheck:links": "npm run build",
+ "postbuild:preview": "npm run _check:links",
+ "postbuild:production": "npm run _check:links",
+ "serve": "npm run _serve",
+ "test": "npm run check:links",
+ "update:pkg:dep": "npm install --save-dev autoprefixer@latest postcss-cli@latest",
+ "update:pkg:hugo": "npm install --save-dev --save-exact hugo-extended@latest"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.20",
+ "cross-env": "^7.0.3",
+ "hugo-extended": "0.125.4",
+ "postcss-cli": "^11.0.0"
+ }
+}
diff --git a/docs/readme.md b/docs/readme.md
deleted file mode 100644
index d8b9055d5f..0000000000
--- a/docs/readme.md
+++ /dev/null
@@ -1,58 +0,0 @@
-## Run website locally
-To run website locally run first `bundle install`and then `bundle exec jekyll serve`
-
-## CSS library
-
-The website uses [UIkit](https://getuikit.com/) as the css library.
-inside _sass folder you will find:
-* `/theme` folder which contains personalised variables, mixins and components used
-(unused components, that can be used in the future, are commented out for size benefits)
-* `/uikit` folder which contains the library default SCSS files.
-
-## Navigation
-
-The navigation bars (main menu, footer) make use of the `/_data/navbar.yml` file, here you can write down the title and url where you want to page to be reached at. It will automatically be added to the website.
-Please make sure the `url` here is the same as the `permalink` inside the page front matter.
-
-For example:
-
-`navbar.yml` -
-```title: Docs
-url: /docs/getting-started
-```
-`docs/getting-started.md` -
-```---
-title: java-operator-sdk
-description: Build Kubernetes Operators in Java without hassle
-layout: docs
-permalink: /docs/getting-started
----
-```
-
-In order to create a navigation dropdown follow the following example:
-```- title: Docs
- url: /docs/getting-started
- dropdown:
- - title: Getting started
- url: /docs/docs
- - title: Examples
- url: /docs/examples/
-```
-The sidebar for the docs pages makes use of `/_data/sidebar.yml` in the same manner as explained previously for the navigation bars.
-
-## Page Layouts
-
-There are three page layouts:
-* `homepage` this is very specific to the homepage and shouldn't be used for other pages
-* `docs` this is specific to all the pages that are related to documentation files.
-* `default` this can be reused for any other pages. Mention the title in the Front Matter and omit it in the content of your page.
-
-## Documetation pages
-
-All documentation files should be added to the `documentation/` folder and for the navigation to have `/docs/page-name` in the url.
-
-
-## Github api
-
-The website uses the [jekyll-github-metadata](https://github.com/jekyll/github-metadata) plugin in order to display new releases automatically,
-this can be use for other purposes if need arises
\ No newline at end of file
diff --git a/docs/releases.html b/docs/releases.html
deleted file mode 100644
index bc4f52cbb7..0000000000
--- a/docs/releases.html
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Latest releases
-description: Releases
-layout: default
-permalink: /releases
----
-
-
-{%- assign releases = site.github.releases | slice: 1, 7 -%}
-
-
- {%- for release in releases -%}
-
-
-
{{release.published_at | date: "%b %d, %Y"}}
-
-
-
-
{{release.body | markdownify}}
-
-
- {%- endfor -%}
-
More details and older releases are available on GitHub
-
\ No newline at end of file
diff --git a/docs/assets/images/favicon.ico b/docs/static/favicons/favicon.ico
similarity index 100%
rename from docs/assets/images/favicon.ico
rename to docs/static/favicons/favicon.ico
diff --git a/docs/assets/images/architecture.svg b/docs/static/images/architecture.svg
similarity index 100%
rename from docs/assets/images/architecture.svg
rename to docs/static/images/architecture.svg
diff --git a/docs/static/images/cncf_logo.png b/docs/static/images/cncf_logo.png
new file mode 100644
index 0000000000..daa735c17b
Binary files /dev/null and b/docs/static/images/cncf_logo.png differ
diff --git a/docs/static/images/cncf_logo2.png b/docs/static/images/cncf_logo2.png
new file mode 100644
index 0000000000..e1236b7e87
Binary files /dev/null and b/docs/static/images/cncf_logo2.png differ
diff --git a/docs/assets/images/cs-logo.svg b/docs/static/images/cs-logo.svg
similarity index 100%
rename from docs/assets/images/cs-logo.svg
rename to docs/static/images/cs-logo.svg
diff --git a/docs/static/images/event-sources.png b/docs/static/images/event-sources.png
new file mode 100644
index 0000000000..f37e1f72d9
Binary files /dev/null and b/docs/static/images/event-sources.png differ
diff --git a/docs/static/images/full-logo-white.svg b/docs/static/images/full-logo-white.svg
new file mode 100644
index 0000000000..5ed740df53
--- /dev/null
+++ b/docs/static/images/full-logo-white.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+ JAVA OPERATOR SDK
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/assets/images/logo.png b/docs/static/images/full_logo.png
similarity index 100%
rename from docs/assets/images/logo.png
rename to docs/static/images/full_logo.png
diff --git a/docs/assets/images/red-hat.webp b/docs/static/images/red-hat.webp
similarity index 100%
rename from docs/assets/images/red-hat.webp
rename to docs/static/images/red-hat.webp
diff --git a/micrometer-support/pom.xml b/micrometer-support/pom.xml
index a2308d86e9..c66a2d339f 100644
--- a/micrometer-support/pom.xml
+++ b/micrometer-support/pom.xml
@@ -1,22 +1,15 @@
-
+
+ 4.0.0
- java-operator-sdk
io.javaoperatorsdk
- 2.1.2-SNAPSHOT
+ java-operator-sdk
+ 5.1.5-SNAPSHOT
- 4.0.0
micrometer-support
Operator SDK - Micrometer Support
-
- 11
- 11
-
-
io.micrometer
@@ -26,6 +19,37 @@
io.javaoperatorsdk
operator-framework-core
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+ io.javaoperatorsdk
+ operator-framework-junit-5
+ ${project.version}
+ test
+
+
+ io.fabric8
+ kubernetes-httpclient-vertx
+ test
+
-
\ No newline at end of file
+
diff --git a/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java b/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java
index d08f1c7669..26f149249b 100644
--- a/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java
+++ b/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java
@@ -1,101 +1,448 @@
package io.javaoperatorsdk.operator.monitoring.micrometer;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.javaoperatorsdk.operator.OperatorException;
import io.javaoperatorsdk.operator.api.monitoring.Metrics;
+import io.javaoperatorsdk.operator.api.reconciler.Constants;
import io.javaoperatorsdk.operator.api.reconciler.RetryInfo;
+import io.javaoperatorsdk.operator.processing.Controller;
+import io.javaoperatorsdk.operator.processing.GroupVersionKind;
import io.javaoperatorsdk.operator.processing.event.Event;
import io.javaoperatorsdk.operator.processing.event.ResourceID;
+import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEvent;
+import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Timer;
+import static io.javaoperatorsdk.operator.api.reconciler.Constants.CONTROLLER_NAME;
+
public class MicrometerMetrics implements Metrics {
private static final String PREFIX = "operator.sdk.";
private static final String RECONCILIATIONS = "reconciliations.";
+ private static final String RECONCILIATIONS_FAILED = RECONCILIATIONS + "failed";
+ private static final String RECONCILIATIONS_SUCCESS = RECONCILIATIONS + "success";
+ private static final String RECONCILIATIONS_RETRIES_LAST = RECONCILIATIONS + "retries.last";
+ private static final String RECONCILIATIONS_RETRIES_NUMBER = RECONCILIATIONS + "retries.number";
+ private static final String RECONCILIATIONS_STARTED = RECONCILIATIONS + "started";
+ private static final String RECONCILIATIONS_EXECUTIONS = PREFIX + RECONCILIATIONS + "executions.";
+ private static final String RECONCILIATIONS_QUEUE_SIZE = PREFIX + RECONCILIATIONS + "queue.size.";
+ private static final String NAME = "name";
+ private static final String NAMESPACE = "namespace";
+ private static final String GROUP = "group";
+ private static final String VERSION = "version";
+ private static final String KIND = "kind";
+ private static final String SCOPE = "scope";
+ private static final String METADATA_PREFIX = "resource.";
+ private static final String CONTROLLERS_EXECUTION = "controllers.execution.";
+ private static final String CONTROLLER = "controller";
+ private static final String SUCCESS_SUFFIX = ".success";
+ private static final String FAILURE_SUFFIX = ".failure";
+ private static final String TYPE = "type";
+ private static final String EXCEPTION = "exception";
+ private static final String EVENT = "event";
+ private static final String ACTION = "action";
+ private static final String EVENTS_RECEIVED = "events.received";
+ private static final String EVENTS_DELETE = "events.delete";
+ private static final String CLUSTER = "cluster";
+ private static final String SIZE_SUFFIX = ".size";
+ private final boolean collectPerResourceMetrics;
private final MeterRegistry registry;
+ private final Map gauges = new ConcurrentHashMap<>();
+ private final Cleaner cleaner;
+
+ /**
+ * Creates a MicrometerMetrics instance configured to not collect per-resource metrics, just
+ * aggregates per resource **type**
+ *
+ * @param registry the {@link MeterRegistry} instance to use for metrics recording
+ * @return a MicrometerMetrics instance configured to not collect per-resource metrics
+ */
+ public static MicrometerMetrics withoutPerResourceMetrics(MeterRegistry registry) {
+ return new MicrometerMetrics(registry, Cleaner.NOOP, false);
+ }
+
+ /**
+ * Creates a new builder to configure how the eventual MicrometerMetrics instance will behave.
+ *
+ * @param registry the {@link MeterRegistry} instance to use for metrics recording
+ * @return a MicrometerMetrics instance configured to not collect per-resource metrics
+ * @see MicrometerMetricsBuilder
+ */
+ public static MicrometerMetricsBuilder newMicrometerMetricsBuilder(MeterRegistry registry) {
+ return new MicrometerMetricsBuilder(registry);
+ }
+
+ /**
+ * Creates a new builder to configure how the eventual MicrometerMetrics instance will behave,
+ * pre-configuring it to collect metrics per resource.
+ *
+ * @param registry the {@link MeterRegistry} instance to use for metrics recording
+ * @return a MicrometerMetrics instance configured to not collect per-resource metrics
+ * @see PerResourceCollectingMicrometerMetricsBuilder
+ */
+ public static PerResourceCollectingMicrometerMetricsBuilder
+ newPerResourceCollectingMicrometerMetricsBuilder(MeterRegistry registry) {
+ return new PerResourceCollectingMicrometerMetricsBuilder(registry);
+ }
- public MicrometerMetrics(MeterRegistry registry) {
+ /**
+ * Creates a micrometer-based Metrics implementation that cleans up {@link Meter}s associated with
+ * deleted resources as specified by the (possibly {@code null}) provided {@link Cleaner}
+ * instance.
+ *
+ * @param registry the {@link MeterRegistry} instance to use for metrics recording
+ * @param cleaner the {@link Cleaner} to use
+ * @param collectingPerResourceMetrics whether to collect per resource metrics
+ */
+ private MicrometerMetrics(
+ MeterRegistry registry, Cleaner cleaner, boolean collectingPerResourceMetrics) {
this.registry = registry;
+ this.cleaner = cleaner;
+ this.collectPerResourceMetrics = collectingPerResourceMetrics;
+ }
+
+ @Override
+ public void controllerRegistered(Controller extends HasMetadata> controller) {
+ final var configuration = controller.getConfiguration();
+ final var name = configuration.getName();
+ final var executingThreadsName = RECONCILIATIONS_EXECUTIONS + name;
+ final var resourceClass = configuration.getResourceClass();
+ final var tags = new ArrayList(3);
+ addGVKTags(GroupVersionKind.gvkFor(resourceClass), tags, false);
+ AtomicInteger executingThreads =
+ registry.gauge(executingThreadsName, tags, new AtomicInteger(0));
+ gauges.put(executingThreadsName, executingThreads);
+
+ final var controllerQueueName = RECONCILIATIONS_QUEUE_SIZE + name;
+ AtomicInteger controllerQueueSize =
+ registry.gauge(controllerQueueName, tags, new AtomicInteger(0));
+ gauges.put(controllerQueueName, controllerQueueSize);
}
+ @Override
public T timeControllerExecution(ControllerExecution execution) {
final var name = execution.controllerName();
- final var execName = PREFIX + "controllers.execution." + execution.name();
+ final var execName = PREFIX + CONTROLLERS_EXECUTION + execution.name();
+ final var resourceID = execution.resourceID();
+ final var metadata = execution.metadata();
+ final var tags = new ArrayList(16);
+ tags.add(Tag.of(CONTROLLER, name));
+ addMetadataTags(resourceID, metadata, tags, true);
final var timer =
Timer.builder(execName)
- .tags("controller", name)
+ .tags(tags)
.publishPercentiles(0.3, 0.5, 0.95)
.publishPercentileHistogram()
.register(registry);
try {
- final var result = timer.record(execution::execute);
+ final var result =
+ timer.record(
+ () -> {
+ try {
+ return execution.execute();
+ } catch (Exception e) {
+ throw new OperatorException(e);
+ }
+ });
final var successType = execution.successTypeName(result);
- registry
- .counter(execName + ".success", "controller", name, "type", successType)
- .increment();
+ registry.counter(execName + SUCCESS_SUFFIX, CONTROLLER, name, TYPE, successType).increment();
return result;
} catch (Exception e) {
final var exception = e.getClass().getSimpleName();
registry
- .counter(execName + ".failure", "controller", name, "exception", exception)
+ .counter(execName + FAILURE_SUFFIX, CONTROLLER, name, EXCEPTION, exception)
.increment();
throw e;
}
}
- public void receivedEvent(Event event) {
- incrementCounter(event.getRelatedCustomResourceID(), "events.received", "event",
- event.getClass().getSimpleName());
+ @Override
+ public void receivedEvent(Event event, Map metadata) {
+ if (event instanceof ResourceEvent) {
+ incrementCounter(
+ event.getRelatedCustomResourceID(),
+ EVENTS_RECEIVED,
+ metadata,
+ Tag.of(EVENT, event.getClass().getSimpleName()),
+ Tag.of(ACTION, ((ResourceEvent) event).getAction().toString()));
+ } else {
+ incrementCounter(
+ event.getRelatedCustomResourceID(),
+ EVENTS_RECEIVED,
+ metadata,
+ Tag.of(EVENT, event.getClass().getSimpleName()));
+ }
}
@Override
- public void cleanupDoneFor(ResourceID customResourceUid) {
- incrementCounter(customResourceUid, "events.delete");
+ public void cleanupDoneFor(ResourceID resourceID, Map metadata) {
+ incrementCounter(resourceID, EVENTS_DELETE, metadata);
+
+ cleaner.removeMetersFor(resourceID);
}
- public void reconcileCustomResource(ResourceID resourceID, RetryInfo retryInfoNullable) {
+ @Override
+ public void reconcileCustomResource(
+ HasMetadata resource, RetryInfo retryInfoNullable, Map metadata) {
Optional retryInfo = Optional.ofNullable(retryInfoNullable);
- incrementCounter(resourceID, RECONCILIATIONS + "started",
- RECONCILIATIONS + "retries.number",
- "" + retryInfo.map(RetryInfo::getAttemptCount).orElse(0),
- RECONCILIATIONS + "retries.last",
- "" + retryInfo.map(RetryInfo::isLastAttempt).orElse(true));
+ incrementCounter(
+ ResourceID.fromResource(resource),
+ RECONCILIATIONS_STARTED,
+ metadata,
+ Tag.of(
+ RECONCILIATIONS_RETRIES_NUMBER,
+ String.valueOf(retryInfo.map(RetryInfo::getAttemptCount).orElse(0))),
+ Tag.of(
+ RECONCILIATIONS_RETRIES_LAST,
+ String.valueOf(retryInfo.map(RetryInfo::isLastAttempt).orElse(true))));
+
+ var controllerQueueSize =
+ gauges.get(RECONCILIATIONS_QUEUE_SIZE + metadata.get(CONTROLLER_NAME));
+ controllerQueueSize.incrementAndGet();
}
@Override
- public void finishedReconciliation(ResourceID resourceID) {
- incrementCounter(resourceID, RECONCILIATIONS + "success");
+ public void finishedReconciliation(HasMetadata resource, Map metadata) {
+ incrementCounter(ResourceID.fromResource(resource), RECONCILIATIONS_SUCCESS, metadata);
}
- public void failedReconciliation(ResourceID resourceID, RuntimeException exception) {
+ @Override
+ public void reconciliationExecutionStarted(HasMetadata resource, Map metadata) {
+ var reconcilerExecutions =
+ gauges.get(RECONCILIATIONS_EXECUTIONS + metadata.get(CONTROLLER_NAME));
+ reconcilerExecutions.incrementAndGet();
+ }
+
+ @Override
+ public void reconciliationExecutionFinished(HasMetadata resource, Map metadata) {
+ var reconcilerExecutions =
+ gauges.get(RECONCILIATIONS_EXECUTIONS + metadata.get(CONTROLLER_NAME));
+ reconcilerExecutions.decrementAndGet();
+
+ var controllerQueueSize =
+ gauges.get(RECONCILIATIONS_QUEUE_SIZE + metadata.get(CONTROLLER_NAME));
+ controllerQueueSize.decrementAndGet();
+ }
+
+ @Override
+ public void failedReconciliation(
+ HasMetadata resource, Exception exception, Map metadata) {
var cause = exception.getCause();
if (cause == null) {
cause = exception;
} else if (cause instanceof RuntimeException) {
cause = cause.getCause() != null ? cause.getCause() : cause;
}
- incrementCounter(resourceID, RECONCILIATIONS + "failed", "exception",
- cause.getClass().getSimpleName());
+ incrementCounter(
+ ResourceID.fromResource(resource),
+ RECONCILIATIONS_FAILED,
+ metadata,
+ Tag.of(EXCEPTION, cause.getClass().getSimpleName()));
}
+ @Override
public > T monitorSizeOf(T map, String name) {
- return registry.gaugeMapSize(PREFIX + name + ".size", Collections.emptyList(), map);
+ return registry.gaugeMapSize(PREFIX + name + SIZE_SUFFIX, Collections.emptyList(), map);
+ }
+
+ private void addMetadataTags(
+ ResourceID resourceID, Map metadata, List tags, boolean prefixed) {
+ if (collectPerResourceMetrics) {
+ addTag(NAME, resourceID.getName(), tags, prefixed);
+ addTagOmittingOnEmptyValue(NAMESPACE, resourceID.getNamespace().orElse(null), tags, prefixed);
+ }
+ addTag(SCOPE, getScope(resourceID), tags, prefixed);
+ final var gvk = (GroupVersionKind) metadata.get(Constants.RESOURCE_GVK_KEY);
+ if (gvk != null) {
+ addGVKTags(gvk, tags, prefixed);
+ }
+ }
+
+ private static void addTag(String name, String value, List tags, boolean prefixed) {
+ tags.add(Tag.of(getPrefixedMetadataTag(name, prefixed), value));
}
- private void incrementCounter(ResourceID id, String counterName, String... additionalTags) {
- var tags = List.of(
- "name", id.getName(),
- "name", id.getName(), "namespace", id.getNamespace().orElse(""),
- "scope", id.getNamespace().isPresent() ? "namespace" : "cluster");
- if (additionalTags != null && additionalTags.length > 0) {
- tags = new LinkedList<>(tags);
+ private static void addTagOmittingOnEmptyValue(
+ String name, String value, List tags, boolean prefixed) {
+ if (value != null && !value.isBlank()) {
+ addTag(name, value, tags, prefixed);
+ }
+ }
+
+ private static String getPrefixedMetadataTag(String tagName, boolean prefixed) {
+ return prefixed ? METADATA_PREFIX + tagName : tagName;
+ }
+
+ private static String getScope(ResourceID resourceID) {
+ return resourceID.getNamespace().isPresent() ? NAMESPACE : CLUSTER;
+ }
+
+ private static void addGVKTags(GroupVersionKind gvk, List tags, boolean prefixed) {
+ addTagOmittingOnEmptyValue(GROUP, gvk.getGroup(), tags, prefixed);
+ addTag(VERSION, gvk.getVersion(), tags, prefixed);
+ addTag(KIND, gvk.getKind(), tags, prefixed);
+ }
+
+ private void incrementCounter(
+ ResourceID id, String counterName, Map metadata, Tag... additionalTags) {
+ final var additionalTagsNb =
+ additionalTags != null && additionalTags.length > 0 ? additionalTags.length : 0;
+ final var metadataNb = metadata != null ? metadata.size() : 0;
+ final var tags = new ArrayList(6 + additionalTagsNb + metadataNb);
+ addMetadataTags(id, metadata, tags, false);
+ if (additionalTagsNb > 0) {
tags.addAll(List.of(additionalTags));
}
- registry.counter(PREFIX + counterName, tags.toArray(new String[0])).increment();
+
+ final var counter = registry.counter(PREFIX + counterName, tags);
+ cleaner.recordAssociation(id, counter);
+ counter.increment();
+ }
+
+ protected Set recordedMeterIdsFor(ResourceID resourceID) {
+ return cleaner.recordedMeterIdsFor(resourceID);
+ }
+
+ public static class PerResourceCollectingMicrometerMetricsBuilder
+ extends MicrometerMetricsBuilder {
+
+ private int cleaningThreadsNumber;
+ private int cleanUpDelayInSeconds;
+
+ private PerResourceCollectingMicrometerMetricsBuilder(MeterRegistry registry) {
+ super(registry);
+ }
+
+ /**
+ * @param cleaningThreadsNumber the maximal number of threads that can be assigned to the
+ * removal of {@link Meter}s associated with deleted resources, defaults to 1 if not
+ * specified or if the provided number is lesser or equal to 0
+ */
+ public PerResourceCollectingMicrometerMetricsBuilder withCleaningThreadNumber(
+ int cleaningThreadsNumber) {
+ this.cleaningThreadsNumber = cleaningThreadsNumber <= 0 ? 1 : cleaningThreadsNumber;
+ return this;
+ }
+
+ /**
+ * @param cleanUpDelayInSeconds the number of seconds to wait before {@link Meter}s are removed
+ * for deleted resources, defaults to 1 (meaning meters will be removed one second after the
+ * associated resource is deleted) if not specified or if the provided number is lesser than
+ * 0. Threading and the general interaction model of interacting with the API server means
+ * that it's not possible to ensure that meters are immediately deleted in all cases so a
+ * minimal delay of one second is always enforced
+ */
+ public PerResourceCollectingMicrometerMetricsBuilder withCleanUpDelayInSeconds(
+ int cleanUpDelayInSeconds) {
+ this.cleanUpDelayInSeconds = Math.max(cleanUpDelayInSeconds, 1);
+ return this;
+ }
+
+ @Override
+ public MicrometerMetrics build() {
+ final var cleaner =
+ new DelayedCleaner(registry, cleanUpDelayInSeconds, cleaningThreadsNumber);
+ return new MicrometerMetrics(registry, cleaner, true);
+ }
+ }
+
+ public static class MicrometerMetricsBuilder {
+ protected final MeterRegistry registry;
+ private boolean collectingPerResourceMetrics = true;
+
+ private MicrometerMetricsBuilder(MeterRegistry registry) {
+ this.registry = registry;
+ }
+
+ /** Configures the instance to collect metrics on a per-resource basis. */
+ @SuppressWarnings("unused")
+ public PerResourceCollectingMicrometerMetricsBuilder collectingMetricsPerResource() {
+ collectingPerResourceMetrics = true;
+ return new PerResourceCollectingMicrometerMetricsBuilder(registry);
+ }
+
+ /**
+ * Configures the instance to only collect metrics per resource **type**, in an aggregate
+ * fashion, instead of per resource instance.
+ */
+ @SuppressWarnings("unused")
+ public MicrometerMetricsBuilder notCollectingMetricsPerResource() {
+ collectingPerResourceMetrics = false;
+ return this;
+ }
+
+ public MicrometerMetrics build() {
+ return new MicrometerMetrics(registry, Cleaner.NOOP, collectingPerResourceMetrics);
+ }
+ }
+
+ interface Cleaner {
+ Cleaner NOOP = new Cleaner() {};
+
+ default void removeMetersFor(ResourceID resourceID) {}
+
+ default void recordAssociation(ResourceID resourceID, Meter meter) {}
+
+ default Set recordedMeterIdsFor(ResourceID resourceID) {
+ return Collections.emptySet();
+ }
+ }
+
+ static class DefaultCleaner implements Cleaner {
+ private final Map> metersPerResource = new ConcurrentHashMap<>();
+ private final MeterRegistry registry;
+
+ private DefaultCleaner(MeterRegistry registry) {
+ this.registry = registry;
+ }
+
+ @Override
+ public void removeMetersFor(ResourceID resourceID) {
+ // remove each meter
+ final var toClean = metersPerResource.get(resourceID);
+ if (toClean != null) {
+ toClean.forEach(registry::remove);
+ }
+ // then clean-up local recording of associations
+ metersPerResource.remove(resourceID);
+ }
+
+ @Override
+ public void recordAssociation(ResourceID resourceID, Meter meter) {
+ metersPerResource.computeIfAbsent(resourceID, id -> new HashSet<>()).add(meter.getId());
+ }
+
+ @Override
+ public Set