From 28cba8a425014b754e5569e67f1a08f345dbfb7f Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Fri, 15 Aug 2025 12:10:53 +0000 Subject: [PATCH 01/14] feat: added new component called expandable table aswell as left chevron variant of accordian --- v2/pink-sb/src/lib/Accordion.svelte | 98 ++++-- v2/pink-sb/src/lib/ExpandableTable.svelte | 303 ++++++++++++++++++ v2/pink-sb/src/lib/index.ts | 5 +- .../src/stories/Accordion.stories.svelte | 31 ++ .../stories/ExpandableTable.stories.svelte | 258 +++++++++++++++ 5 files changed, 673 insertions(+), 22 deletions(-) create mode 100644 v2/pink-sb/src/lib/ExpandableTable.svelte create mode 100644 v2/pink-sb/src/stories/ExpandableTable.stories.svelte diff --git a/v2/pink-sb/src/lib/Accordion.svelte b/v2/pink-sb/src/lib/Accordion.svelte index 243e5a7873..ff47fad59b 100644 --- a/v2/pink-sb/src/lib/Accordion.svelte +++ b/v2/pink-sb/src/lib/Accordion.svelte @@ -23,6 +23,7 @@ export let titleVariant: 'm-500' | 'm-400' | 'l-600' | 'l-500' | 'l-400' | 'm-600' | undefined = 'm-500'; export let titleColor = '--fgcolor-neutral-primary'; + export let chevronPosition: 'left' | 'right' = 'right'; // Allows user to open the accordion by pressing the enter key function clickOnEnter( @@ -61,31 +62,58 @@ {/if} {#if open}
@@ -152,12 +180,21 @@ border-radius: var(--border-radius-circle, 99999px); border: var(--border-width-s) solid var(--border-neutral-strong,); background: var(--bgcolor-neutral-secondary); + + &.avatar-with-left-chevron { + grid-column: 2 / 3; + } } .no-avatar { margin-inline-end: var(--gap-s); display: flex; + + &.no-avatar-with-left-chevron { + grid-column: 2 / 3; + } } + summary { grid-column: 2 / 3; display: flex; @@ -166,15 +203,36 @@ gap: var(--gap-s); padding-inline-end: var(--gap-s); } + + .title-content-left { + grid-column: 2 / 4; + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--gap-s); + padding-inline-end: var(--gap-s); + + &.title-with-icon { + grid-column: 3 / 4; + } + } .chevron { - grid-column: 3 / -1; - margin-inline-start: auto; display: flex; align-items: center; transition: rotate 300ms ease-in-out; &[data-open='true'] { rotate: 180deg; } + + &.chevron-left { + grid-column: 1 / 2; + margin-inline-end: var(--gap-s); + } + + &.chevron-right { + grid-column: 4 / -1; + margin-inline-start: auto; + } } } article { diff --git a/v2/pink-sb/src/lib/ExpandableTable.svelte b/v2/pink-sb/src/lib/ExpandableTable.svelte new file mode 100644 index 0000000000..dcaab4983e --- /dev/null +++ b/v2/pink-sb/src/lib/ExpandableTable.svelte @@ -0,0 +1,303 @@ + + +
+ {#if showHeader && columns.length} +
+ + {#each columns as col} +
+ + {col.title} + +
+ {/each} +
+ {/if} + +
+ {#each rows as row, rowIndex (row.id)} +
+
+
+ {#if row.expandable} + + {/if} +
+ + {#each columns as col, colIndex} +
+ + {row.cells?.[col.id] ?? ''} + + + {#if row.badge && colIndex === 0} + + {/if} +
+ {/each} +
+ + {#if row.expandable && row.open && row.children} +
+ {#each row.children as child (child.id)} +
+ + {#each columns as col} +
+ + {child.cells?.[col.id] ?? ''} + +
+ {/each} +
+ {/each} +
+ {/if} +
+ {/each} +
+
+ + diff --git a/v2/pink-sb/src/lib/index.ts b/v2/pink-sb/src/lib/index.ts index c10ed07de6..bf80278c65 100644 --- a/v2/pink-sb/src/lib/index.ts +++ b/v2/pink-sb/src/lib/index.ts @@ -3,6 +3,7 @@ export { default as AvatarGroup } from './avatar/AvatarGroup.svelte'; export { default as Badge } from './Badge.svelte'; export { default as Breadcrumbs } from './Breadcrumbs.svelte'; export { default as Divider } from './Divider.svelte'; +export { default as ExpandableTable } from './ExpandableTable.svelte'; export { default as FloatingActionBar } from './FloatingActionBar.svelte'; export { default as InteractiveText } from './InteractiveText.svelte'; export { default as Root } from './Root.svelte'; @@ -28,8 +29,8 @@ export { default as Skeleton } from './Skeleton.svelte'; export { default as DirectoryPicker } from './DirectoryPicker/DirectoryPicker.svelte'; export { default as DirectoryItem } from './DirectoryPicker/DirectoryItem.svelte'; export { default as Keyboard } from './Keyboard.svelte'; -export { default as BottomSheet } from '$lib/bottom-sheet/index.js'; -export type { SheetMenu } from '$lib/bottom-sheet/index.js'; +export { default as BottomSheet } from './bottom-sheet/index.js'; +export type { SheetMenu } from './bottom-sheet/index.js'; export { default as Icon } from './Icon.svelte'; export { default as Pagination } from './pagination/Pagination.svelte'; export { default as Code } from './Code.svelte'; diff --git a/v2/pink-sb/src/stories/Accordion.stories.svelte b/v2/pink-sb/src/stories/Accordion.stories.svelte index e326b35de3..5a5389fa9d 100644 --- a/v2/pink-sb/src/stories/Accordion.stories.svelte +++ b/v2/pink-sb/src/stories/Accordion.stories.svelte @@ -39,6 +39,37 @@ You shouldn't be able to open this item. + + This accordion has the chevron positioned on the left side. + end slot + + + This accordion has the chevron positioned on the left side. + + + This accordion has both a checkbox and left-positioned chevron. + + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae nisi eveniet neque unde + minima id? + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. Aut, expedita quisquam. + Quaerat nemo dolores voluptate neque iste beatae placeat qui deleniti quibusdam + pariatur, doloremque consequatur nam animi? Voluptate consectetur repellendus vitae? + Sequi, autem officia illum aut vitae porro eum sed? + diff --git a/v2/pink-sb/src/stories/ExpandableTable.stories.svelte b/v2/pink-sb/src/stories/ExpandableTable.stories.svelte new file mode 100644 index 0000000000..1bed1c1ee6 --- /dev/null +++ b/v2/pink-sb/src/stories/ExpandableTable.stories.svelte @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + From 6325730df866f78b426dc7ee9a9a092d62d647f8 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Sat, 16 Aug 2025 12:37:35 +0000 Subject: [PATCH 02/14] fix:spacing issue --- v2/pink-sb/src/lib/ExpandableTable.svelte | 68 +++++++---------------- 1 file changed, 19 insertions(+), 49 deletions(-) diff --git a/v2/pink-sb/src/lib/ExpandableTable.svelte b/v2/pink-sb/src/lib/ExpandableTable.svelte index dcaab4983e..fa414425d3 100644 --- a/v2/pink-sb/src/lib/ExpandableTable.svelte +++ b/v2/pink-sb/src/lib/ExpandableTable.svelte @@ -41,8 +41,8 @@ // Grid column templates $: baseColumnWidths = columns.length ? columns.map((c) => c.width ?? '1fr').join(' ') : '1fr'; - $: gridTemplateColumns = `40px ${baseColumnWidths}`; - $: childGridTemplate = `0px ${baseColumnWidths}`; + $: gridTemplateColumns = baseColumnWidths; + $: childGridTemplate = baseColumnWidths; const getJustify = (align?: 'left' | 'center' | 'right') => { switch (align) { @@ -59,7 +59,6 @@
{#if showHeader && columns.length}
- {#each columns as col}
@@ -73,29 +72,22 @@
{#each rows as row, rowIndex (row.id)}
-
-
- {#if row.expandable} - - {/if} -
- +
{#each columns as col, colIndex}
+ {#if row.expandable && colIndex === 0} + + {/if} + - {#each columns as col}
From 6f0c94bc396bd9274521b26cd5e47659195dc7ff Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Sat, 16 Aug 2025 13:44:41 +0000 Subject: [PATCH 03/14] fix: responsiveness --- v2/pink-sb/src/lib/ExpandableTable.svelte | 64 +++++++++++++++++++---- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/v2/pink-sb/src/lib/ExpandableTable.svelte b/v2/pink-sb/src/lib/ExpandableTable.svelte index fa414425d3..211c0ba7fd 100644 --- a/v2/pink-sb/src/lib/ExpandableTable.svelte +++ b/v2/pink-sb/src/lib/ExpandableTable.svelte @@ -137,10 +137,10 @@ From 4f3c8720e13c4e32cbaffd287d9c33ad37693c12 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Sun, 17 Aug 2025 19:02:10 +0000 Subject: [PATCH 04/14] fix: remove left chevron variants of accordian --- v2/pink-sb/src/lib/Accordion.svelte | 98 ++++--------------- .../src/stories/Accordion.stories.svelte | 31 ------ 2 files changed, 20 insertions(+), 109 deletions(-) diff --git a/v2/pink-sb/src/lib/Accordion.svelte b/v2/pink-sb/src/lib/Accordion.svelte index ff47fad59b..243e5a7873 100644 --- a/v2/pink-sb/src/lib/Accordion.svelte +++ b/v2/pink-sb/src/lib/Accordion.svelte @@ -23,7 +23,6 @@ export let titleVariant: 'm-500' | 'm-400' | 'l-600' | 'l-500' | 'l-400' | 'm-600' | undefined = 'm-500'; export let titleColor = '--fgcolor-neutral-primary'; - export let chevronPosition: 'left' | 'right' = 'right'; // Allows user to open the accordion by pressing the enter key function clickOnEnter( @@ -62,58 +61,31 @@ {/if} {#if open}
@@ -180,21 +152,12 @@ border-radius: var(--border-radius-circle, 99999px); border: var(--border-width-s) solid var(--border-neutral-strong,); background: var(--bgcolor-neutral-secondary); - - &.avatar-with-left-chevron { - grid-column: 2 / 3; - } } .no-avatar { margin-inline-end: var(--gap-s); display: flex; - - &.no-avatar-with-left-chevron { - grid-column: 2 / 3; - } } - summary { grid-column: 2 / 3; display: flex; @@ -203,36 +166,15 @@ gap: var(--gap-s); padding-inline-end: var(--gap-s); } - - .title-content-left { - grid-column: 2 / 4; - display: flex; - align-items: center; - justify-content: space-between; - gap: var(--gap-s); - padding-inline-end: var(--gap-s); - - &.title-with-icon { - grid-column: 3 / 4; - } - } .chevron { + grid-column: 3 / -1; + margin-inline-start: auto; display: flex; align-items: center; transition: rotate 300ms ease-in-out; &[data-open='true'] { rotate: 180deg; } - - &.chevron-left { - grid-column: 1 / 2; - margin-inline-end: var(--gap-s); - } - - &.chevron-right { - grid-column: 4 / -1; - margin-inline-start: auto; - } } } article { diff --git a/v2/pink-sb/src/stories/Accordion.stories.svelte b/v2/pink-sb/src/stories/Accordion.stories.svelte index 5a5389fa9d..e326b35de3 100644 --- a/v2/pink-sb/src/stories/Accordion.stories.svelte +++ b/v2/pink-sb/src/stories/Accordion.stories.svelte @@ -39,37 +39,6 @@ You shouldn't be able to open this item. - - This accordion has the chevron positioned on the left side. - end slot - - - This accordion has the chevron positioned on the left side. - - - This accordion has both a checkbox and left-positioned chevron. - - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae nisi eveniet neque unde - minima id? - - - Lorem ipsum dolor sit, amet consectetur adipisicing elit. Aut, expedita quisquam. - Quaerat nemo dolores voluptate neque iste beatae placeat qui deleniti quibusdam - pariatur, doloremque consequatur nam animi? Voluptate consectetur repellendus vitae? - Sequi, autem officia illum aut vitae porro eum sed? - From 18909bcef54939fc5dfd568097c3a4134ab8d441 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Mon, 18 Aug 2025 08:27:01 +0000 Subject: [PATCH 05/14] feat: add slot-based API (Root/Row/Cell) --- v2/pink-sb/src/lib/ExpandableTable.svelte | 317 ------------------ .../src/lib/expandable-table/cell/Cell.svelte | 68 ++++ v2/pink-sb/src/lib/expandable-table/index.ts | 20 ++ .../src/lib/expandable-table/root/Root.svelte | 171 ++++++++++ .../src/lib/expandable-table/row/Row.svelte | 162 +++++++++ v2/pink-sb/src/lib/index.ts | 2 +- .../stories/ExpandableTable.stories.svelte | 294 ++++++++++++---- 7 files changed, 646 insertions(+), 388 deletions(-) delete mode 100644 v2/pink-sb/src/lib/ExpandableTable.svelte create mode 100644 v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte create mode 100644 v2/pink-sb/src/lib/expandable-table/index.ts create mode 100644 v2/pink-sb/src/lib/expandable-table/root/Root.svelte create mode 100644 v2/pink-sb/src/lib/expandable-table/row/Row.svelte diff --git a/v2/pink-sb/src/lib/ExpandableTable.svelte b/v2/pink-sb/src/lib/ExpandableTable.svelte deleted file mode 100644 index 211c0ba7fd..0000000000 --- a/v2/pink-sb/src/lib/ExpandableTable.svelte +++ /dev/null @@ -1,317 +0,0 @@ - - -
- {#if showHeader && columns.length} -
- {#each columns as col} -
- - {col.title} - -
- {/each} -
- {/if} - -
- {#each rows as row, rowIndex (row.id)} -
-
- {#each columns as col, colIndex} -
- {#if row.expandable && colIndex === 0} - - {/if} - - - {row.cells?.[col.id] ?? ''} - - - {#if row.badge && colIndex === 0} - - {/if} -
- {/each} -
- - {#if row.expandable && row.open && row.children} -
- {#each row.children as child (child.id)} -
- {#each columns as col} -
- - {child.cells?.[col.id] ?? ''} - -
- {/each} -
- {/each} -
- {/if} -
- {/each} -
-
- - diff --git a/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte b/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte new file mode 100644 index 0000000000..228e050f0d --- /dev/null +++ b/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte @@ -0,0 +1,68 @@ + + +
+ {#if isFirstCell && expandable} + + {/if} + +
+ + diff --git a/v2/pink-sb/src/lib/expandable-table/index.ts b/v2/pink-sb/src/lib/expandable-table/index.ts new file mode 100644 index 0000000000..323eb2eaf2 --- /dev/null +++ b/v2/pink-sb/src/lib/expandable-table/index.ts @@ -0,0 +1,20 @@ +import Root from './root/Root.svelte'; +import Row from './row/Row.svelte'; +import Cell from './cell/Cell.svelte'; + +export type RootProp = { + single: boolean; + openIds: string[]; + isOpen: (id: string) => boolean; + open: (id: string) => void; + close: (id: string) => void; + toggle: (id: string) => void; + register: (id: string) => void; + unregister: (id: string) => void; +}; + +export default { + Root, + Row, + Cell +}; diff --git a/v2/pink-sb/src/lib/expandable-table/root/Root.svelte b/v2/pink-sb/src/lib/expandable-table/root/Root.svelte new file mode 100644 index 0000000000..52153334a3 --- /dev/null +++ b/v2/pink-sb/src/lib/expandable-table/root/Root.svelte @@ -0,0 +1,171 @@ + + +
+ {#if showHeader && columns.length} +
+ + {#each columns as col} +
+ {col.title} +
+ {/each} +
+
+ {/if} + +
+ +
+
+ + diff --git a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte new file mode 100644 index 0000000000..8e0ad0ea04 --- /dev/null +++ b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte @@ -0,0 +1,162 @@ + + +
+
+ +
+ + {#if isOpen} +
+ +
+ {/if} +
+ + diff --git a/v2/pink-sb/src/lib/index.ts b/v2/pink-sb/src/lib/index.ts index bf80278c65..b1479f6c04 100644 --- a/v2/pink-sb/src/lib/index.ts +++ b/v2/pink-sb/src/lib/index.ts @@ -3,7 +3,7 @@ export { default as AvatarGroup } from './avatar/AvatarGroup.svelte'; export { default as Badge } from './Badge.svelte'; export { default as Breadcrumbs } from './Breadcrumbs.svelte'; export { default as Divider } from './Divider.svelte'; -export { default as ExpandableTable } from './ExpandableTable.svelte'; +export { default as Expandable } from './expandable-table/index.js'; export { default as FloatingActionBar } from './FloatingActionBar.svelte'; export { default as InteractiveText } from './InteractiveText.svelte'; export { default as Root } from './Root.svelte'; diff --git a/v2/pink-sb/src/stories/ExpandableTable.stories.svelte b/v2/pink-sb/src/stories/ExpandableTable.stories.svelte index 1bed1c1ee6..122b6763d9 100644 --- a/v2/pink-sb/src/stories/ExpandableTable.stories.svelte +++ b/v2/pink-sb/src/stories/ExpandableTable.stories.svelte @@ -1,19 +1,33 @@ - + + + {#each data as row, rowIndex (row.id)} + + {#each columns as col, colIndex} + root.toggle(row.id)} + > + + {row.cells?.[col.id] ?? ''} + + {#if row.badge && colIndex === 0} + + {/if} + + {/each} - - + + {#if row.children} + {#each row.children as child (child.id)} +
+ {#each columns as col} +
+ + {child.cells?.[col.id] ?? ''} + +
+ {/each} +
+ {/each} + {/if} +
+
+ {/each} +
- - + + let:root + > + {#each [{ id: 'parent1', cells: { name: 'Parent Item 1', value: '100' }, expandable: true, children: [{ id: 'child1', cells: { name: 'Child Item 1', value: '50' } }, { id: 'child2', cells: { name: 'Child Item 2', value: '50' } }] }, { id: 'parent2', cells: { name: 'Parent Item 2', value: '200' }, expandable: false }] as rows, i (rows.id)} + + root.toggle(rows.id)} + > + + {rows.cells.name} + + + root.toggle(rows.id)} + > + + {rows.cells.value} + + + + + {#if rows.children} + {#each rows.children as child} +
+
+ + {child.cells.name} + +
+
+ + {child.cells.value} + +
+
+ {/each} + {/if} +
+
+ {/each} +
- - + + let:root + > + {#each [{ id: 'service1', cells: { service: 'Premium Service', status: 'Active', amount: '$29.99' }, expandable: true, badge: { content: 'NEW', type: 'success' }, children: [{ id: 'feature1', cells: { service: 'Feature A', status: 'Included', amount: '$0.00' } }, { id: 'feature2', cells: { service: 'Feature B', status: 'Included', amount: '$0.00' } }] }, { id: 'service2', cells: { service: 'Basic Service', status: 'Active', amount: '$9.99' }, expandable: false, badge: { content: 'LEGACY', type: 'warning' } }] as rows (rows.id)} + + root.toggle(rows.id)} + > + + {rows.cells.service} + + {#if rows.badge} + + {/if} + + root.toggle(rows.id)} + > + + {rows.cells.status} + + + root.toggle(rows.id)} + > + + {rows.cells.amount} + + + + + {#if rows.children} + {#each rows.children as child} +
+
+ + {child.cells.service} + +
+
+ + {child.cells.status} + +
+
+ + {child.cells.amount} + +
+
+ {/each} + {/if} +
+
+ {/each} +
From 0f02493d9b8c3680f041f3ff579004ee773bb23e Mon Sep 17 00:00:00 2001 From: Harsh Mahajan Date: Sun, 24 Aug 2025 11:42:53 +0000 Subject: [PATCH 06/14] fix:improve type structure --- .../src/lib/expandable-table/cell/Cell.svelte | 9 +++----- v2/pink-sb/src/lib/expandable-table/index.ts | 11 +--------- .../src/lib/expandable-table/root/Root.svelte | 20 ++++-------------- .../src/lib/expandable-table/row/Row.svelte | 9 ++------ v2/pink-sb/src/lib/expandable-table/types.ts | 21 +++++++++++++++++++ .../stories/ExpandableTable.stories.svelte | 2 +- 6 files changed, 32 insertions(+), 40 deletions(-) create mode 100644 v2/pink-sb/src/lib/expandable-table/types.ts diff --git a/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte b/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte index 228e050f0d..1e57484fce 100644 --- a/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte +++ b/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte @@ -1,19 +1,16 @@ diff --git a/v2/pink-sb/src/lib/expandable-table/index.ts b/v2/pink-sb/src/lib/expandable-table/index.ts index 323eb2eaf2..937a2410b5 100644 --- a/v2/pink-sb/src/lib/expandable-table/index.ts +++ b/v2/pink-sb/src/lib/expandable-table/index.ts @@ -2,16 +2,7 @@ import Root from './root/Root.svelte'; import Row from './row/Row.svelte'; import Cell from './cell/Cell.svelte'; -export type RootProp = { - single: boolean; - openIds: string[]; - isOpen: (id: string) => boolean; - open: (id: string) => void; - close: (id: string) => void; - toggle: (id: string) => void; - register: (id: string) => void; - unregister: (id: string) => void; -}; +export type { ExpandableTableColumn, RootProp } from './types.js'; export default { Root, diff --git a/v2/pink-sb/src/lib/expandable-table/root/Root.svelte b/v2/pink-sb/src/lib/expandable-table/root/Root.svelte index 52153334a3..a1ec20b72e 100644 --- a/v2/pink-sb/src/lib/expandable-table/root/Root.svelte +++ b/v2/pink-sb/src/lib/expandable-table/root/Root.svelte @@ -1,14 +1,7 @@ @@ -92,7 +80,7 @@
{#each columns as col} -
+
{col.title}
{/each} diff --git a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte index 8e0ad0ea04..2f3a441c80 100644 --- a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte +++ b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte @@ -1,16 +1,11 @@
diff --git a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte index 6fe85ebd33..c6db3b4d8b 100644 --- a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte +++ b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte @@ -1,5 +1,6 @@ + + + + + +{#if !expandable && isFirstColumn} + + + + + +{/if} + + diff --git a/v2/pink-sb/src/lib/accordion-table/index.ts b/v2/pink-sb/src/lib/accordion-table/index.ts new file mode 100644 index 0000000000..5b05f24942 --- /dev/null +++ b/v2/pink-sb/src/lib/accordion-table/index.ts @@ -0,0 +1,49 @@ +import Root from './root/Root.svelte'; +import Row from './row/Row.svelte'; +import Cell from './cell/Cell.svelte'; +import SummaryRow from '../table/row/Base.svelte'; +import SummaryCell from '../table/cell/Base.svelte'; + +export type Align = 'left' | 'center' | 'right'; + +export type Column = { + id: string; + align?: Align; + width?: + | { + min: number; + max: number; + } + | { + min: number; + } + | number; + hide?: boolean; +}; + +export type RootProp = { + // Open state controls + single: boolean; + openIds: string[]; + isOpen: (id: string) => boolean; + open: (id: string) => void; + close: (id: string) => void; + toggle: (id: string) => void; + register: (id: string) => void; + unregister: (id: string) => void; + isFirstColumn: (id: string) => boolean; + getColumn: (id: string) => Column | undefined; + + columns: Array; + columnsCount: number; +}; + +export default { + Root, + Row, + Cell, + Summary: { + Row: SummaryRow, + Cell: SummaryCell + } +}; diff --git a/v2/pink-sb/src/lib/accordion-table/root/Root.svelte b/v2/pink-sb/src/lib/accordion-table/root/Root.svelte new file mode 100644 index 0000000000..2daf3ff8db --- /dev/null +++ b/v2/pink-sb/src/lib/accordion-table/root/Root.svelte @@ -0,0 +1,119 @@ + + +
+
+ +
+
+ + diff --git a/v2/pink-sb/src/lib/accordion-table/row/Row.svelte b/v2/pink-sb/src/lib/accordion-table/row/Row.svelte new file mode 100644 index 0000000000..8410902f01 --- /dev/null +++ b/v2/pink-sb/src/lib/accordion-table/row/Row.svelte @@ -0,0 +1,137 @@ + + +
+ {#if expandable} +
+ +
+ {:else} +
+ +
+ {/if} + + {#if isOpen} +
+ + + +
+ {/if} +
+ + diff --git a/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte new file mode 100644 index 0000000000..c229f8ce39 --- /dev/null +++ b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte @@ -0,0 +1,36 @@ + + +
+ + + +
+ + diff --git a/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte b/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte deleted file mode 100644 index 8673f6b581..0000000000 --- a/v2/pink-sb/src/lib/expandable-table/cell/Cell.svelte +++ /dev/null @@ -1,54 +0,0 @@ - - -
- {#if isFirstCell && expandable} - - {/if} - -
- - diff --git a/v2/pink-sb/src/lib/expandable-table/index.ts b/v2/pink-sb/src/lib/expandable-table/index.ts deleted file mode 100644 index 38dd36d287..0000000000 --- a/v2/pink-sb/src/lib/expandable-table/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import Root from './root/Root.svelte'; -import Row from './row/Row.svelte'; -import Cell from './cell/Cell.svelte'; - -export type ExpandableTableColumn = { - id: string; - title?: string; - width?: string; // e.g. '2fr' - align?: 'left' | 'center' | 'right'; -}; - -export type RootProp = { - single: boolean; - openIds: string[]; - isOpen: (id: string) => boolean; - open: (id: string) => void; - close: (id: string) => void; - toggle: (id: string) => void; - register: (id: string) => void; - unregister: (id: string) => void; - columns: ExpandableTableColumn[]; - gridTemplateColumns: string; - childGridTemplate: string; - alignment: (align?: 'left' | 'center' | 'right') => string; -}; - -export default { - Root, - Row, - Cell -}; diff --git a/v2/pink-sb/src/lib/expandable-table/root/Root.svelte b/v2/pink-sb/src/lib/expandable-table/root/Root.svelte deleted file mode 100644 index f308ea64ca..0000000000 --- a/v2/pink-sb/src/lib/expandable-table/root/Root.svelte +++ /dev/null @@ -1,163 +0,0 @@ - - -
- {#if showHeader && columns.length} -
- - {#each columns as col} -
- {col.title} -
- {/each} -
-
- {/if} - -
- -
-
- - diff --git a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte b/v2/pink-sb/src/lib/expandable-table/row/Row.svelte deleted file mode 100644 index c6db3b4d8b..0000000000 --- a/v2/pink-sb/src/lib/expandable-table/row/Row.svelte +++ /dev/null @@ -1,118 +0,0 @@ - - -
-
- -
- - {#if isOpen} -
- -
- {/if} -
- - diff --git a/v2/pink-sb/src/lib/index.ts b/v2/pink-sb/src/lib/index.ts index 3f93ef63b9..9bf7a42e6d 100644 --- a/v2/pink-sb/src/lib/index.ts +++ b/v2/pink-sb/src/lib/index.ts @@ -3,7 +3,6 @@ export { default as AvatarGroup } from './avatar/AvatarGroup.svelte'; export { default as Badge } from './Badge.svelte'; export { default as Breadcrumbs } from './Breadcrumbs.svelte'; export { default as Divider } from './Divider.svelte'; -export { default as Expandable } from './expandable-table/index.js'; export { default as FloatingActionBar } from './FloatingActionBar.svelte'; export { default as InteractiveText } from './InteractiveText.svelte'; export { default as Root } from './Root.svelte'; @@ -13,6 +12,7 @@ export { default as ToggleButton } from './ToggleButton.svelte'; export { default as ProgressCircle } from './ProgressCircle.svelte'; export { default as Tooltip } from './Tooltip.svelte'; export { default as Table } from './table/index.js'; +export { default as AccordionTable } from './accordion-table/index.js'; export { default as Card } from './card/index.js'; export { default as Navbar } from './navbar/index.js'; export { default as Sidebar } from './sidebar/index.js'; diff --git a/v2/pink-sb/src/lib/table/root/Base.svelte b/v2/pink-sb/src/lib/table/root/Base.svelte index 7e6e6d4dad..9417d37f3f 100644 --- a/v2/pink-sb/src/lib/table/root/Base.svelte +++ b/v2/pink-sb/src/lib/table/root/Base.svelte @@ -76,9 +76,9 @@ diff --git a/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte index c229f8ce39..2b2814b56d 100644 --- a/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte +++ b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte @@ -27,8 +27,6 @@ --p-table-background: transparent; --p-table-row-background: var(--bgcolor-neutral-default); - --border-neutral: var(--divider-color); - :global([role='row']:last-child) :global([role='cell']) { border-bottom: 0; } From 40105cc28dbe6821db8dd9e8d071fd6873848e10 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 10 Sep 2025 12:47:24 +0530 Subject: [PATCH 13/14] update: handle viewports on accordion table summary. --- .../accordion-table/summary/Summary.svelte | 67 +++++++++++++++++-- v2/pink-sb/src/lib/sidebar/Base.svelte | 1 + 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte index 2b2814b56d..f1237eb890 100644 --- a/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte +++ b/v2/pink-sb/src/lib/accordion-table/summary/Summary.svelte @@ -1,17 +1,69 @@ -
+ + +
@@ -30,5 +82,12 @@ :global([role='row']:last-child) :global([role='cell']) { border-bottom: 0; } + + &.is-mobile, + &.is-tablet { + :global([role='table']) { + grid-template-columns: var(--summary-table-grid-template) !important; + } + } } diff --git a/v2/pink-sb/src/lib/sidebar/Base.svelte b/v2/pink-sb/src/lib/sidebar/Base.svelte index d08d0ac8f1..a5b506eae9 100644 --- a/v2/pink-sb/src/lib/sidebar/Base.svelte +++ b/v2/pink-sb/src/lib/sidebar/Base.svelte @@ -27,6 +27,7 @@ + {#if resizable}