diff --git a/.changeset/chilly-yaks-listen.md b/.changeset/chilly-yaks-listen.md new file mode 100644 index 0000000000..8a4217f757 --- /dev/null +++ b/.changeset/chilly-yaks-listen.md @@ -0,0 +1,13 @@ +--- +'@evidence-dev/tailwind': patch +--- + +[!] BREAKING CHANGE: +Custom theme colors are converted implicitly to kebab-case by tailwindcss + +This means that some color defined in `evidence.config.yaml` as `myCustomColor` +should be used as (for example) `text-my-custom-color`. (`text-myCustomColor` will not work) + +When referencing custom theme colors in Javascript the original case should still be used +(for example) `myCustomColor` would still be `` +_NOT_ `` diff --git a/.changeset/kind-fishes-mate.md b/.changeset/kind-fishes-mate.md new file mode 100644 index 0000000000..57b2c12d93 --- /dev/null +++ b/.changeset/kind-fishes-mate.md @@ -0,0 +1,7 @@ +--- +'@evidence-dev/core-components': patch +'@evidence-dev/tailwind': patch +'@evidence-dev/evidence': patch +--- + +Use theme class instead of data- diff --git a/.changeset/strong-wombats-admire.md b/.changeset/strong-wombats-admire.md new file mode 100644 index 0000000000..6f4dc03056 --- /dev/null +++ b/.changeset/strong-wombats-admire.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/evidence': patch +--- + +Add theme.css export for svelte component diff --git a/packages/ui/core-components/src/lib/atoms/content-box/ContentBox.svelte b/packages/ui/core-components/src/lib/atoms/content-box/ContentBox.svelte index d0b97f3602..954034035c 100644 --- a/packages/ui/core-components/src/lib/atoms/content-box/ContentBox.svelte +++ b/packages/ui/core-components/src/lib/atoms/content-box/ContentBox.svelte @@ -10,7 +10,9 @@
-
+
- diff --git a/packages/ui/core-components/src/lib/molecules/toast/Toast.svelte b/packages/ui/core-components/src/lib/molecules/toast/Toast.svelte index e995a55d83..a9501c42d0 100644 --- a/packages/ui/core-components/src/lib/molecules/toast/Toast.svelte +++ b/packages/ui/core-components/src/lib/molecules/toast/Toast.svelte @@ -15,6 +15,13 @@ } return status; }; + + const classLookup = { + negative: 'border-negative/50 bg-negative/10 text-negative', + positive: 'border-positive/50 bg-positive/10 text-positive', + info: 'border-info/50 bg-info/10 text-info', + warning: 'border-warning/50 bg-warning/10 text-warning' + }; -
+
diff --git a/packages/ui/core-components/src/lib/organisms/layout/header/SearchButton.css b/packages/ui/core-components/src/lib/organisms/layout/header/SearchButton.css deleted file mode 100644 index f42d63eaac..0000000000 --- a/packages/ui/core-components/src/lib/organisms/layout/header/SearchButton.css +++ /dev/null @@ -1,16 +0,0 @@ -.DocSearch-Button { - @apply bg-base-100 border-base-300 hover:bg-base-200/40 transition-colors duration-200 rounded-md flex gap-16 cursor-pointer py-1 pl-2 sm:pr-1 pr-20 sm:text-xs border font-sans font-medium items-center; -} -.DocSearch-Button-Placeholder { - @apply text-base-content-muted; -} -.DocSearch-Search-Icon { - display: none; -} -.DocSearch-Button-Keys { - @apply sm:flex gap-0.5 bg-base-200/40 border-base-300 border rounded px-1 py-0.5 text-xs hidden; -} -.DocSearch-Button-Key, -.DocSearch-Control-Key-Icon { - @apply text-base-content-muted *:text-base-content-muted; -} diff --git a/packages/ui/core-components/src/lib/organisms/layout/sidebar/Badge.svelte b/packages/ui/core-components/src/lib/organisms/layout/sidebar/Badge.svelte index 20f1357d00..5aac412a7f 100644 --- a/packages/ui/core-components/src/lib/organisms/layout/sidebar/Badge.svelte +++ b/packages/ui/core-components/src/lib/organisms/layout/sidebar/Badge.svelte @@ -1,5 +1,5 @@ diff --git a/packages/ui/core-components/src/lib/organisms/layout/tableofcontents/ContentsList.svelte b/packages/ui/core-components/src/lib/organisms/layout/tableofcontents/ContentsList.svelte index e19e5339aa..3e4156d725 100644 --- a/packages/ui/core-components/src/lib/organisms/layout/tableofcontents/ContentsList.svelte +++ b/packages/ui/core-components/src/lib/organisms/layout/tableofcontents/ContentsList.svelte @@ -28,6 +28,12 @@ onDestroy(() => { observer?.disconnect(); }); + + const classLookup = { + h1: 'mt-3 font-semibold block bg-base-100 shadow shadow-base-100', + h2: 'pl-0 text-base-content-muted', + h3: 'pl-4 text-base-content-muted' + }; {#if headers && headers.length > 1} @@ -35,30 +41,13 @@ On this page {#each headers as header} - + {header.innerText} {/each} {/if} - - diff --git a/packages/ui/core-components/src/lib/organisms/source-config/SourceConfigFormField.svelte b/packages/ui/core-components/src/lib/organisms/source-config/SourceConfigFormField.svelte index d77b0a2922..be6bff83de 100644 --- a/packages/ui/core-components/src/lib/organisms/source-config/SourceConfigFormField.svelte +++ b/packages/ui/core-components/src/lib/organisms/source-config/SourceConfigFormField.svelte @@ -148,6 +148,9 @@ $: options[fieldValueKey] = fieldValue; $: fieldDisabled = disabled || spec.forceReference || (spec.references && refVal !== null); + + const inputClasses = + 'rounded-md border border-base-300 bg-base-100 shadow-sm px-2 py-1 text-sm focus-visible:ring-base-300 flex h-9 w-full transition-colors focus-visible:outline-none focus-visible:ring-1 p-1 ml-auto align-middle';
@@ -161,6 +164,7 @@ {#if spec.type === 'string'} {#if spec.secret && !reveal && spec.shown !== true} {:else} {:else if spec.type === 'number'} {:else if spec.type === 'select' && Array.isArray(spec.options)} -
{/if}
- - diff --git a/packages/ui/core-components/src/lib/storybook-helpers/WithEvidence.svelte b/packages/ui/core-components/src/lib/storybook-helpers/WithEvidence.svelte index 0459a0cfbd..617dc648fc 100644 --- a/packages/ui/core-components/src/lib/storybook-helpers/WithEvidence.svelte +++ b/packages/ui/core-components/src/lib/storybook-helpers/WithEvidence.svelte @@ -1,6 +1,7 @@ - - diff --git a/packages/ui/core-components/src/lib/storybook-helpers/initializeUSQL.js b/packages/ui/core-components/src/lib/storybook-helpers/initializeUSQL.js index 4a5303bd4e..b45ef48d13 100644 --- a/packages/ui/core-components/src/lib/storybook-helpers/initializeUSQL.js +++ b/packages/ui/core-components/src/lib/storybook-helpers/initializeUSQL.js @@ -9,7 +9,7 @@ export async function initialize() { try { await initDB(); const res = await fetch(addBasePath('/data/manifest.json')).then((r) => r.json()); - await setParquetURLs(res.renderedFiles ?? {}); + await setParquetURLs(res.renderedFiles ?? {}, { addBasePath }); await updateSearchPath(Object.keys(res.renderedFiles ?? {})); if (!res.renderedFiles) console.error('No fixture data available!'); } catch (e) { diff --git a/packages/ui/core-components/src/lib/themes/themes.js b/packages/ui/core-components/src/lib/themes/themes.js index 86c8156d88..adfa5e0cc6 100644 --- a/packages/ui/core-components/src/lib/themes/themes.js +++ b/packages/ui/core-components/src/lib/themes/themes.js @@ -105,26 +105,47 @@ export class ThemeStores { } /** @param {HTMLElement} element */ - syncDataThemeAttribute = (element) => { - // Sync activeAppearance -> html[data-theme] + syncThemeAttribute = (element) => { + // Sync activeAppearance -> .theme- + const removeAllThemes = () => { + // When running in chromatic, it was complaining that forEach was not a function + // By explicitly converting to an array, we are ensuring that it will behave + // as we expect it to + Array.from(element.classList.values()).forEach((className) => { + if (className.startsWith('theme-')) { + element.classList.remove(className); + } + }); + }; + + let controlledUpdate = false; const unsubscribe = this.#activeAppearance.subscribe(($activeAppearance) => { - const current = element.getAttribute('data-theme'); - if (current !== $activeAppearance) { - element.setAttribute('data-theme', $activeAppearance); - } + requestAnimationFrame(() => { + controlledUpdate = true; + // try to do this all in one frame to prevent jitter + removeAllThemes(); + element.classList.add(`theme-${$activeAppearance}`); + requestAnimationFrame(() => (controlledUpdate = false)); + }); }); - // Sync html[data-theme] -> activeAppearance + // Sync .theme- -> activeAppearance const observer = new MutationObserver((mutations) => { + if (controlledUpdate) return; const html = /** @type {HTMLHtmlElement} */ (mutations[0].target); - const theme = html.getAttribute('data-theme'); + const themes = [ + ...html.classList.values().filter((className) => className.startsWith('theme-')) + ]; + if (themes.length === 0) return; + const theme = themes[0].replace('theme-', ''); + if (!theme || !['light', 'dark'].includes(theme)) return; const current = get(this.#activeAppearance); if (theme !== current) { this.#selectedAppearance.set(/** @type {'light' | 'dark'} */ (theme)); } }); - observer.observe(element, { attributeFilter: ['data-theme'] }); + observer.observe(element, { attributeFilter: ['class'] }); return () => { unsubscribe(); diff --git a/packages/ui/core-components/src/lib/unsorted/ui/Deployment/EvidenceDeploy.svelte b/packages/ui/core-components/src/lib/unsorted/ui/Deployment/EvidenceDeploy.svelte index 8de49af055..f731b6cc24 100644 --- a/packages/ui/core-components/src/lib/unsorted/ui/Deployment/EvidenceDeploy.svelte +++ b/packages/ui/core-components/src/lib/unsorted/ui/Deployment/EvidenceDeploy.svelte @@ -1,5 +1,5 @@ -

Deploying to Evidence Cloud

-

Evidence Cloud allows you to:

+

Deploying to Evidence Cloud

+

Evidence Cloud allows you to:

  • Host your project at {'<'}project-name{'>'}.evidence.app
  • Authenticate users
  • @@ -18,15 +18,7 @@
- diff --git a/packages/ui/core-components/src/lib/unsorted/ui/QueryViewerSupport/QueryDataTable.svelte b/packages/ui/core-components/src/lib/unsorted/ui/QueryViewerSupport/QueryDataTable.svelte index 7eab35c6a1..e5fb5c9c63 100644 --- a/packages/ui/core-components/src/lib/unsorted/ui/QueryViewerSupport/QueryDataTable.svelte +++ b/packages/ui/core-components/src/lib/unsorted/ui/QueryViewerSupport/QueryDataTable.svelte @@ -52,13 +52,13 @@
- +
- - - {#each columnSummary as column, j} {#if row[column.id] == null} - {:else if columnSummary[j].type === 'number'} @@ -149,8 +155,15 @@ {#if max > 0} @@ -161,7 +174,7 @@ - diff --git a/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte b/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte index f7c25e332e..9bd612f444 100644 --- a/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte +++ b/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte @@ -691,11 +691,11 @@
No Results
{#if paginated && pageCount > 1} -
+ {#each columnSummary as column}
+ {#each columnSummary as column} {#each dataPage as row, i}
+ {#if i === 0} {(index + i + 1).toLocaleString()} @@ -94,7 +97,10 @@ + {'Ø'}