From 530945851e1ee2951ca0121f79a36d2ba48f0a0b Mon Sep 17 00:00:00 2001 From: Matt Driscoll Date: Tue, 6 Jun 2023 15:35:04 -0700 Subject: [PATCH 1/2] feat(list): Add slots for filter actions. #6600 --- .../src/components/list/list.scss | 14 +++-- .../src/components/list/list.stories.ts | 47 +++++++++++++++ .../src/components/list/list.tsx | 57 ++++++++++++++----- .../src/components/list/resources.ts | 6 ++ .../calcite-components/src/demos/list.html | 28 +++++++++ 5 files changed, 133 insertions(+), 19 deletions(-) diff --git a/packages/calcite-components/src/components/list/list.scss b/packages/calcite-components/src/components/list/list.scss index 87e66d35e6b..735f7ab228d 100755 --- a/packages/calcite-components/src/components/list/list.scss +++ b/packages/calcite-components/src/components/list/list.scss @@ -25,6 +25,11 @@ @apply w-full; } +.stack { + --calcite-stack-padding-inline: 0; + --calcite-stack-padding-block: 0; +} + ::slotted(calcite-list-item) { @apply shadow-border-bottom mb-px; } @@ -34,9 +39,8 @@ } .sticky-pos { - @apply sticky top-0 z-sticky; -} - -calcite-filter { - @apply mb-px; + @apply sticky + top-0 + z-sticky + bg-foreground-1; } diff --git a/packages/calcite-components/src/components/list/list.stories.ts b/packages/calcite-components/src/components/list/list.stories.ts index b889a258c2d..e34d6d3993c 100644 --- a/packages/calcite-components/src/components/list/list.stories.ts +++ b/packages/calcite-components/src/components/list/list.stories.ts @@ -543,3 +543,50 @@ export const filteredChildListItems_TestOnly = (): string => html` `; + +export const filterActions_TestOnly = (): string => html` + + + + + + + + + + + + + + + + +`; diff --git a/packages/calcite-components/src/components/list/list.tsx b/packages/calcite-components/src/components/list/list.tsx index 490b777d9a0..b02edcf55bc 100755 --- a/packages/calcite-components/src/components/list/list.tsx +++ b/packages/calcite-components/src/components/list/list.tsx @@ -12,14 +12,15 @@ import { Watch } from "@stencil/core"; import { debounce } from "lodash-es"; -import { toAriaBoolean } from "../../utils/dom"; +import { slotChangeHasAssignedElement, toAriaBoolean } from "../../utils/dom"; import { InteractiveComponent, updateHostInteraction } from "../../utils/interactive"; import { createObserver } from "../../utils/observers"; import { SelectionMode } from "../interfaces"; import { ItemData } from "../list-item/interfaces"; import { MAX_COLUMNS } from "../list-item/resources"; import { getListItemChildren, updateListItemChildren } from "../list-item/utils"; -import { CSS, debounceTimeout, SelectionAppearance } from "./resources"; +import { CSS, debounceTimeout, SelectionAppearance, SLOTS } from "./resources"; +import { SLOTS as STACK_SLOTS } from "../stack/resources"; const listItemSelector = "calcite-list-item"; const parentSelector = "calcite-list-item-group, calcite-list-item"; @@ -35,6 +36,8 @@ import { * A general purpose list that enables users to construct list items that conform to Calcite styling. * * @slot - A slot for adding `calcite-list-item` elements. + * @slot filter-actions-end - A slot for adding actionable `calcite-action` elements before the filter component. + * @slot filter-actions-end - A slot for adding actionable `calcite-action` elements after the filter component. */ @Component({ tag: "calcite-list", @@ -245,6 +248,10 @@ export class List implements InteractiveComponent, LoadableComponent { @State() dataForFilter: ItemData = []; + @State() hasFilterActionsStart = false; + + @State() hasFilterActionsEnd = false; + filterEl: HTMLCalciteFilterElement; // -------------------------------------------------------------------------- @@ -274,7 +281,9 @@ export class List implements InteractiveComponent, LoadableComponent { dataForFilter, filterEnabled, filterPlaceholder, - filterText + filterText, + hasFilterActionsStart, + hasFilterActionsEnd } = this; return (
@@ -286,20 +295,32 @@ export class List implements InteractiveComponent, LoadableComponent { onKeyDown={this.handleListKeydown} role="treegrid" > - {filterEnabled ? ( + {filterEnabled || hasFilterActionsStart || hasFilterActionsEnd ? ( - (this.filterEl = el)} - /> + + + (this.filterEl = el)} + /> + + @@ -322,6 +343,14 @@ export class List implements InteractiveComponent, LoadableComponent { updateListItemChildren(getListItemChildren(event)); }; + handleFilterActionsStartSlotChange = (event: Event): void => { + this.hasFilterActionsStart = slotChangeHasAssignedElement(event); + }; + + handleFilterActionsEndSlotChange = (event: Event): void => { + this.hasFilterActionsEnd = slotChangeHasAssignedElement(event); + }; + setActiveListItem = (): void => { const { enabledListItems } = this; diff --git a/packages/calcite-components/src/components/list/resources.ts b/packages/calcite-components/src/components/list/resources.ts index 9949b4ae477..72c08c58070 100644 --- a/packages/calcite-components/src/components/list/resources.ts +++ b/packages/calcite-components/src/components/list/resources.ts @@ -2,6 +2,7 @@ export const CSS = { container: "container", table: "table", scrim: "scrim", + stack: "stack", tableContainer: "table-container", sticky: "sticky-pos" }; @@ -9,3 +10,8 @@ export const CSS = { export const debounceTimeout = 0; export type SelectionAppearance = "border" | "icon"; + +export const SLOTS = { + filterActionsStart: "filter-actions-start", + filterActionsEnd: "filter-actions-end" +}; diff --git a/packages/calcite-components/src/demos/list.html b/packages/calcite-components/src/demos/list.html index 25d45b0537e..e440e0bc0fb 100644 --- a/packages/calcite-components/src/demos/list.html +++ b/packages/calcite-components/src/demos/list.html @@ -39,6 +39,34 @@

List

+ + + + From 2aa50f80c6395ec3bc7bdd255340bc1bc96c6a62 Mon Sep 17 00:00:00 2001 From: Matt Driscoll Date: Tue, 6 Jun 2023 15:37:01 -0700 Subject: [PATCH 2/2] doc fix --- packages/calcite-components/src/components/list/list.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/calcite-components/src/components/list/list.tsx b/packages/calcite-components/src/components/list/list.tsx index b02edcf55bc..76cd8723189 100755 --- a/packages/calcite-components/src/components/list/list.tsx +++ b/packages/calcite-components/src/components/list/list.tsx @@ -36,7 +36,7 @@ import { * A general purpose list that enables users to construct list items that conform to Calcite styling. * * @slot - A slot for adding `calcite-list-item` elements. - * @slot filter-actions-end - A slot for adding actionable `calcite-action` elements before the filter component. + * @slot filter-actions-start - A slot for adding actionable `calcite-action` elements before the filter component. * @slot filter-actions-end - A slot for adding actionable `calcite-action` elements after the filter component. */ @Component({