Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

next: improve tree-shaking #728

Merged
merged 26 commits into from
Oct 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/slimy-mails-argue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"bits-ui": patch
---

next: improve tree-shaking
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,7 @@ jobs:
- name: Install dependencies
run: pnpm install

- name: Build packages
run: pnpm build:packages

- run: pnpm test
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"format": "prettier --write .",
"lint": "prettier --check . && eslint .",
"lint:fix": "eslint --fix .",
"test": "pnpm -F bits-ui test"
"test": "pnpm -F \"./packages/**\" --parallel --reporter append-only --color test",
"test:components": "pnpm -F @bits-ui/tests test"
},
"keywords": [],
"author": "Hunter Johnston <https://github.com/huntabyte>",
Expand Down
11 changes: 2 additions & 9 deletions packages/bits-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,12 @@
"@sveltejs/kit": "^2.5.28",
"@sveltejs/package": "^2.3.5",
"@sveltejs/vite-plugin-svelte": "4.0.0-next.7",
"@testing-library/dom": "^10.3.1",
"@testing-library/jest-dom": "^6.4.6",
"@testing-library/svelte": "^5.2.1",
"@testing-library/user-event": "^14.5.2",
"@types/jest-axe": "^3.5.9",
"@types/node": "^20.14.10",
"@types/resize-observer-browser": "^0.1.11",
"@types/testing-library__jest-dom": "^5.14.9",
"@vitest/ui": "^2.1.1",
"csstype": "^3.1.3",
"jest-axe": "^9.0.0",
"jsdom": "^24.1.0",
"publint": "^0.2.11",
"resize-observer-polyfill": "^1.5.1",
"svelte": "5.0.0-next.260",
"svelte-check": "4.0.3",
"tslib": "^2.7.0",
Expand All @@ -57,7 +49,7 @@
"dependencies": {
"@floating-ui/core": "^1.6.4",
"@floating-ui/dom": "^1.6.7",
"@internationalized/date": "^3.5.4",
"@internationalized/date": "^3.5.6",
"clsx": "^2.1.1",
"esm-env": "^1.0.0",
"runed": "^0.15.2",
Expand All @@ -71,5 +63,6 @@
"pnpm": ">=8.7.0",
"node": ">=18"
},
"sideEffects": false,
"packageManager": "pnpm@9.6.0"
}
32 changes: 13 additions & 19 deletions packages/bits-ui/src/lib/bits/accordion/accordion.svelte.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Box, ReadableBoxedValues, WritableBoxedValues } from "$lib/internal/box.svelte.js";
import type { WithRefProps } from "$lib/internal/types.js";
import { afterTick } from "$lib/internal/afterTick.js";
import { afterTick } from "$lib/internal/after-tick.js";
import {
getAriaDisabled,
getAriaExpanded,
Expand All @@ -9,10 +9,13 @@ import {
getDataOrientation,
} from "$lib/internal/attrs.js";
import { kbd } from "$lib/internal/kbd.js";
import { useRefById } from "$lib/internal/useRefById.svelte.js";
import { type UseRovingFocusReturn, useRovingFocus } from "$lib/internal/useRovingFocus.svelte.js";
import { useRefById } from "$lib/internal/use-ref-by-id.svelte.js";
import {
type UseRovingFocusReturn,
useRovingFocus,
} from "$lib/internal/use-roving-focus.svelte.js";
import type { Orientation } from "$lib/shared/index.js";
import { createContext } from "$lib/internal/createContext.js";
import { createContext } from "$lib/internal/create-context.js";

const ACCORDION_ROOT_ATTR = "data-accordion-root";
const ACCORDION_TRIGGER_ATTR = "data-accordion-trigger";
Expand Down Expand Up @@ -163,18 +166,6 @@ export class AccordionItemState {
this.root.toggleItem(this.value.current);
};

createTrigger(props: AccordionTriggerStateProps) {
return new AccordionTriggerState(props, this);
}

createContent(props: AccordionContentStateProps) {
return new AccordionContentState(props, this);
}

createHeader(props: AccordionHeaderStateProps) {
return new AccordionHeaderState(props, this);
}

props = $derived.by(
() =>
({
Expand Down Expand Up @@ -426,13 +417,16 @@ export function useAccordionItem(props: Omit<AccordionItemStateProps, "rootState
}

export function useAccordionTrigger(props: AccordionTriggerStateProps): AccordionTriggerState {
return getAccordionItemContext().createTrigger(props);
const item = getAccordionItemContext();
return new AccordionTriggerState(props, item);
}

export function useAccordionContent(props: AccordionContentStateProps): AccordionContentState {
return getAccordionItemContext().createContent(props);
const item = getAccordionItemContext();
return new AccordionContentState(props, item);
}

export function useAccordionHeader(props: AccordionHeaderStateProps): AccordionHeaderState {
return getAccordionItemContext().createHeader(props);
const item = getAccordionItemContext();
return new AccordionHeaderState(props, item);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import { useAccordionContent } from "../accordion.svelte.js";
import type { AccordionContentProps } from "../types.js";
import { PresenceLayer } from "$lib/bits/utilities/presence-layer/index.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";

let {
child,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import { box } from "svelte-toolbelt";
import type { AccordionHeaderProps } from "../types.js";
import { useAccordionHeader } from "../accordion.svelte.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";

let {
id = useId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import { box } from "svelte-toolbelt";
import type { AccordionItemProps } from "../types.js";
import { useAccordionItem } from "../accordion.svelte.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";

let {
id = useId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import { box } from "svelte-toolbelt";
import type { AccordionTriggerProps } from "../types.js";
import { useAccordionTrigger } from "../accordion.svelte.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";

let {
disabled = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<script lang="ts">
import { type WritableBox, box } from "svelte-toolbelt";
import { useAccordionRoot } from "../accordion.svelte.js";
import type { RootProps } from "../index.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import type { AccordionRootProps } from "../types.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";
import { noop } from "$lib/internal/callbacks.js";

let {
Expand All @@ -19,7 +19,7 @@
orientation = "vertical",
controlledValue = false,
...restProps
}: RootProps = $props();
}: AccordionRootProps = $props();

value === undefined && (value = type === "single" ? "" : []);

Expand Down
13 changes: 13 additions & 0 deletions packages/bits-ui/src/lib/bits/accordion/exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export { default as Root } from "./components/accordion.svelte";
export { default as Item } from "./components/accordion-item.svelte";
export { default as Header } from "./components/accordion-header.svelte";
export { default as Trigger } from "./components/accordion-trigger.svelte";
export { default as Content } from "./components/accordion-content.svelte";

export type {
AccordionRootProps as RootProps,
AccordionItemProps as ItemProps,
AccordionHeaderProps as HeaderProps,
AccordionTriggerProps as TriggerProps,
AccordionContentProps as ContentProps,
} from "./types.js";
14 changes: 1 addition & 13 deletions packages/bits-ui/src/lib/bits/accordion/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1 @@
export { default as Root } from "./components/accordion.svelte";
export { default as Item } from "./components/accordion-item.svelte";
export { default as Header } from "./components/accordion-header.svelte";
export { default as Trigger } from "./components/accordion-trigger.svelte";
export { default as Content } from "./components/accordion-content.svelte";

export type {
AccordionRootProps as RootProps,
AccordionItemProps as ItemProps,
AccordionHeaderProps as HeaderProps,
AccordionTriggerProps as TriggerProps,
AccordionContentProps as ContentProps,
} from "./types.js";
export * as Accordion from "./exports.js";
2 changes: 1 addition & 1 deletion packages/bits-ui/src/lib/bits/accordion/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type BaseAccordionRootPropsWithoutHTML = {
loop?: boolean;

/**
* The orienation of the accordion.
* The orientation of the accordion.
*
* @defaultValue "vertical"
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<script lang="ts">
import { box } from "svelte-toolbelt";
import type { ActionProps } from "../index.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import type { AlertDialogActionProps } from "../types.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";
import { useAlertDialogAction } from "$lib/bits/dialog/dialog.svelte.js";

let {
Expand All @@ -11,7 +11,7 @@
id = useId(),
ref = $bindable(null),
...restProps
}: ActionProps = $props();
}: AlertDialogActionProps = $props();

const actionState = useAlertDialogAction({
id: box.with(() => id),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
<script lang="ts">
import { box } from "svelte-toolbelt";
import type { CancelProps } from "../index.js";
import type { AlertDialogCancelProps } from "../types.js";
import { useAlertDialogCancel } from "$lib/bits/dialog/dialog.svelte.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/use-id.js";
import { mergeProps } from "$lib/internal/merge-props.js";

let {
id = useId(),
ref = $bindable(null),
children,
child,
...restProps
}: CancelProps = $props();
}: AlertDialogCancelProps = $props();

const cancelState = useAlertDialogCancel({
id: box.with(() => id),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<script lang="ts">
import { box } from "svelte-toolbelt";
import type { ContentProps } from "../index.js";
import type { AlertDialogContentProps } from "../types.js";
import DismissibleLayer from "$lib/bits/utilities/dismissible-layer/dismissible-layer.svelte";
import EscapeLayer from "$lib/bits/utilities/escape-layer/escape-layer.svelte";
import FocusScope from "$lib/bits/utilities/focus-scope/focus-scope.svelte";
import PresenceLayer from "$lib/bits/utilities/presence-layer/presence-layer.svelte";
import TextSelectionLayer from "$lib/bits/utilities/text-selection-layer/text-selection-layer.svelte";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";
import { noop } from "$lib/internal/callbacks.js";
import ScrollLock from "$lib/bits/utilities/scroll-lock/scroll-lock.svelte";
import { useDialogContent } from "$lib/bits/dialog/dialog.svelte.js";
Expand All @@ -26,7 +26,7 @@
preventScroll = true,
trapFocus = true,
...restProps
}: ContentProps = $props();
}: AlertDialogContentProps = $props();

const contentState = useDialogContent({
id: box.with(() => id),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts">
import { box } from "svelte-toolbelt";
import type { RootProps } from "../index.js";
import type { AlertDialogRootProps } from "../types.js";
import { noop } from "$lib/internal/callbacks.js";
import { useDialogRoot } from "$lib/bits/dialog/dialog.svelte.js";

Expand All @@ -9,7 +9,7 @@
onOpenChange = noop,
controlledOpen = false,
children,
}: RootProps = $props();
}: AlertDialogRootProps = $props();

useDialogRoot({
variant: box.with(() => "alert-dialog"),
Expand Down
21 changes: 21 additions & 0 deletions packages/bits-ui/src/lib/bits/alert-dialog/exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
export { default as Root } from "./components/alert-dialog.svelte";
export { default as Title } from "$lib/bits/dialog/components/dialog-title.svelte";
export { default as Action } from "./components/alert-dialog-action.svelte";
export { default as Cancel } from "./components/alert-dialog-cancel.svelte";
export { default as Portal } from "$lib/bits/utilities/portal/portal.svelte";
export { default as Content } from "./components/alert-dialog-content.svelte";
export { default as Overlay } from "$lib/bits/dialog/components/dialog-overlay.svelte";
export { default as Trigger } from "$lib/bits/dialog/components/dialog-trigger.svelte";
export { default as Description } from "$lib/bits/dialog/components/dialog-description.svelte";

export type {
AlertDialogRootProps as RootProps,
AlertDialogTitleProps as TitleProps,
AlertDialogActionProps as ActionProps,
AlertDialogCancelProps as CancelProps,
AlertDialogPortalProps as PortalProps,
AlertDialogContentProps as ContentProps,
AlertDialogOverlayProps as OverlayProps,
AlertDialogTriggerProps as TriggerProps,
AlertDialogDescriptionProps as DescriptionProps,
} from "./types.js";
22 changes: 1 addition & 21 deletions packages/bits-ui/src/lib/bits/alert-dialog/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1 @@
export { default as Root } from "./components/alert-dialog.svelte";
export { default as Title } from "$lib/bits/dialog/components/dialog-title.svelte";
export { default as Action } from "./components/alert-dialog-action.svelte";
export { default as Cancel } from "./components/alert-dialog-cancel.svelte";
export { default as Portal } from "$lib/bits/utilities/portal/portal.svelte";
export { default as Content } from "./components/alert-dialog-content.svelte";
export { default as Overlay } from "$lib/bits/dialog/components/dialog-overlay.svelte";
export { default as Trigger } from "$lib/bits/dialog/components/dialog-trigger.svelte";
export { default as Description } from "$lib/bits/dialog/components/dialog-description.svelte";

export type {
AlertDialogRootProps as RootProps,
AlertDialogTitleProps as TitleProps,
AlertDialogActionProps as ActionProps,
AlertDialogCancelProps as CancelProps,
AlertDialogPortalProps as PortalProps,
AlertDialogContentProps as ContentProps,
AlertDialogOverlayProps as OverlayProps,
AlertDialogTriggerProps as TriggerProps,
AlertDialogDescriptionProps as DescriptionProps,
} from "./types.js";
export * as AlertDialog from "./exports.js";
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useRefById } from "$lib/internal/useRefById.svelte.js";
import { useRefById } from "$lib/internal/use-ref-by-id.svelte.js";
import type { ReadableBoxedValues } from "$lib/internal/box.svelte.js";
import type { WithRefProps } from "$lib/internal/types.js";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<script lang="ts">
import { box } from "svelte-toolbelt";
import type { RootProps } from "../index.js";
import type { AspectRatioRootProps } from "../types.js";
import { useAspectRatioRoot } from "../aspect-ratio.svelte.js";
import { mergeProps } from "$lib/internal/mergeProps.js";
import { useId } from "$lib/internal/useId.js";
import { mergeProps } from "$lib/internal/merge-props.js";
import { useId } from "$lib/internal/use-id.js";

let {
ref = $bindable(null),
Expand All @@ -12,7 +12,7 @@
children,
child,
...restProps
}: RootProps = $props();
}: AspectRatioRootProps = $props();

const rootState = useAspectRatioRoot({
id: box.with(() => id),
Expand Down
3 changes: 3 additions & 0 deletions packages/bits-ui/src/lib/bits/aspect-ratio/exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export { default as Root } from "./components/aspect-ratio.svelte";

export type { AspectRatioRootProps as RootProps } from "./types.js";
4 changes: 1 addition & 3 deletions packages/bits-ui/src/lib/bits/aspect-ratio/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
export { default as Root } from "./components/aspect-ratio.svelte";

export type { AspectRatioProps as RootProps } from "./types.js";
export * as AspectRatio from "./exports.js";
Loading