diff --git a/packages/bbui/src/Form/Core/Dropzone.svelte b/packages/bbui/src/Form/Core/Dropzone.svelte index ceb672600b..64d851b1e4 100644 --- a/packages/bbui/src/Form/Core/Dropzone.svelte +++ b/packages/bbui/src/Form/Core/Dropzone.svelte @@ -355,6 +355,9 @@ input[type="file"] { display: none; } + .compact .spectrum-Dropzone { + padding: 6px 0 !important; + } .gallery { display: flex; @@ -381,7 +384,14 @@ } .compact .placeholder, .compact img { - margin: 12px 16px; + margin: 10px 16px; + } + .compact img { + height: 90px; + } + .compact .gallery { + padding: 6px 10px; + margin-bottom: 8px; } .title { display: flex; diff --git a/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte b/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte index ff9938d38d..e7ddc887b8 100644 --- a/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/HeaderCell.svelte @@ -125,7 +125,7 @@
diff --git a/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte b/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte index bbdf9f55ca..f0755abf4a 100644 --- a/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/OptionsCell.svelte @@ -158,10 +158,11 @@ user-select: none; } .arrow { - border-right: 2px solid var(--spectrum-global-color-blue-400); + /*border-right: 2px solid var(--spectrum-global-color-blue-400);*/ position: absolute; right: 0; - top: 2px; + top: 0; + height: 100%; bottom: 2px; padding: 0 6px 0 16px; display: grid; @@ -182,7 +183,7 @@ box-shadow: 0 0 8px 4px rgba(0, 0, 0, 0.15); justify-content: flex-start; align-items: stretch; - max-height: calc(5 * var(--cell-height) + 1px); + max-height: var(--max-cell-render-height); overflow-y: auto; border: var(--cell-border); } diff --git a/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte b/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte index ce809680af..725a57d26b 100644 --- a/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte @@ -293,7 +293,7 @@ left: 0; min-width: 100%; max-width: calc(100% + 240px); - max-height: calc(var(--cell-height) + 240px); + max-height: var(--max-cell-render-height); background: var(--cell-background); border: var(--cell-border); box-shadow: 0 0 8px 4px rgba(0, 0, 0, 0.15); diff --git a/packages/frontend-core/src/components/sheet/cells/SheetCell.svelte b/packages/frontend-core/src/components/sheet/cells/SheetCell.svelte index ba0e5b7e42..e80757d537 100644 --- a/packages/frontend-core/src/components/sheet/cells/SheetCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/SheetCell.svelte @@ -68,16 +68,34 @@ position: relative; width: 0; } + .cell.selected:after, + .cell.error:after, + .cell.selected-other:not(.selected):after { + content: " "; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + border: 2px solid transparent; + pointer-events: none; + border-radius: 2px; + box-sizing: border-box; + } .cell.selected { - box-shadow: inset 0 0 0 2px var(--spectrum-global-color-blue-400); z-index: 2; } - .cell.error { - box-shadow: inset 0 0 0 2px var(--spectrum-global-color-red-400); + .cell.selected:after { + border-color: var(--spectrum-global-color-blue-400); + } + .cell.error:after { + border-color: var(--spectrum-global-color-red-400); } .cell.selected-other:not(.selected) { z-index: 1; - box-shadow: inset 0 0 0 2px var(--user-color); + } + .cell.selected-other:not(.selected):after { + border-color: var(--spectrum-global-color-red-400); } .cell:not(.selected) { user-select: none; @@ -112,7 +130,8 @@ .label { position: absolute; bottom: 100%; - padding: 1px 4px; + margin: 0 0 -2px 0; + padding: 1px 4px 3px 4px; background: var(--user-color); border-radius: 2px 2px 0 0; display: none; @@ -129,7 +148,8 @@ bottom: auto; top: 100%; border-radius: 0 0 2px 2px; - padding: 0 4px 2px 4px; + padding: 2px 4px 2px 4px; + margin: -2px 0 0 0; } .cell:hover .label { display: block; diff --git a/packages/frontend-core/src/components/sheet/controls/AddRowButton.svelte b/packages/frontend-core/src/components/sheet/controls/AddRowButton.svelte index aa3dd407b1..f961cabc19 100644 --- a/packages/frontend-core/src/components/sheet/controls/AddRowButton.svelte +++ b/packages/frontend-core/src/components/sheet/controls/AddRowButton.svelte @@ -1,38 +1,16 @@ -{#if $columns.length} -
- -
-{/if} - - + dispatch("add-row-inline")} + disabled={!$columns.length && !$stickyColumn} +> + Create row + diff --git a/packages/frontend-core/src/components/sheet/layout/HeaderRow.svelte b/packages/frontend-core/src/components/sheet/layout/HeaderRow.svelte index 5e47887d21..53d2ef2279 100644 --- a/packages/frontend-core/src/components/sheet/layout/HeaderRow.svelte +++ b/packages/frontend-core/src/components/sheet/layout/HeaderRow.svelte @@ -32,7 +32,7 @@ background: var(--background); border-bottom: var(--cell-border); position: relative; - z-index: 1; + z-index: 2; height: var(--cell-height); } .row { diff --git a/packages/frontend-core/src/components/sheet/layout/NewRowTop.svelte b/packages/frontend-core/src/components/sheet/layout/NewRowTop.svelte new file mode 100644 index 0000000000..9240f60b03 --- /dev/null +++ b/packages/frontend-core/src/components/sheet/layout/NewRowTop.svelte @@ -0,0 +1,242 @@ + + + +{#if firstColumn} +
+
+
($hoveredRowId = "new")} + on:mouseleave={() => ($hoveredRowId = null)} + > +
0} + > + +
+
1
+ {#if $config.allowExpandRows} + + {/if} +
+
+ {#if $stickyColumn} + {@const cellId = `new-${$stickyColumn.name}`} + + {/if} +
+ +
+ {#each $renderedColumns as column} + {@const cellId = `new-${column.name}`} + + {/each} +
+
+
+
+
+ + +
+
+{/if} + + diff --git a/packages/frontend-core/src/components/sheet/layout/Sheet.svelte b/packages/frontend-core/src/components/sheet/layout/Sheet.svelte index 41c74cc791..1f414b10eb 100644 --- a/packages/frontend-core/src/components/sheet/layout/Sheet.svelte +++ b/packages/frontend-core/src/components/sheet/layout/Sheet.svelte @@ -27,7 +27,8 @@ import KeyboardManager from "../overlays/KeyboardManager.svelte" import { clickOutside } from "@budibase/bbui" import SheetControls from "./SheetControls.svelte" - import NewRow from "./NewRow.svelte" + import NewRowTop from "./NewRowTop.svelte" + import { MaxCellRenderHeight } from "../lib/constants" export let API export let tableId @@ -108,12 +109,12 @@ id="sheet-{rand}" class:is-resizing={$isResizing} class:is-reordering={$isReordering} - style="--cell-height:{cellHeight}px; --gutter-width:{gutterWidth}px;" + style="--cell-height:{cellHeight}px; --gutter-width:{gutterWidth}px; --max-cell-render-height:{MaxCellRenderHeight}px;" >
- +
@@ -129,7 +130,8 @@
{#if $config.allowAddRows} - + + {/if} diff --git a/packages/frontend-core/src/components/sheet/layout/SheetBody.svelte b/packages/frontend-core/src/components/sheet/layout/SheetBody.svelte index d9e0392024..18f1cefbc1 100644 --- a/packages/frontend-core/src/components/sheet/layout/SheetBody.svelte +++ b/packages/frontend-core/src/components/sheet/layout/SheetBody.svelte @@ -2,11 +2,17 @@ import { getContext, onMount } from "svelte" import SheetScrollWrapper from "./SheetScrollWrapper.svelte" import SheetRow from "./SheetRow.svelte" + import { MaxCellRenderHeight } from "../lib/constants" - const { bounds, renderedRows } = getContext("sheet") + const { bounds, renderedRows, visualRowCapacity, cellHeight } = + getContext("sheet") let body + $: inversionIdx = + $visualRowCapacity - Math.ceil(MaxCellRenderHeight / cellHeight) - 2 + $: console.log(inversionIdx) + onMount(() => { // Observe and record the height of the body const observer = new ResizeObserver(() => { @@ -22,7 +28,7 @@
{#each $renderedRows as row, idx} - + = inversionIdx} /> {/each}
diff --git a/packages/frontend-core/src/components/sheet/layout/SheetControls.svelte b/packages/frontend-core/src/components/sheet/layout/SheetControls.svelte index 1a6acfb58f..133b3abff8 100644 --- a/packages/frontend-core/src/components/sheet/layout/SheetControls.svelte +++ b/packages/frontend-core/src/components/sheet/layout/SheetControls.svelte @@ -1,7 +1,9 @@ + diff --git a/packages/frontend-core/src/components/sheet/layout/SheetRow.svelte b/packages/frontend-core/src/components/sheet/layout/SheetRow.svelte index ae42af6494..bd291f6ce3 100644 --- a/packages/frontend-core/src/components/sheet/layout/SheetRow.svelte +++ b/packages/frontend-core/src/components/sheet/layout/SheetRow.svelte @@ -4,6 +4,7 @@ export let row export let idx + export let invert = false const { selectedCellId, @@ -40,6 +41,7 @@ {cellId} {column} {row} + {invert} /> {/each}
diff --git a/packages/frontend-core/src/components/sheet/layout/StickyColumn.svelte b/packages/frontend-core/src/components/sheet/layout/StickyColumn.svelte index 782ee58646..7239413855 100644 --- a/packages/frontend-core/src/components/sheet/layout/StickyColumn.svelte +++ b/packages/frontend-core/src/components/sheet/layout/StickyColumn.svelte @@ -164,12 +164,12 @@ /* Add shadow when scrolled */ .sticky-column.scrolled :global(.cell:last-child:after) { - content: " "; - position: absolute; - width: 10px; - height: 100%; - left: 100%; - background: linear-gradient(to right, rgba(0, 0, 0, 0.08), transparent); + /*content: " ";*/ + /*position: absolute;*/ + /*width: 10px;*/ + /*height: 100%;*/ + /*left: 100%;*/ + /*background: linear-gradient(to right, rgba(0, 0, 0, 0.08), transparent);*/ } /* Don't show borders between cells in the sticky column */ @@ -179,7 +179,7 @@ .header { position: relative; - z-index: 2; + z-index: 3; } .header :global(.cell) { background: var(--spectrum-global-color-gray-100); diff --git a/packages/frontend-core/src/components/sheet/lib/constants.js b/packages/frontend-core/src/components/sheet/lib/constants.js new file mode 100644 index 0000000000..3fb5ea9d05 --- /dev/null +++ b/packages/frontend-core/src/components/sheet/lib/constants.js @@ -0,0 +1 @@ +export const MaxCellRenderHeight = 216 diff --git a/packages/frontend-core/src/components/sheet/stores/max-scroll.js b/packages/frontend-core/src/components/sheet/stores/max-scroll.js index e54386cb8c..9d19e93978 100644 --- a/packages/frontend-core/src/components/sheet/stores/max-scroll.js +++ b/packages/frontend-core/src/components/sheet/stores/max-scroll.js @@ -12,7 +12,7 @@ export const createMaxScrollStores = context => { selectedCellId, gutterWidth, } = context - const padding = 255 + const padding = 264 // Memoize store primitives const scrollTop = derived(scroll, $scroll => $scroll.top, 0) diff --git a/packages/frontend-core/src/components/sheet/stores/rows.js b/packages/frontend-core/src/components/sheet/stores/rows.js index 6c44d24129..6e0b0b1751 100644 --- a/packages/frontend-core/src/components/sheet/stores/rows.js +++ b/packages/frontend-core/src/components/sheet/stores/rows.js @@ -136,7 +136,7 @@ export const createRowsStore = context => { } else { handleNewRows([newRow]) } - notifications.success("Row added successfully") + notifications.success("Row created successfully") return newRow } catch (error) { notifications.error(`Error adding row: ${error?.message}`) diff --git a/packages/frontend-core/src/components/sheet/stores/viewport.js b/packages/frontend-core/src/components/sheet/stores/viewport.js index b1abb6e1a4..df91258b79 100644 --- a/packages/frontend-core/src/components/sheet/stores/viewport.js +++ b/packages/frontend-core/src/components/sheet/stores/viewport.js @@ -77,5 +77,10 @@ export const createViewportStores = context => { [] ) - return { scrolledRowCount, visualRowCapacity, renderedRows, renderedColumns } + return { + scrolledRowCount, + visualRowCapacity, + renderedRows, + renderedColumns, + } }