@lostgradient/cinder 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/components.json +7 -5
- package/dist/components/diff-viewer/index.js +201 -101
- package/dist/components/json-schema-editor/index.js +229 -129
- package/dist/components/markdown-editor/index.js +207 -107
- package/dist/components/review-editor/index.js +291 -191
- package/dist/components/schedule-builder/index.js +205 -105
- package/dist/components/segment/index.js +119 -56
- package/dist/components/segment/segment.schema.d.ts +2 -2
- package/dist/components/segment/segment.schema.js +71 -33
- package/dist/components/segment/segment.svelte.d.ts +2 -1
- package/dist/components/segment/segment.types.d.ts +67 -10
- package/dist/components/segmented-control/index.js +193 -93
- package/dist/components/segmented-control/segmented-control-state.svelte.d.ts +4 -4
- package/dist/components/segmented-control/segmented-control.css +26 -6
- package/dist/components/segmented-control/segmented-control.schema.js +3 -3
- package/dist/components/segmented-control/segmented-control.svelte.d.ts +2 -1
- package/dist/components/segmented-control/segmented-control.types.d.ts +4 -4
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/index.js +9 -3
- package/dist/components/sidebar/sidebar.constants.d.ts +12 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +466 -358
- package/dist/server/components/diff-viewer/index.js +4 -4
- package/dist/server/components/json-schema-editor/index.js +4 -4
- package/dist/server/components/markdown-editor/index.js +3 -3
- package/dist/server/components/review-editor/index.js +4 -4
- package/dist/server/components/schedule-builder/index.js +3 -3
- package/dist/server/components/segment/index.js +2 -2
- package/dist/server/components/segmented-control/index.js +3 -3
- package/dist/server/components/sidebar/index.js +7 -3
- package/dist/server/index.js +16 -10
- package/dist/server/{index.server-jgb8yh5k.js → index.server-2m1kenak.js} +1 -1
- package/dist/server/{index.server-jfrssta6.js → index.server-ck3fwrab.js} +1 -1
- package/dist/server/{index.server-sedjxt36.js → index.server-e89qfamd.js} +79 -35
- package/dist/server/{index.server-pag862vz.js → index.server-grgv455a.js} +2 -2
- package/dist/server/{index.server-2qj6s2mh.js → index.server-j570vb03.js} +7 -3
- package/dist/server/{index.server-xeqtpv61.js → index.server-mr68brd6.js} +49 -24
- package/dist/server/{index.server-qbkxz7r2.js → index.server-nx9c2ep1.js} +2 -2
- package/dist/server/{index.server-jj76374p.js → index.server-p071e531.js} +1 -1
- package/dist/server/{index.server-5gzyqv78.js → index.server-v3arexq8.js} +2 -2
- package/dist/server/{index.server-85p4ydph.js → index.server-zzd5wpbw.js} +1 -1
- package/package.json +1 -1
- package/src/components/segment/segment.schema.json +34 -7
- package/src/components/segment/segment.schema.ts +5 -47
- package/src/components/segment/segment.svelte +58 -23
- package/src/components/segment/segment.types.ts +81 -11
- package/src/components/segmented-control/segmented-control.css +26 -6
- package/src/components/segmented-control/segmented-control.examples.json +6 -0
- package/src/components/segmented-control/segmented-control.schema.json +2 -2
- package/src/components/segmented-control/segmented-control.schema.ts +2 -2
- package/src/components/segmented-control/segmented-control.svelte +50 -23
- package/src/components/segmented-control/segmented-control.types.ts +4 -7
- package/src/components/sidebar/index.ts +1 -0
- package/src/components/sidebar/sidebar.constants.ts +13 -0
- package/src/components/sidebar/sidebar.examples.json +6 -0
- package/src/components/sidebar/sidebar.svelte +4 -5
- package/src/index.ts +5 -1
- package/src/styles/foundation.css +2 -1
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
"title": "Basic sidebar",
|
|
9
9
|
"description": "Layout-level sidebar with brand, navigation, and footer regions. Collapse toggles icon-only mode on desktop and closes the drawer on mobile.",
|
|
10
10
|
"code": "<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { SideNavigationGroup } from '@lostgradient/cinder/side-navigation-group';\n import { SideNavigationItem } from '@lostgradient/cinder/side-navigation-item';\n import { Sidebar } from '@lostgradient/cinder/sidebar';\n let collapsed = $state(false);\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div>\n <Button\n label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n onclick={() => (collapsed = !collapsed)}\n />\n </div>\n\n <div\n style=\"display: flex; min-height: 24rem; border: 1px solid #e5e7eb; border-radius: 0.5rem; overflow: hidden;\"\n >\n <Sidebar bind:collapsed label=\"Workspace\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Workspace sections\">\n {#snippet children()}\n <SideNavigationItem href=\"#dashboard\">\n {#snippet children()}Dashboard{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#projects\" active>\n {#snippet children()}Projects{/snippet}\n </SideNavigationItem>\n <SideNavigationGroup label=\"Settings\">\n {#snippet children()}\n <SideNavigationItem href=\"#general\">\n {#snippet children()}General{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#billing\">\n {#snippet children()}Billing{/snippet}\n </SideNavigationItem>\n {/snippet}\n </SideNavigationGroup>\n {/snippet}\n </SideNavigation>\n {/snippet}\n\n {#snippet footer()}\n <NavigationItem variant=\"vertical\" href=\"#account\">\n {#snippet children()}Account{/snippet}\n </NavigationItem>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; padding: 1rem;\">\n <p>Main content area.</p>\n <p>Resize the viewport below ~767px to see the mobile drawer behavior.</p>\n </main>\n </div>\n</div>\n"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "mobile-trigger",
|
|
14
|
+
"title": "App-owned mobile trigger",
|
|
15
|
+
"description": "Use the exported Sidebar mobile media query when a top bar owns the drawer trigger outside the Sidebar.",
|
|
16
|
+
"code": "<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { SideNavigationItem } from '@lostgradient/cinder/side-navigation-item';\n import { SIDEBAR_MOBILE_MEDIA_QUERY, Sidebar } from '@lostgradient/cinder/sidebar';\n import { MediaQuery } from 'svelte/reactivity';\n\n const mobile = new MediaQuery(SIDEBAR_MOBILE_MEDIA_QUERY, false);\n let collapsed = $state(true);\n\n const triggerLabel = $derived(\n mobile.current\n ? collapsed\n ? 'Open workspace navigation'\n : 'Close workspace navigation'\n : collapsed\n ? 'Expand workspace navigation'\n : 'Collapse workspace navigation',\n );\n</script>\n\n<div\n style=\"display: flex; min-height: 24rem; border: 1px solid #e5e7eb; border-radius: 0.5rem; overflow: hidden;\"\n>\n <Sidebar id=\"workspace-sidebar\" bind:collapsed label=\"Workspace\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Workspace sections\">\n <SideNavigationItem href=\"#dashboard\">Dashboard</SideNavigationItem>\n <SideNavigationItem href=\"#projects\" active>Projects</SideNavigationItem>\n <SideNavigationItem href=\"#settings\">Settings</SideNavigationItem>\n </SideNavigation>\n {/snippet}\n\n {#snippet footer()}\n <NavigationItem variant=\"vertical\" href=\"#account\">Account</NavigationItem>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; display: flex; flex-direction: column; min-inline-size: 0;\">\n <div\n style=\"display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; border-bottom: 1px solid #e5e7eb;\"\n >\n <Button\n label={triggerLabel}\n aria-controls=\"workspace-sidebar\"\n aria-expanded={!collapsed}\n onclick={() => (collapsed = !collapsed)}\n />\n <strong>Workspace</strong>\n </div>\n\n <div style=\"padding: 1rem;\">\n <p style=\"margin: 0;\">\n The trigger lives in app chrome, while Sidebar owns the drawer state and breakpoint.\n </p>\n </div>\n </main>\n</div>\n"
|
|
11
17
|
}
|
|
12
18
|
]
|
|
13
19
|
}
|
|
@@ -7,6 +7,7 @@ import { MediaQuery } from 'svelte/reactivity';
|
|
|
7
7
|
import { setSidebarContext } from '../../_internal/sidebar-context.ts';
|
|
8
8
|
import { classNames } from '../../utilities/class-names.ts';
|
|
9
9
|
import Drawer from '../drawer/drawer.svelte';
|
|
10
|
+
import { SIDEBAR_MOBILE_MEDIA_QUERY } from './sidebar.constants.ts';
|
|
10
11
|
let { id: sidebarId, collapsed = $bindable(false), label = 'Sidebar', class: className, brand: brandSnippet, navigation: navigationSnippet, footer: footerSnippet, 'aria-label': _ariaLabelAttribute, 'aria-labelledby': _ariaLabelledbyAttribute, ...rest } = $props();
|
|
11
12
|
const validatedLabel = $derived.by(() => {
|
|
12
13
|
if (label.trim() === '') {
|
|
@@ -18,16 +19,14 @@ const validatedLabel = $derived.by(() => {
|
|
|
18
19
|
// complementary <aside> and the inner navigation are not announced as two
|
|
19
20
|
// identically-named landmarks.
|
|
20
21
|
const navigationLabel = $derived(`${validatedLabel} navigation`);
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// is required — `window.matchMedia` rejects bare media feature expressions
|
|
24
|
-
// on Firefox and Safari.
|
|
22
|
+
// The fully-parenthesized form is required — `window.matchMedia` rejects
|
|
23
|
+
// bare media feature expressions on Firefox and Safari.
|
|
25
24
|
// Keep the fallback explicit for SSR-contract test environments that resolve
|
|
26
25
|
// the client MediaQuery build while `window.matchMedia` is unavailable.
|
|
27
26
|
const hasMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia === 'function';
|
|
28
27
|
const usesSsrResponsiveFallback = !hasMatchMedia;
|
|
29
28
|
const mobile = hasMatchMedia
|
|
30
|
-
? new MediaQuery(
|
|
29
|
+
? new MediaQuery(SIDEBAR_MOBILE_MEDIA_QUERY, false)
|
|
31
30
|
: { current: false };
|
|
32
31
|
const context = {
|
|
33
32
|
get collapsed() {
|
package/src/index.ts
CHANGED
|
@@ -797,7 +797,11 @@ export type { SideNavigationGroupProps } from './components/side-navigation-grou
|
|
|
797
797
|
export { default as SideNavigationItem } from './components/side-navigation-item/index.ts';
|
|
798
798
|
export type { SideNavigationItemProps } from './components/side-navigation-item/index.ts';
|
|
799
799
|
|
|
800
|
-
export {
|
|
800
|
+
export {
|
|
801
|
+
SIDEBAR_MOBILE_BREAKPOINT,
|
|
802
|
+
SIDEBAR_MOBILE_MEDIA_QUERY,
|
|
803
|
+
default as Sidebar,
|
|
804
|
+
} from './components/sidebar/index.ts';
|
|
801
805
|
export type { SidebarProps } from './components/sidebar/index.ts';
|
|
802
806
|
|
|
803
807
|
export { default as SortableList } from './components/sortable-list/index.ts';
|
|
@@ -303,7 +303,8 @@
|
|
|
303
303
|
.cinder-dropdown-item[data-disabled],
|
|
304
304
|
.cinder-toggle:disabled,
|
|
305
305
|
.cinder-segmented-control[aria-disabled='true'],
|
|
306
|
-
.cinder-segmented-control-option:disabled
|
|
306
|
+
.cinder-segmented-control-option:disabled,
|
|
307
|
+
.cinder-segmented-control-option[aria-disabled='true']
|
|
307
308
|
) {
|
|
308
309
|
opacity: 0.6;
|
|
309
310
|
}
|