├── .github └── workflows │ └── pull-request.yaml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .prettierrc ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── eslint.config.js ├── package.json ├── packages ├── ui-ingredients-plugin-tailwindcss │ ├── README.md │ ├── package.json │ ├── src │ │ ├── index.test.ts │ │ └── index.ts │ ├── tsconfig.json │ ├── tsup.config.ts │ └── vitest.config.ts └── ui-ingredients │ ├── README.md │ ├── package.json │ ├── src │ ├── app.css │ ├── app.d.ts │ ├── app.html │ ├── lib │ │ ├── accordion │ │ │ ├── accordion-anatomy.ts │ │ │ ├── accordion-context.svelte.ts │ │ │ ├── accordion-item-content.svelte │ │ │ ├── accordion-item-indicator.svelte │ │ │ ├── accordion-item-trigger.svelte │ │ │ ├── accordion-item.svelte │ │ │ ├── accordion-root.svelte │ │ │ ├── accordion.ts │ │ │ ├── create-accordion.svelte.ts │ │ │ └── index.ts │ │ ├── alert-dialog │ │ │ ├── alert-dialog-anatomy.ts │ │ │ ├── alert-dialog-backdrop.svelte │ │ │ ├── alert-dialog-close-trigger.svelte │ │ │ ├── alert-dialog-content.svelte │ │ │ ├── alert-dialog-context.svelte.ts │ │ │ ├── alert-dialog-description.svelte │ │ │ ├── alert-dialog-positioner.svelte │ │ │ ├── alert-dialog-root.svelte │ │ │ ├── alert-dialog-title.svelte │ │ │ ├── alert-dialog-trigger.svelte │ │ │ ├── alert-dialog.ts │ │ │ ├── create-alert-dialog.svelte.ts │ │ │ └── index.ts │ │ ├── alert │ │ │ ├── alert-anatomy.ts │ │ │ ├── alert-context.ts │ │ │ ├── alert-description.svelte │ │ │ ├── alert-indicator.svelte │ │ │ ├── alert-root.svelte │ │ │ ├── alert-title.svelte │ │ │ ├── alert.ts │ │ │ ├── create-alert.svelte.ts │ │ │ └── index.ts │ │ ├── anatomy.ts │ │ ├── angle-slider │ │ │ ├── angle-slider-anatomy.ts │ │ │ ├── angle-slider-context.svelte.ts │ │ │ ├── angle-slider-control.svelte │ │ │ ├── angle-slider-hidden-input.svelte │ │ │ ├── angle-slider-label.svelte │ │ │ ├── angle-slider-marker-group.svelte │ │ │ ├── angle-slider-marker.svelte │ │ │ ├── angle-slider-root.svelte │ │ │ ├── angle-slider-thumb.svelte │ │ │ ├── angle-slider-value-text.svelte │ │ │ ├── angle-slider.ts │ │ │ ├── create-angle-slider.svelte.ts │ │ │ └── index.ts │ │ ├── avatar │ │ │ ├── avatar-anatomy.ts │ │ │ ├── avatar-context.svelte.ts │ │ │ ├── avatar-fallback.svelte │ │ │ ├── avatar-image.svelte │ │ │ ├── avatar-root.svelte │ │ │ ├── avatar.ts │ │ │ ├── create-avatar.svelte.ts │ │ │ └── index.ts │ │ ├── breadcrumbs │ │ │ ├── breadcrumbs-anatomy.ts │ │ │ ├── breadcrumbs-context.svelte.ts │ │ │ ├── breadcrumbs-item.svelte │ │ │ ├── breadcrumbs-link.svelte │ │ │ ├── breadcrumbs-list.svelte │ │ │ ├── breadcrumbs-root.svelte │ │ │ ├── breadcrumbs-separator.svelte │ │ │ ├── breadcrumbs.ts │ │ │ ├── create-breadcrumbs.ts │ │ │ └── index.ts │ │ ├── carousel │ │ │ ├── carousel-anatomy.ts │ │ │ ├── carousel-autoplay-trigger.svelte │ │ │ ├── carousel-context.svelte.ts │ │ │ ├── carousel-control.svelte │ │ │ ├── carousel-indicator-group.svelte │ │ │ ├── carousel-indicator.svelte │ │ │ ├── carousel-item-group.svelte │ │ │ ├── carousel-item.svelte │ │ │ ├── carousel-next-trigger.svelte │ │ │ ├── carousel-prev-trigger.svelte │ │ │ ├── carousel-root.svelte │ │ │ ├── carousel.ts │ │ │ ├── create-carousel.svelte.ts │ │ │ └── index.ts │ │ ├── checkbox │ │ │ ├── checkbox-anatomy.ts │ │ │ ├── checkbox-context.svelte.ts │ │ │ ├── checkbox-control.svelte │ │ │ ├── checkbox-hidden-input.svelte │ │ │ ├── checkbox-indicator.svelte │ │ │ ├── checkbox-label.svelte │ │ │ ├── checkbox-root.svelte │ │ │ ├── checkbox.ts │ │ │ ├── create-checkbox.svelte.ts │ │ │ └── index.ts │ │ ├── clipboard │ │ │ ├── clipboard-anatomy.ts │ │ │ ├── clipboard-context.svelte.ts │ │ │ ├── clipboard-control.svelte │ │ │ ├── clipboard-indicator.svelte │ │ │ ├── clipboard-input.svelte │ │ │ ├── clipboard-label.svelte │ │ │ ├── clipboard-root.svelte │ │ │ ├── clipboard-trigger.svelte │ │ │ ├── clipboard.ts │ │ │ ├── create-clipboard.svelte.ts │ │ │ └── index.ts │ │ ├── collapsible │ │ │ ├── collapsible-anatomy.ts │ │ │ ├── collapsible-content.svelte │ │ │ ├── collapsible-context.svelte.ts │ │ │ ├── collapsible-root.svelte │ │ │ ├── collapsible-trigger.svelte │ │ │ ├── collapsible.ts │ │ │ ├── create-collapsible.svelte.ts │ │ │ └── index.ts │ │ ├── collection.ts │ │ ├── color-picker │ │ │ ├── color-picker-anatomy.ts │ │ │ ├── color-picker-area-background.svelte │ │ │ ├── color-picker-area-thumb.svelte │ │ │ ├── color-picker-area.svelte │ │ │ ├── color-picker-channel-input.svelte │ │ │ ├── color-picker-channel-slider-label.svelte │ │ │ ├── color-picker-channel-slider-thumb.svelte │ │ │ ├── color-picker-channel-slider-track.svelte │ │ │ ├── color-picker-channel-slider-value-text.svelte │ │ │ ├── color-picker-channel-slider.svelte │ │ │ ├── color-picker-content.svelte │ │ │ ├── color-picker-context.svelte.ts │ │ │ ├── color-picker-control.svelte │ │ │ ├── color-picker-eye-dropper-trigger.svelte │ │ │ ├── color-picker-format-select.svelte │ │ │ ├── color-picker-format-trigger.svelte │ │ │ ├── color-picker-hidden-input.svelte │ │ │ ├── color-picker-label.svelte │ │ │ ├── color-picker-positioner.svelte │ │ │ ├── color-picker-root.svelte │ │ │ ├── color-picker-swatch-group.svelte │ │ │ ├── color-picker-swatch-indicator.svelte │ │ │ ├── color-picker-swatch-trigger.svelte │ │ │ ├── color-picker-swatch.svelte │ │ │ ├── color-picker-transparency-grid.svelte │ │ │ ├── color-picker-trigger.svelte │ │ │ ├── color-picker-value-swatch.svelte │ │ │ ├── color-picker-value-text.svelte │ │ │ ├── color-picker-view.svelte │ │ │ ├── color-picker.ts │ │ │ ├── create-color-picker.svelte.ts │ │ │ └── index.ts │ │ ├── combobox │ │ │ ├── combobox-anatomy.ts │ │ │ ├── combobox-clear-trigger.svelte │ │ │ ├── combobox-content.svelte │ │ │ ├── combobox-context.svelte.ts │ │ │ ├── combobox-control.svelte │ │ │ ├── combobox-input.svelte │ │ │ ├── combobox-item-group-label.svelte │ │ │ ├── combobox-item-group.svelte │ │ │ ├── combobox-item-indicator.svelte │ │ │ ├── combobox-item-text.svelte │ │ │ ├── combobox-item.svelte │ │ │ ├── combobox-label.svelte │ │ │ ├── combobox-list.svelte │ │ │ ├── combobox-positioner.svelte │ │ │ ├── combobox-root.svelte │ │ │ ├── combobox-trigger.svelte │ │ │ ├── combobox.ts │ │ │ ├── create-combobox.svelte.ts │ │ │ └── index.ts │ │ ├── create-context.svelte.ts │ │ ├── create-context.test.ts │ │ ├── create-split-props.test.ts │ │ ├── create-split-props.ts │ │ ├── date-picker │ │ │ ├── create-date-picker.svelte.ts │ │ │ ├── date-picker-anatomy.ts │ │ │ ├── date-picker-clear-trigger.svelte │ │ │ ├── date-picker-content.svelte │ │ │ ├── date-picker-context.svelte.ts │ │ │ ├── date-picker-control.svelte │ │ │ ├── date-picker-day-table-cell-trigger.svelte │ │ │ ├── date-picker-day-table-cell.svelte │ │ │ ├── date-picker-input.svelte │ │ │ ├── date-picker-label.svelte │ │ │ ├── date-picker-month-select.svelte │ │ │ ├── date-picker-month-table-cell-trigger.svelte │ │ │ ├── date-picker-month-table-cell.svelte │ │ │ ├── date-picker-next-trigger.svelte │ │ │ ├── date-picker-positioner.svelte │ │ │ ├── date-picker-preset-trigger.svelte │ │ │ ├── date-picker-prev-trigger.svelte │ │ │ ├── date-picker-range-text.svelte │ │ │ ├── date-picker-root.svelte │ │ │ ├── date-picker-table-body.svelte │ │ │ ├── date-picker-table-head.svelte │ │ │ ├── date-picker-table-header.svelte │ │ │ ├── date-picker-table-row.svelte │ │ │ ├── date-picker-table.svelte │ │ │ ├── date-picker-trigger.svelte │ │ │ ├── date-picker-view-control.svelte │ │ │ ├── date-picker-view-trigger.svelte │ │ │ ├── date-picker-view.svelte │ │ │ ├── date-picker-year-select.svelte │ │ │ ├── date-picker-year-table-cell-trigger.svelte │ │ │ ├── date-picker-year-table-cell.svelte │ │ │ ├── date-picker.ts │ │ │ └── index.ts │ │ ├── dialog │ │ │ ├── create-dialog.svelte.ts │ │ │ ├── dialog-anatomy.ts │ │ │ ├── dialog-backdrop.svelte │ │ │ ├── dialog-close-trigger.svelte │ │ │ ├── dialog-content.svelte │ │ │ ├── dialog-context.svelte.ts │ │ │ ├── dialog-description.svelte │ │ │ ├── dialog-positioner.svelte │ │ │ ├── dialog-root.svelte │ │ │ ├── dialog-title.svelte │ │ │ ├── dialog-trigger.svelte │ │ │ ├── dialog.ts │ │ │ └── index.ts │ │ ├── drawer │ │ │ ├── create-drawer.svelte.ts │ │ │ ├── drawer-anatomy.ts │ │ │ ├── drawer-backdrop.svelte │ │ │ ├── drawer-body.svelte │ │ │ ├── drawer-close-trigger.svelte │ │ │ ├── drawer-content.svelte │ │ │ ├── drawer-context.svelte.ts │ │ │ ├── drawer-description.svelte │ │ │ ├── drawer-footer.svelte │ │ │ ├── drawer-header.svelte │ │ │ ├── drawer-positioner.svelte │ │ │ ├── drawer-root.svelte │ │ │ ├── drawer-title.svelte │ │ │ ├── drawer-trigger.svelte │ │ │ ├── drawer.ts │ │ │ └── index.ts │ │ ├── editable │ │ │ ├── create-editable.svelte.ts │ │ │ ├── editable-anatomy.ts │ │ │ ├── editable-area.svelte │ │ │ ├── editable-cancel-trigger.svelte │ │ │ ├── editable-context.svelte.ts │ │ │ ├── editable-control.svelte │ │ │ ├── editable-edit-trigger.svelte │ │ │ ├── editable-input.svelte │ │ │ ├── editable-label.svelte │ │ │ ├── editable-preview.svelte │ │ │ ├── editable-root.svelte │ │ │ ├── editable-submit-trigger.svelte │ │ │ ├── editable.ts │ │ │ └── index.ts │ │ ├── environment-provider │ │ │ ├── enviroment-provider-context.svelte.ts │ │ │ ├── environment-provider.svelte │ │ │ └── index.ts │ │ ├── field │ │ │ ├── create-field.svelte.ts │ │ │ ├── field-anatomy.ts │ │ │ ├── field-context.svelte.ts │ │ │ ├── field-error-text.svelte │ │ │ ├── field-helper-text.svelte │ │ │ ├── field-input.svelte │ │ │ ├── field-label.svelte │ │ │ ├── field-required-indicator.svelte │ │ │ ├── field-root.svelte │ │ │ ├── field-select.svelte │ │ │ ├── field-textarea.svelte │ │ │ ├── field.ts │ │ │ └── index.ts │ │ ├── file-upload │ │ │ ├── create-file-upload.svelte.ts │ │ │ ├── file-upload-anatomy.ts │ │ │ ├── file-upload-clear-trigger.svelte │ │ │ ├── file-upload-context.svelte.ts │ │ │ ├── file-upload-dropzone.svelte │ │ │ ├── file-upload-hidden-input.svelte │ │ │ ├── file-upload-item-delete-trigger.svelte │ │ │ ├── file-upload-item-group.svelte │ │ │ ├── file-upload-item-name.svelte │ │ │ ├── file-upload-item-preview-image.svelte │ │ │ ├── file-upload-item-preview.svelte │ │ │ ├── file-upload-item-size-text.svelte │ │ │ ├── file-upload-item.svelte │ │ │ ├── file-upload-label.svelte │ │ │ ├── file-upload-root.svelte │ │ │ ├── file-upload-trigger.svelte │ │ │ ├── file-upload.ts │ │ │ └── index.ts │ │ ├── floating-panel │ │ │ ├── create-floating-panel.svelte.ts │ │ │ ├── floating-panel-anatomy.ts │ │ │ ├── floating-panel-body.svelte │ │ │ ├── floating-panel-close-trigger.svelte │ │ │ ├── floating-panel-content.svelte │ │ │ ├── floating-panel-context.svelte.ts │ │ │ ├── floating-panel-control.svelte │ │ │ ├── floating-panel-drag-trigger.svelte │ │ │ ├── floating-panel-header.svelte │ │ │ ├── floating-panel-positioner.svelte │ │ │ ├── floating-panel-resize-trigger.svelte │ │ │ ├── floating-panel-root.svelte │ │ │ ├── floating-panel-stage-trigger.svelte │ │ │ ├── floating-panel-title.svelte │ │ │ ├── floating-panel-trigger.svelte │ │ │ ├── floating-panel.ts │ │ │ └── index.ts │ │ ├── focus-trap │ │ │ ├── focus-trap.svelte │ │ │ └── index.ts │ │ ├── highlight │ │ │ ├── highlight.svelte │ │ │ └── index.ts │ │ ├── hover-card │ │ │ ├── create-hover-card.svelte.ts │ │ │ ├── hover-card-anatomy.ts │ │ │ ├── hover-card-arrow-tip.svelte │ │ │ ├── hover-card-arrow.svelte │ │ │ ├── hover-card-content.svelte │ │ │ ├── hover-card-context.svelte.ts │ │ │ ├── hover-card-positioner.svelte │ │ │ ├── hover-card-root.svelte │ │ │ ├── hover-card-trigger.svelte │ │ │ ├── hover-card.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── listbox │ │ │ ├── create-listbox.svelte.ts │ │ │ ├── index.ts │ │ │ ├── listbox-anatomy.ts │ │ │ ├── listbox-content.svelte │ │ │ ├── listbox-context.svelte.ts │ │ │ ├── listbox-input.svelte │ │ │ ├── listbox-item-group-label.svelte │ │ │ ├── listbox-item-group.svelte │ │ │ ├── listbox-item-indicator.svelte │ │ │ ├── listbox-item-text.svelte │ │ │ ├── listbox-item.svelte │ │ │ ├── listbox-label.svelte │ │ │ ├── listbox-root.svelte │ │ │ ├── listbox-value-text.svelte │ │ │ └── listbox.ts │ │ ├── locale-provider │ │ │ ├── index.ts │ │ │ ├── locale-provider-context.svelte.ts │ │ │ └── locale-provider.svelte │ │ ├── menu │ │ │ ├── create-menu.svelte.ts │ │ │ ├── index.ts │ │ │ ├── menu-anatomy.ts │ │ │ ├── menu-arrow-tip.svelte │ │ │ ├── menu-arrow.svelte │ │ │ ├── menu-content.svelte │ │ │ ├── menu-context-trigger.svelte │ │ │ ├── menu-context.svelte.ts │ │ │ ├── menu-indicator.svelte │ │ │ ├── menu-item-group-label.svelte │ │ │ ├── menu-item-group.svelte │ │ │ ├── menu-item.svelte │ │ │ ├── menu-option-item-indicator.svelte │ │ │ ├── menu-option-item-text.svelte │ │ │ ├── menu-option-item.svelte │ │ │ ├── menu-positioner.svelte │ │ │ ├── menu-root.svelte │ │ │ ├── menu-separator.svelte │ │ │ ├── menu-trigger-item.svelte │ │ │ ├── menu-trigger.svelte │ │ │ └── menu.ts │ │ ├── merge-props.test.ts │ │ ├── merge-props.ts │ │ ├── number-input │ │ │ ├── create-number-input.svelte.ts │ │ │ ├── index.ts │ │ │ ├── number-input-anatomy.ts │ │ │ ├── number-input-context.svelte.ts │ │ │ ├── number-input-control.svelte │ │ │ ├── number-input-decrement-trigger.svelte │ │ │ ├── number-input-increment-trigger.svelte │ │ │ ├── number-input-input.svelte │ │ │ ├── number-input-label.svelte │ │ │ ├── number-input-root.svelte │ │ │ ├── number-input-scrubber.svelte │ │ │ ├── number-input-value-text.svelte │ │ │ └── number-input.ts │ │ ├── pagination │ │ │ ├── create-pagination.svelte.ts │ │ │ ├── index.ts │ │ │ ├── pagination-anatomy.ts │ │ │ ├── pagination-context.svelte.ts │ │ │ ├── pagination-ellipsis.svelte │ │ │ ├── pagination-item.svelte │ │ │ ├── pagination-next-trigger.svelte │ │ │ ├── pagination-prev-trigger.svelte │ │ │ ├── pagination-root.svelte │ │ │ └── pagination.ts │ │ ├── pin-input │ │ │ ├── create-pin-input.svelte.ts │ │ │ ├── index.ts │ │ │ ├── pin-input-anatomy.ts │ │ │ ├── pin-input-context.svelte.ts │ │ │ ├── pin-input-control.svelte │ │ │ ├── pin-input-hidden-input.svelte │ │ │ ├── pin-input-input.svelte │ │ │ ├── pin-input-label.svelte │ │ │ ├── pin-input-root.svelte │ │ │ └── pin-input.ts │ │ ├── popover │ │ │ ├── create-popover.svelte.ts │ │ │ ├── index.ts │ │ │ ├── popover-anatomy.ts │ │ │ ├── popover-anchor.svelte │ │ │ ├── popover-arrow-tip.svelte │ │ │ ├── popover-arrow.svelte │ │ │ ├── popover-close-trigger.svelte │ │ │ ├── popover-content.svelte │ │ │ ├── popover-context.svelte.ts │ │ │ ├── popover-description.svelte │ │ │ ├── popover-indicator.svelte │ │ │ ├── popover-positioner.svelte │ │ │ ├── popover-root.svelte │ │ │ ├── popover-title.svelte │ │ │ ├── popover-trigger.svelte │ │ │ └── popover.ts │ │ ├── portal │ │ │ ├── index.ts │ │ │ ├── portal-context.svelte.ts │ │ │ ├── portal-provider.svelte │ │ │ └── portal.svelte │ │ ├── presence │ │ │ ├── create-presence.svelte.ts │ │ │ ├── index.ts │ │ │ ├── presence-context.svelte.ts │ │ │ └── presence.svelte │ │ ├── progress │ │ │ ├── create-progress.svelte.ts │ │ │ ├── index.ts │ │ │ ├── progress-anatomy.ts │ │ │ ├── progress-circle-range.svelte │ │ │ ├── progress-circle-track.svelte │ │ │ ├── progress-circle.svelte │ │ │ ├── progress-context.svelte.ts │ │ │ ├── progress-label.svelte │ │ │ ├── progress-range.svelte │ │ │ ├── progress-root.svelte │ │ │ ├── progress-track.svelte │ │ │ ├── progress-value-text.svelte │ │ │ ├── progress-view.svelte │ │ │ └── progress.ts │ │ ├── qr-code │ │ │ ├── create-qr-code.svelte.ts │ │ │ ├── index.ts │ │ │ ├── qr-code-anatomy.ts │ │ │ ├── qr-code-context.svelte.ts │ │ │ ├── qr-code-download-trigger.svelte │ │ │ ├── qr-code-frame.svelte │ │ │ ├── qr-code-overlay.svelte │ │ │ ├── qr-code-pattern.svelte │ │ │ ├── qr-code-root.svelte │ │ │ └── qr-code.ts │ │ ├── radio-group │ │ │ ├── create-radio-group.svelte.ts │ │ │ ├── index.ts │ │ │ ├── radio-group-anatomy.ts │ │ │ ├── radio-group-context.svelte.ts │ │ │ ├── radio-group-indicator.svelte │ │ │ ├── radio-group-item-control.svelte │ │ │ ├── radio-group-item-hidden-input.svelte │ │ │ ├── radio-group-item-text.svelte │ │ │ ├── radio-group-item.svelte │ │ │ ├── radio-group-label.svelte │ │ │ ├── radio-group-root.svelte │ │ │ └── radio-group.ts │ │ ├── rating-group │ │ │ ├── create-rating-group.svelte.ts │ │ │ ├── index.ts │ │ │ ├── rating-group-anatomy.ts │ │ │ ├── rating-group-context.svelte.ts │ │ │ ├── rating-group-control.svelte │ │ │ ├── rating-group-hidden-input.svelte │ │ │ ├── rating-group-item.svelte │ │ │ ├── rating-group-label.svelte │ │ │ ├── rating-group-root.svelte │ │ │ └── rating-group.ts │ │ ├── segment-group │ │ │ ├── create-segment-group.svelte.ts │ │ │ ├── index.ts │ │ │ ├── segment-group-anatomy.ts │ │ │ ├── segment-group-context.svelte.ts │ │ │ ├── segment-group-indicator.svelte │ │ │ ├── segment-group-item-control.svelte │ │ │ ├── segment-group-item-hidden-input.svelte │ │ │ ├── segment-group-item-text.svelte │ │ │ ├── segment-group-item.svelte │ │ │ ├── segment-group-label.svelte │ │ │ ├── segment-group-root.svelte │ │ │ └── segment-group.ts │ │ ├── select │ │ │ ├── create-select.svelte.ts │ │ │ ├── index.ts │ │ │ ├── select-anatomy.ts │ │ │ ├── select-clear-trigger.svelte │ │ │ ├── select-content.svelte │ │ │ ├── select-context.svelte.ts │ │ │ ├── select-control.svelte │ │ │ ├── select-hidden-select.svelte │ │ │ ├── select-indicator.svelte │ │ │ ├── select-item-group-label.svelte │ │ │ ├── select-item-group.svelte │ │ │ ├── select-item-indicator.svelte │ │ │ ├── select-item-text.svelte │ │ │ ├── select-item.svelte │ │ │ ├── select-label.svelte │ │ │ ├── select-list.svelte │ │ │ ├── select-positioner.svelte │ │ │ ├── select-root.svelte │ │ │ ├── select-trigger.svelte │ │ │ ├── select-value-text.svelte │ │ │ └── select.ts │ │ ├── signature-pad │ │ │ ├── create-signature-pad.svelte.ts │ │ │ ├── index.ts │ │ │ ├── signature-pad-anatomy.ts │ │ │ ├── signature-pad-clear-trigger.svelte │ │ │ ├── signature-pad-context.svelte.ts │ │ │ ├── signature-pad-control.svelte │ │ │ ├── signature-pad-current-segment-path.svelte │ │ │ ├── signature-pad-guide.svelte │ │ │ ├── signature-pad-hidden-input.svelte │ │ │ ├── signature-pad-label.svelte │ │ │ ├── signature-pad-root.svelte │ │ │ ├── signature-pad-segment-path.svelte │ │ │ ├── signature-pad-segment.svelte │ │ │ └── signature-pad.ts │ │ ├── slider │ │ │ ├── create-slider.svelte.ts │ │ │ ├── index.ts │ │ │ ├── slider-anatomy.ts │ │ │ ├── slider-context.svelte.ts │ │ │ ├── slider-control.svelte │ │ │ ├── slider-dragging-indicator.svelte │ │ │ ├── slider-hidden-input.svelte │ │ │ ├── slider-label.svelte │ │ │ ├── slider-marker-group.svelte │ │ │ ├── slider-marker.svelte │ │ │ ├── slider-range.svelte │ │ │ ├── slider-root.svelte │ │ │ ├── slider-thumb.svelte │ │ │ ├── slider-track.svelte │ │ │ ├── slider-value-text.svelte │ │ │ └── slider.ts │ │ ├── splitter │ │ │ ├── create-splitter.svelte.ts │ │ │ ├── index.ts │ │ │ ├── splitter-anatomy.ts │ │ │ ├── splitter-context.svelte.ts │ │ │ ├── splitter-panel.svelte │ │ │ ├── splitter-resize-trigger.svelte │ │ │ ├── splitter-root.svelte │ │ │ └── splitter.ts │ │ ├── steps │ │ │ ├── create-steps.svelte.ts │ │ │ ├── index.ts │ │ │ ├── steps-anatomy.ts │ │ │ ├── steps-completed-content.svelte │ │ │ ├── steps-content.svelte │ │ │ ├── steps-context.svelte.ts │ │ │ ├── steps-indicator.svelte │ │ │ ├── steps-item.svelte │ │ │ ├── steps-list.svelte │ │ │ ├── steps-next-trigger.svelte │ │ │ ├── steps-prev-trigger.svelte │ │ │ ├── steps-progress.svelte │ │ │ ├── steps-root.svelte │ │ │ ├── steps-separator.svelte │ │ │ ├── steps-trigger.svelte │ │ │ └── steps.ts │ │ ├── switch │ │ │ ├── create-switch.svelte.ts │ │ │ ├── index.ts │ │ │ ├── switch-anatomy.ts │ │ │ ├── switch-context.svelte.ts │ │ │ ├── switch-control.svelte │ │ │ ├── switch-hidden-input.svelte │ │ │ ├── switch-label.svelte │ │ │ ├── switch-root.svelte │ │ │ ├── switch-thumb.svelte │ │ │ └── switch.ts │ │ ├── tabs │ │ │ ├── create-tabs.svelte.ts │ │ │ ├── index.ts │ │ │ ├── tabs-anatomy.ts │ │ │ ├── tabs-content.svelte │ │ │ ├── tabs-context.svelte.ts │ │ │ ├── tabs-indicator.svelte │ │ │ ├── tabs-list.svelte │ │ │ ├── tabs-root.svelte │ │ │ ├── tabs-trigger.svelte │ │ │ └── tabs.ts │ │ ├── tags-input │ │ │ ├── create-tags-input.svelte.ts │ │ │ ├── index.ts │ │ │ ├── tags-input-anatomy.ts │ │ │ ├── tags-input-clear-trigger.svelte │ │ │ ├── tags-input-context.svelte.ts │ │ │ ├── tags-input-control.svelte │ │ │ ├── tags-input-hidden-input.svelte │ │ │ ├── tags-input-input.svelte │ │ │ ├── tags-input-item-delete-trigger.svelte │ │ │ ├── tags-input-item-input.svelte │ │ │ ├── tags-input-item-preview.svelte │ │ │ ├── tags-input-item-text.svelte │ │ │ ├── tags-input-item.svelte │ │ │ ├── tags-input-label.svelte │ │ │ ├── tags-input-root.svelte │ │ │ └── tags-input.ts │ │ ├── time-picker │ │ │ ├── create-time-picker.svelte.ts │ │ │ ├── index.ts │ │ │ ├── time-picker-anatomy.ts │ │ │ ├── time-picker-clear-trigger.svelte │ │ │ ├── time-picker-column.svelte │ │ │ ├── time-picker-content.svelte │ │ │ ├── time-picker-context.svelte.ts │ │ │ ├── time-picker-control.svelte │ │ │ ├── time-picker-hour-cell.svelte │ │ │ ├── time-picker-input.svelte │ │ │ ├── time-picker-label.svelte │ │ │ ├── time-picker-minute-cell.svelte │ │ │ ├── time-picker-period-cell.svelte │ │ │ ├── time-picker-positioner.svelte │ │ │ ├── time-picker-root.svelte │ │ │ ├── time-picker-second-cell.svelte │ │ │ ├── time-picker-spacer.svelte │ │ │ ├── time-picker-trigger.svelte │ │ │ └── time-picker.ts │ │ ├── timer │ │ │ ├── create-timer.svelte.ts │ │ │ ├── index.ts │ │ │ ├── timer-action-trigger.svelte │ │ │ ├── timer-anatomy.ts │ │ │ ├── timer-area.svelte │ │ │ ├── timer-context.svelte.ts │ │ │ ├── timer-control.svelte │ │ │ ├── timer-item-label.svelte │ │ │ ├── timer-item-value.svelte │ │ │ ├── timer-item.svelte │ │ │ ├── timer-root.svelte │ │ │ ├── timer-separator.svelte │ │ │ └── timer.ts │ │ ├── toast │ │ │ ├── create-toaster.svelte.ts │ │ │ ├── index.ts │ │ │ ├── toast-action-trigger.svelte │ │ │ ├── toast-anatomy.ts │ │ │ ├── toast-close-trigger.svelte │ │ │ ├── toast-context.svelte.ts │ │ │ ├── toast-description.svelte │ │ │ ├── toast-ghost-after.svelte │ │ │ ├── toast-ghost-before.svelte │ │ │ ├── toast-provider.svelte │ │ │ ├── toast-root.svelte │ │ │ ├── toast-title.svelte │ │ │ ├── toast.ts │ │ │ └── toaster.svelte │ │ ├── toggle-group │ │ │ ├── create-toggle-group.svelte.ts │ │ │ ├── index.ts │ │ │ ├── toggle-group-anatomy.ts │ │ │ ├── toggle-group-context.svelte.ts │ │ │ ├── toggle-group-item.svelte │ │ │ ├── toggle-group-root.svelte │ │ │ └── toggle-group.ts │ │ ├── toggle │ │ │ ├── create-toggle.svelte.ts │ │ │ ├── index.ts │ │ │ ├── toggle-anatomy.ts │ │ │ ├── toggle-context.svelte.ts │ │ │ ├── toggle-indicator.svelte │ │ │ ├── toggle-root.svelte │ │ │ └── toggle.ts │ │ ├── tooltip │ │ │ ├── create-tooltip.svelte.ts │ │ │ ├── index.ts │ │ │ ├── tooltip-anatomy.ts │ │ │ ├── tooltip-arrow-tip.svelte │ │ │ ├── tooltip-arrow.svelte │ │ │ ├── tooltip-content.svelte │ │ │ ├── tooltip-context.svelte.ts │ │ │ ├── tooltip-positioner.svelte │ │ │ ├── tooltip-root.svelte │ │ │ ├── tooltip-trigger.svelte │ │ │ └── tooltip.ts │ │ ├── tour │ │ │ ├── create-tour.svelte.ts │ │ │ ├── index.ts │ │ │ ├── tour-action-trigger.svelte │ │ │ ├── tour-anatomy.ts │ │ │ ├── tour-arrow-tip.svelte │ │ │ ├── tour-arrow.svelte │ │ │ ├── tour-backdrop.svelte │ │ │ ├── tour-close-trigger.svelte │ │ │ ├── tour-content.svelte │ │ │ ├── tour-context.svelte.ts │ │ │ ├── tour-description.svelte │ │ │ ├── tour-positioner.svelte │ │ │ ├── tour-progress-text.svelte │ │ │ ├── tour-root.svelte │ │ │ ├── tour-spotlight.svelte │ │ │ ├── tour-title.svelte │ │ │ ├── tour-trigger.svelte │ │ │ └── tour.ts │ │ ├── tree-view │ │ │ ├── create-tree-view.svelte.ts │ │ │ ├── index.ts │ │ │ ├── tree-view-anatomy.ts │ │ │ ├── tree-view-branch-content.svelte │ │ │ ├── tree-view-branch-control.svelte │ │ │ ├── tree-view-branch-indent-guide.svelte │ │ │ ├── tree-view-branch-indicator.svelte │ │ │ ├── tree-view-branch-text.svelte │ │ │ ├── tree-view-branch-trigger.svelte │ │ │ ├── tree-view-branch.svelte │ │ │ ├── tree-view-context.svelte.ts │ │ │ ├── tree-view-item-indicator.svelte │ │ │ ├── tree-view-item-text.svelte │ │ │ ├── tree-view-item.svelte │ │ │ ├── tree-view-label.svelte │ │ │ ├── tree-view-root.svelte │ │ │ ├── tree-view-tree.svelte │ │ │ ├── tree-view.ts │ │ │ └── types.ts │ │ └── types.ts │ ├── routes │ │ ├── +layout.svelte │ │ ├── +page.svelte │ │ ├── +page.ts │ │ ├── accordion │ │ │ └── +page.svelte │ │ ├── alert-dialog │ │ │ └── +page.svelte │ │ ├── alert │ │ │ └── +page.svelte │ │ ├── angle-slider │ │ │ └── +page.svelte │ │ ├── avatar │ │ │ └── +page.svelte │ │ ├── calendar-icon.svelte │ │ ├── carousel │ │ │ └── +page.svelte │ │ ├── check-icon.svelte │ │ ├── checkbox │ │ │ └── +page.svelte │ │ ├── chevron-down-icon.svelte │ │ ├── chevron-left-icon.svelte │ │ ├── chevron-right-icon.svelte │ │ ├── chevron-up-icon.svelte │ │ ├── clipboard │ │ │ └── +page.svelte │ │ ├── collapsible │ │ │ └── +page.svelte │ │ ├── color-picker │ │ │ └── +page.svelte │ │ ├── combobox │ │ │ └── +page.svelte │ │ ├── copy-icon.svelte │ │ ├── date-picker │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ └── range │ │ │ │ └── +page.svelte │ │ ├── dialog │ │ │ └── +page.svelte │ │ ├── drawer │ │ │ └── +page.svelte │ │ ├── dropper-icon.svelte │ │ ├── editable │ │ │ └── +page.svelte │ │ ├── field │ │ │ └── +page.svelte │ │ ├── file-icon.svelte │ │ ├── file-upload │ │ │ └── +page.svelte │ │ ├── focus-trap │ │ │ └── +page.svelte │ │ ├── folder-icon.svelte │ │ ├── highlight │ │ │ └── +page.svelte │ │ ├── hover-card │ │ │ └── +page.svelte │ │ ├── info-circle-icon.svelte │ │ ├── listbox │ │ │ └── +page.svelte │ │ ├── menu │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ ├── checkbox │ │ │ │ └── +page.svelte │ │ │ ├── context │ │ │ │ └── +page.svelte │ │ │ └── nested │ │ │ │ └── +page.svelte │ │ ├── number-input │ │ │ └── +page.svelte │ │ ├── pagination │ │ │ └── +page.svelte │ │ ├── pin-input │ │ │ └── +page.svelte │ │ ├── popover │ │ │ └── +page.svelte │ │ ├── presence │ │ │ └── +page.svelte │ │ ├── progress │ │ │ └── +page.svelte │ │ ├── qr-code │ │ │ └── +page.svelte │ │ ├── radio-group │ │ │ └── +page.svelte │ │ ├── rating-group │ │ │ └── +page.svelte │ │ ├── refresh-icon.svelte │ │ ├── segment-group │ │ │ └── +page.svelte │ │ ├── select │ │ │ └── +page.svelte │ │ ├── signature-pad │ │ │ └── +page.svelte │ │ ├── slider │ │ │ └── +page.svelte │ │ ├── splitter │ │ │ └── +page.svelte │ │ ├── star-icon.svelte │ │ ├── steps │ │ │ └── +page.svelte │ │ ├── switch │ │ │ └── +page.svelte │ │ ├── tabs │ │ │ └── +page.svelte │ │ ├── tags-input │ │ │ └── +page.svelte │ │ ├── timer │ │ │ └── +page.svelte │ │ ├── toast │ │ │ └── +page.svelte │ │ ├── toaster.svelte.ts │ │ ├── toggle-group │ │ │ └── +page.svelte │ │ ├── toggle │ │ │ └── +page.svelte │ │ ├── tooltip │ │ │ └── +page.svelte │ │ ├── tour │ │ │ └── +page.svelte │ │ ├── tree-view │ │ │ └── +page.svelte │ │ └── x-icon.svelte │ └── tests │ │ ├── accordion │ │ ├── accordion.svelte │ │ └── accordion.test.ts │ │ ├── alert-dialog │ │ ├── alert-dialog.svelte │ │ └── alert-dialog.test.ts │ │ ├── alert │ │ ├── alert.svelte │ │ └── alert.test.ts │ │ ├── avatar │ │ ├── avatar.svelte │ │ └── avatar.test.ts │ │ ├── breadcrumbs │ │ ├── breadcrumbs.svelte │ │ └── breadcrumbs.test.ts │ │ ├── carousel │ │ ├── carousel.svelte │ │ └── carousel.test.ts │ │ ├── checkbox │ │ ├── checkbox.svelte │ │ └── checkbox.test.ts │ │ ├── clipboard │ │ ├── clipboard.svelte │ │ └── clipboard.test.ts │ │ ├── collapsible │ │ ├── collapsible.svelte │ │ └── collapsible.test.ts │ │ ├── combobox │ │ ├── combobox.svelte │ │ └── combobox.test.ts │ │ ├── date-picker │ │ ├── date-picker.svelte │ │ └── date-picker.test.ts │ │ ├── dialog │ │ ├── dialog.svelte │ │ └── dialog.test.ts │ │ ├── drawer │ │ ├── drawer.svelte │ │ └── drawer.test.ts │ │ ├── editable │ │ ├── editable.svelte │ │ └── editable.test.ts │ │ ├── field │ │ ├── field.svelte │ │ └── field.test.ts │ │ ├── file-upload │ │ ├── file-upload.svelte │ │ └── file-upload.test.ts │ │ ├── hover-card │ │ ├── hover-card.svelte │ │ └── hover-card.test.ts │ │ ├── menu │ │ ├── menu.svelte │ │ └── menu.test.ts │ │ ├── number-input │ │ ├── number-input.svelte │ │ └── number-input.test.ts │ │ ├── pagination │ │ ├── pagination.svelte │ │ └── pagination.test.ts │ │ ├── pin-input │ │ ├── pin-input.svelte │ │ └── pin-input.test.ts │ │ ├── popover │ │ ├── popover.svelte │ │ └── popover.test.ts │ │ ├── progress │ │ ├── progress.svelte │ │ └── progress.test.ts │ │ ├── qr-code │ │ ├── qr-code.svelte │ │ └── qr-code.test.ts │ │ ├── radio-group │ │ ├── radio-group.svelte │ │ └── radio-group.test.ts │ │ ├── rating-group │ │ ├── rating-group.svelte │ │ └── rating-group.test.ts │ │ ├── segment-group │ │ ├── segment-group.svelte │ │ └── segment-group.test.ts │ │ ├── select │ │ ├── select.svelte │ │ └── select.test.ts │ │ ├── signature-pad │ │ ├── signature-pad.svelte │ │ └── signature-pad.test.ts │ │ ├── slider │ │ ├── slider.svelte │ │ └── slider.test.ts │ │ ├── splitter │ │ ├── splitter.svelte │ │ └── splitter.test.ts │ │ ├── steps │ │ ├── steps.svelte │ │ └── steps.test.ts │ │ ├── switch │ │ ├── switch.svelte │ │ └── switch.test.ts │ │ ├── tabs │ │ ├── tabs.svelte │ │ └── tabs.test.ts │ │ ├── tags-input │ │ ├── tags-input.svelte │ │ └── tags-input.test.ts │ │ ├── time-picker │ │ ├── time-picker.svelte │ │ └── time-picker.test.ts │ │ ├── timer │ │ ├── timer.svelte │ │ └── timer.test.ts │ │ ├── toast │ │ ├── toast.svelte │ │ └── toast.test.ts │ │ ├── toggle-group │ │ ├── toggle-group.svelte │ │ └── toggle-group.test.ts │ │ ├── toggle │ │ ├── toggle.svelte │ │ └── toggle.test.ts │ │ ├── tooltip │ │ ├── tooltip.svelte │ │ └── tooltip.test.ts │ │ ├── tree-view │ │ ├── tree-view.svelte │ │ └── tree-view.test.ts │ │ └── utils.ts │ ├── static │ └── favicon.png │ ├── svelte.config.js │ ├── tsconfig.json │ ├── vite.config.ts │ ├── vitest.d.ts │ └── vitest.setup.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── package.json ├── src │ └── generate-anatomy-icons.ts └── tsconfig.json └── website ├── package.json ├── src ├── app.css ├── app.d.ts ├── app.html ├── content │ ├── components │ │ ├── accordion.md │ │ ├── alert-dialog.md │ │ ├── alert.md │ │ ├── angle-slider.md │ │ ├── avatar.md │ │ ├── breadcrumbs.md │ │ ├── carousel.md │ │ ├── checkbox.md │ │ ├── clipboard.md │ │ ├── collapsible.md │ │ ├── color-picker.md │ │ ├── combobox.md │ │ ├── date-picker.md │ │ ├── dialog.md │ │ ├── drawer.md │ │ ├── editable.md │ │ ├── field.md │ │ ├── file-upload.md │ │ ├── hover-card.md │ │ ├── menu.md │ │ ├── number-input.md │ │ ├── pagination.md │ │ ├── pin-input.md │ │ ├── popover.md │ │ ├── progress-circular.md │ │ ├── progress-linear.md │ │ ├── qr-code.md │ │ ├── radio-group.md │ │ ├── rating-group.md │ │ ├── segment-group.md │ │ ├── select.md │ │ ├── signature-pad.md │ │ ├── slider.md │ │ ├── splitter.md │ │ ├── steps.md │ │ ├── switch.md │ │ ├── tabs.md │ │ ├── tags-input.md │ │ ├── timer.md │ │ ├── toast.md │ │ ├── toggle-group.md │ │ ├── toggle.md │ │ ├── tooltip.md │ │ ├── tour.md │ │ └── tree-view.md │ ├── overview │ │ ├── 01-introduction.md │ │ ├── 02-getting-started.md │ │ ├── 03-styling.md │ │ └── 04-aschild.md │ └── utilities │ │ ├── environment-provider.md │ │ ├── focus-trap.md │ │ ├── highlight.md │ │ ├── locale-provider.md │ │ ├── portal.md │ │ └── presence.md ├── lib │ ├── components │ │ ├── accessibility │ │ │ └── keyboard-support.svelte │ │ ├── anatomy.svelte │ │ ├── api │ │ │ ├── accordion.ts │ │ │ ├── alert-dialog.ts │ │ │ ├── alert.ts │ │ │ ├── angle-slider.ts │ │ │ ├── api.svelte │ │ │ ├── avatar.ts │ │ │ ├── breadcrumbs.ts │ │ │ ├── carousel.ts │ │ │ ├── checkbox.ts │ │ │ ├── clipboard.ts │ │ │ ├── collapsible.ts │ │ │ ├── color-picker.ts │ │ │ ├── combobox.ts │ │ │ ├── date-picker.ts │ │ │ ├── dialog.ts │ │ │ ├── drawer.ts │ │ │ ├── editable.ts │ │ │ ├── environment-provider.ts │ │ │ ├── field.ts │ │ │ ├── file-upload.ts │ │ │ ├── floating-panel.ts │ │ │ ├── focus-trap.ts │ │ │ ├── highlight.ts │ │ │ ├── hover-card.ts │ │ │ ├── index.ts │ │ │ ├── locale-provider.ts │ │ │ ├── menu.ts │ │ │ ├── number-input.ts │ │ │ ├── pagination.ts │ │ │ ├── pin-input.ts │ │ │ ├── popover.ts │ │ │ ├── portal.ts │ │ │ ├── presence.ts │ │ │ ├── progress.ts │ │ │ ├── qr-code.ts │ │ │ ├── radio-group.ts │ │ │ ├── rating-group.ts │ │ │ ├── segment-group.ts │ │ │ ├── select.ts │ │ │ ├── signature-pad.ts │ │ │ ├── slider.ts │ │ │ ├── splitter.ts │ │ │ ├── steps.ts │ │ │ ├── switch.ts │ │ │ ├── tabs.ts │ │ │ ├── tags-input.ts │ │ │ ├── time-picker.ts │ │ │ ├── timer.ts │ │ │ ├── toast.ts │ │ │ ├── toggle-group.ts │ │ │ ├── toggle.ts │ │ │ ├── tooltip.ts │ │ │ ├── tour.ts │ │ │ ├── tree-view.ts │ │ │ └── utils.ts │ │ ├── demo │ │ │ ├── accordion.svelte │ │ │ ├── alert-dialog.svelte │ │ │ ├── alert.svelte │ │ │ ├── angle-slider.svelte │ │ │ ├── avatar.svelte │ │ │ ├── breadcrumbs.svelte │ │ │ ├── carousel.svelte │ │ │ ├── checkbox.svelte │ │ │ ├── clipboard.svelte │ │ │ ├── collapsible.svelte │ │ │ ├── color-picker.svelte │ │ │ ├── combobox.svelte │ │ │ ├── date-picker.svelte │ │ │ ├── demo.svelte │ │ │ ├── dialog.svelte │ │ │ ├── drawer.svelte │ │ │ ├── editable.svelte │ │ │ ├── field.svelte │ │ │ ├── file-upload.svelte │ │ │ ├── hover-card.svelte │ │ │ ├── index.ts │ │ │ ├── menu.svelte │ │ │ ├── number-input.svelte │ │ │ ├── pagination.svelte │ │ │ ├── pin-input.svelte │ │ │ ├── popover.svelte │ │ │ ├── progress-circular.svelte │ │ │ ├── progress-linear.svelte │ │ │ ├── qr-code.svelte │ │ │ ├── radio-group.svelte │ │ │ ├── rating-group.svelte │ │ │ ├── segment-group.svelte │ │ │ ├── select.svelte │ │ │ ├── signature-pad.svelte │ │ │ ├── slider.svelte │ │ │ ├── splitter.svelte │ │ │ ├── steps.svelte │ │ │ ├── switch.svelte │ │ │ ├── tabs.svelte │ │ │ ├── tags-input.svelte │ │ │ ├── time-picker.svelte │ │ │ ├── timer.svelte │ │ │ ├── toast.svelte │ │ │ ├── toggle-group.svelte │ │ │ ├── toggle.svelte │ │ │ ├── tooltip.svelte │ │ │ ├── tour.svelte │ │ │ └── tree-view.svelte │ │ └── ui │ │ │ ├── badge.recipe.ts │ │ │ ├── badge.svelte │ │ │ ├── button.recipe.ts │ │ │ ├── button.svelte │ │ │ ├── icon-button.recipe.ts │ │ │ ├── icon-button.svelte │ │ │ ├── input.recipe.ts │ │ │ ├── input.svelte │ │ │ ├── label.recipe.ts │ │ │ ├── label.svelte │ │ │ ├── table │ │ │ ├── create-table.svelte.ts │ │ │ ├── index.ts │ │ │ ├── table-anatomy.ts │ │ │ ├── table-body.svelte │ │ │ ├── table-cell.svelte │ │ │ ├── table-container.svelte │ │ │ ├── table-context.svelte.ts │ │ │ ├── table-footer.svelte │ │ │ ├── table-header.svelte │ │ │ ├── table-heading.svelte │ │ │ ├── table-root.svelte │ │ │ ├── table-row.svelte │ │ │ ├── table.recipe.ts │ │ │ └── table.ts │ │ │ ├── textarea.recipe.ts │ │ │ └── textarea.svelte │ ├── icons │ │ ├── anatomy │ │ │ ├── accordion-anatomy-icon.svelte │ │ │ ├── avatar-anatomy-icon.svelte │ │ │ ├── carousel-anatomy-icon.svelte │ │ │ ├── checkbox-anatomy-icon.svelte │ │ │ ├── circular-progress-anatomy-icon.svelte │ │ │ ├── clipboard-anatomy-icon.svelte │ │ │ ├── color-picker-anatomy-icon.svelte │ │ │ ├── combobox-anatomy-icon.svelte │ │ │ ├── date-picker-anatomy-icon.svelte │ │ │ ├── dialog-anatomy-icon.svelte │ │ │ ├── editable-anatomy-icon.svelte │ │ │ ├── field-anatomy-icon.svelte │ │ │ ├── fieldset-anatomy-icon.svelte │ │ │ ├── file-upload-anatomy-icon.svelte │ │ │ ├── hover-card-anatomy-icon.svelte │ │ │ ├── index.ts │ │ │ ├── linear-progress-anatomy-icon.svelte │ │ │ ├── menu-anatomy-icon.svelte │ │ │ ├── number-input-anatomy-icon.svelte │ │ │ ├── pagination-anatomy-icon.svelte │ │ │ ├── pin-input-anatomy-icon.svelte │ │ │ ├── popover-anatomy-icon.svelte │ │ │ ├── qr-code-anatomy-icon.svelte │ │ │ ├── radio-group-anatomy-icon.svelte │ │ │ ├── rating-group-anatomy-icon.svelte │ │ │ ├── segmented-control-anatomy-icon.svelte │ │ │ ├── select-anatomy-icon.svelte │ │ │ ├── signature-pad-anatomy-icon.svelte │ │ │ ├── slider-anatomy-icon.svelte │ │ │ ├── splitter-anatomy-icon.svelte │ │ │ ├── steps-anatomy-icon.svelte │ │ │ ├── switch-anatomy-icon.svelte │ │ │ ├── tabs-anatomy-icon.svelte │ │ │ ├── tags-input-anatomy-icon.svelte │ │ │ ├── time-picker-anatomy-icon.svelte │ │ │ ├── toast-anatomy-icon.svelte │ │ │ ├── toggle-group-anatomy-icon.svelte │ │ │ ├── tooltip-anatomy-icon.svelte │ │ │ ├── tour-anatomy-icon.svelte │ │ │ └── tree-view-anatomy-icon.svelte │ │ ├── javascript-icon.svelte │ │ ├── nodejs-icon.svelte │ │ ├── svelte-icon.svelte │ │ ├── tsconfig-icon.svelte │ │ └── vite-icon.svelte │ ├── stores │ │ └── navbar.svelte.ts │ └── types │ │ └── index.ts └── routes │ ├── +layout.svelte │ ├── +page.server.ts │ ├── +page.svelte │ ├── components │ └── [id] │ │ ├── +page.server.ts │ │ └── +page.svelte │ ├── markdown.svelte │ ├── navbar.svelte │ ├── overview │ └── [id] │ │ ├── +page.server.ts │ │ └── +page.svelte │ ├── pagination.svelte │ ├── robots.txt │ └── +server.ts │ ├── search.svelte │ ├── sidebar.svelte │ ├── sitemap.xml │ └── +server.ts │ ├── table-of-contents.svelte │ └── utilities │ └── [id] │ ├── +page.server.ts │ └── +page.svelte ├── static └── favicon.png ├── svelte.config.js ├── tsconfig.json ├── velite.config.ts └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | .svelte-kit 7 | build 8 | dist 9 | 10 | # OS 11 | .DS_Store 12 | Thumbs.db 13 | 14 | # Env 15 | .env 16 | .env.* 17 | !.env.example 18 | !.env.test 19 | 20 | # Vite 21 | vite.config.js.timestamp-* 22 | vite.config.ts.timestamp-* 23 | 24 | # Velite 25 | .velite -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v23.7.0 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], 3 | "singleQuote": true, 4 | "bracketSpacing": false, 5 | "tailwindStylesheet": "./website/src/app.css", 6 | "overrides": [ 7 | { 8 | "files": "*.svelte", 9 | "options": { 10 | "parser": "svelte" 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.organizeImports": "always" 4 | }, 5 | "editor.defaultFormatter": "esbenp.prettier-vscode", 6 | "files.associations": { 7 | "*.css": "tailwindcss" 8 | }, 9 | "tailwindCSS.experimental.classRegex": [ 10 | ["twJoin\\(([^)]*)\\)", "'([^']*)'"], 11 | ["twMerge\\(([^)]*)\\)", "'([^']*)'"], 12 | ["tv\\((([^()]*|\\([^()]*\\))*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] 13 | ], 14 | "tailwindCSS.experimental.configFile": "./website/src/app.css", 15 | "typescript.tsdk": "node_modules\\typescript\\lib" 16 | } 17 | -------------------------------------------------------------------------------- /packages/ui-ingredients-plugin-tailwindcss/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node22/tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["vitest/globals"], 5 | "verbatimModuleSyntax": true 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients-plugin-tailwindcss/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup'; 2 | 3 | export default defineConfig({ 4 | clean: true, 5 | entry: ['src/index.ts'], 6 | format: ['cjs', 'esm'], 7 | dts: true, 8 | sourcemap: true, 9 | treeshake: true, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/ui-ingredients-plugin-tailwindcss/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | watch: false, 6 | globals: true, 7 | include: ['src/**/*.{test,spec}.{js,ts}'], 8 | environment: 'node', 9 | passWithNoTests: true, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | UI Ingredients 8 | 9 | 10 | 11 | 15 | 16 | %sveltekit.head% 17 | 18 | 19 |
%sveltekit.body%
20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/accordion/accordion-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/accordion'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/accordion/accordion-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/accordion'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateAccordionReturn} from './create-accordion.svelte.js'; 4 | 5 | export const [getAccordionContext, setAccordionContext] = 6 | createContext('Accordion'); 7 | 8 | export const [getAccordionItemPropsContext, setAccordionItemPropsContext] = 9 | createContext('AccordionItem.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/accordion/accordion.ts: -------------------------------------------------------------------------------- 1 | export {default as ItemContent} from './accordion-item-content.svelte'; 2 | export {default as ItemIndicator} from './accordion-item-indicator.svelte'; 3 | export {default as ItemTrigger} from './accordion-item-trigger.svelte'; 4 | export {default as Item} from './accordion-item.svelte'; 5 | export {default as Root} from './accordion-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/accordion/index.ts: -------------------------------------------------------------------------------- 1 | export * as Accordion from './accordion.js'; 2 | 3 | export type {AccordionItemContentProps} from './accordion-item-content.svelte'; 4 | export type {AccordionIndicatorProps} from './accordion-item-indicator.svelte'; 5 | export type {AccordionItemTriggerProps} from './accordion-item-trigger.svelte'; 6 | export type {AccordionItemProps} from './accordion-item.svelte'; 7 | export type {AccordionProps} from './accordion-root.svelte'; 8 | 9 | export {anatomy as accordionAnatomy} from './accordion-anatomy.js'; 10 | export { 11 | getAccordionContext, 12 | setAccordionContext, 13 | } from './accordion-context.svelte.js'; 14 | export { 15 | createAccordion, 16 | type CreateAccordionProps, 17 | type CreateAccordionReturn, 18 | } from './create-accordion.svelte.js'; 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert-dialog/alert-dialog-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {anatomy as _} from '@zag-js/dialog'; 2 | 3 | export const anatomy = _.rename('alert-dialog'); 4 | export const parts = anatomy.build(); 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert-dialog/alert-dialog-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateAlertDialogReturn} from './create-alert-dialog.svelte.js'; 3 | 4 | export const [getAlertDialogContext, setAlertDialogContext] = 5 | createContext('AlertDialog'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert-dialog/alert-dialog.ts: -------------------------------------------------------------------------------- 1 | export {default as Backdrop} from './alert-dialog-backdrop.svelte'; 2 | export {default as CloseTrigger} from './alert-dialog-close-trigger.svelte'; 3 | export {default as Content} from './alert-dialog-content.svelte'; 4 | export {default as Description} from './alert-dialog-description.svelte'; 5 | export {default as Positioner} from './alert-dialog-positioner.svelte'; 6 | export {default as Root} from './alert-dialog-root.svelte'; 7 | export {default as Title} from './alert-dialog-title.svelte'; 8 | export {default as Trigger} from './alert-dialog-trigger.svelte'; 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert/alert-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {createAnatomy} from '@zag-js/anatomy'; 2 | 3 | export const anatomy = createAnatomy('alert').parts( 4 | 'root', 5 | 'title', 6 | 'description', 7 | 'indicator', 8 | ); 9 | 10 | export const parts = anatomy.build(); 11 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert/alert-context.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateAlertReturn} from './create-alert.svelte.js'; 3 | 4 | export const [getAlertContext, setAlertContext] = 5 | createContext('Alert'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert/alert-title.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |

27 | {@render children?.()} 28 |

29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert/alert.ts: -------------------------------------------------------------------------------- 1 | export {default as Description} from './alert-description.svelte'; 2 | export {default as Indicator} from './alert-indicator.svelte'; 3 | export {default as Root} from './alert-root.svelte'; 4 | export {default as Title} from './alert-title.svelte'; 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/alert/index.ts: -------------------------------------------------------------------------------- 1 | export * as Alert from './alert.js'; 2 | 3 | export type {AlertDescriptionProps} from './alert-description.svelte'; 4 | export type {AlertIndicatorProps} from './alert-indicator.svelte'; 5 | export type {AlertProps} from './alert-root.svelte'; 6 | export type {AlertTitleProps} from './alert-title.svelte'; 7 | 8 | export {anatomy as alertAnatomy} from './alert-anatomy.js'; 9 | export {getAlertContext, setAlertContext} from './alert-context.js'; 10 | export { 11 | createAlert, 12 | type CreateAlertProps, 13 | type CreateAlertReturn, 14 | } from './create-alert.svelte.js'; 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/angle-slider/angle-slider-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/angle-slider'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/angle-slider/angle-slider-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateAngleSliderReturn} from './create-angle-slider.svelte.js'; 3 | 4 | export const [getAngleSliderContext, setAngleSliderContext] = 5 | createContext('AngleSlider'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/angle-slider/angle-slider.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './angle-slider-control.svelte'; 2 | export {default as HiddenInput} from './angle-slider-hidden-input.svelte'; 3 | export {default as Label} from './angle-slider-label.svelte'; 4 | export {default as MarkerGroup} from './angle-slider-marker-group.svelte'; 5 | export {default as Marker} from './angle-slider-marker.svelte'; 6 | export {default as Root} from './angle-slider-root.svelte'; 7 | export {default as Thumb} from './angle-slider-thumb.svelte'; 8 | export {default as ValueText} from './angle-slider-value-text.svelte'; 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/avatar/avatar-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/avatar'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/avatar/avatar-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateAvatarReturn} from './create-avatar.svelte.js'; 3 | 4 | export const [getAvatarContext, setAvatarContext] = 5 | createContext('Avatar'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/avatar/avatar-image.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | {#if asChild} 19 | {@render asChild(mergedProps)} 20 | {:else} 21 | 22 | {/if} 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/avatar/avatar.ts: -------------------------------------------------------------------------------- 1 | export {default as Fallback} from './avatar-fallback.svelte'; 2 | export {default as Image} from './avatar-image.svelte'; 3 | export {default as Root} from './avatar-root.svelte'; 4 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/avatar/index.ts: -------------------------------------------------------------------------------- 1 | export * as Avatar from './avatar.js'; 2 | 3 | export type {AvatarFallbackProps} from './avatar-fallback.svelte'; 4 | export type {AvatarImageProps} from './avatar-image.svelte'; 5 | export type {AvatarProps} from './avatar-root.svelte'; 6 | 7 | export {anatomy as avatarAnatomy} from './avatar-anatomy.js'; 8 | export {getAvatarContext, setAvatarContext} from './avatar-context.svelte.js'; 9 | export { 10 | createAvatar, 11 | type CreateAvatarProps, 12 | type CreateAvatarReturn, 13 | } from './create-avatar.svelte.js'; 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/breadcrumbs/breadcrumbs-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {createAnatomy} from '@zag-js/anatomy'; 2 | 3 | /** 4 | * @deprecated 5 | */ 6 | export const anatomy = createAnatomy('breadcrumbs').parts( 7 | 'root', 8 | 'list', 9 | 'item', 10 | 'link', 11 | 'separator', 12 | ); 13 | 14 | export const parts = anatomy.build(); 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/breadcrumbs/breadcrumbs-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateBreadcrumbsReturn} from './create-breadcrumbs.js'; 3 | 4 | /** 5 | * @deprecated 6 | */ 7 | export const [getBreadcrumbsContext, setBreadcrumbsContext] = 8 | createContext('Breadcrumbs'); 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/breadcrumbs/breadcrumbs.ts: -------------------------------------------------------------------------------- 1 | export {default as Item} from './breadcrumbs-item.svelte'; 2 | export {default as Link} from './breadcrumbs-link.svelte'; 3 | export {default as List} from './breadcrumbs-list.svelte'; 4 | export {default as Root} from './breadcrumbs-root.svelte'; 5 | export {default as Separator} from './breadcrumbs-separator.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/breadcrumbs/index.ts: -------------------------------------------------------------------------------- 1 | export * as Breadcrumbs from './breadcrumbs.js'; 2 | 3 | export type {BreadcrumbsItemProps} from './breadcrumbs-item.svelte'; 4 | export type {BreadcrumbsLinkProps} from './breadcrumbs-link.svelte'; 5 | export type {BreadcrumbsListProps} from './breadcrumbs-list.svelte'; 6 | export type {BreadcrumbsProps} from './breadcrumbs-root.svelte'; 7 | export type {BreadcrumbsSeparatorProps} from './breadcrumbs-separator.svelte'; 8 | 9 | export {anatomy as breadcrumbsAnatomy} from './breadcrumbs-anatomy.js'; 10 | export { 11 | getBreadcrumbsContext, 12 | setBreadcrumbsContext, 13 | } from './breadcrumbs-context.svelte.js'; 14 | export { 15 | createBreadcrumbs, 16 | type CreateBreadcrumbsReturn, 17 | } from './create-breadcrumbs.js'; 18 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/carousel/carousel-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/carousel'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/carousel/carousel-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateCarouselReturn} from './create-carousel.svelte.js'; 3 | 4 | export const [getCarouselContext, setCarouselContext] = 5 | createContext('Carousel'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/carousel/carousel.ts: -------------------------------------------------------------------------------- 1 | export {default as AutoplayTrigger} from './carousel-autoplay-trigger.svelte'; 2 | export {default as Control} from './carousel-control.svelte'; 3 | export {default as IndicatorGroup} from './carousel-indicator-group.svelte'; 4 | export {default as Indicator} from './carousel-indicator.svelte'; 5 | export {default as ItemGroup} from './carousel-item-group.svelte'; 6 | export {default as Item} from './carousel-item.svelte'; 7 | export {default as NextTrigger} from './carousel-next-trigger.svelte'; 8 | export {default as PrevTrigger} from './carousel-prev-trigger.svelte'; 9 | export {default as Root} from './carousel-root.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/checkbox/checkbox-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/checkbox'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/checkbox/checkbox-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateCheckboxReturn} from './create-checkbox.svelte.js'; 3 | 4 | export const [getCheckboxContext, setCheckboxContext] = 5 | createContext('Checkbox'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/checkbox/checkbox-hidden-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/checkbox/checkbox.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './checkbox-control.svelte'; 2 | export {default as HiddenInput} from './checkbox-hidden-input.svelte'; 3 | export {default as Indicator} from './checkbox-indicator.svelte'; 4 | export {default as Label} from './checkbox-label.svelte'; 5 | export {default as Root} from './checkbox-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/checkbox/index.ts: -------------------------------------------------------------------------------- 1 | export * as Checkbox from './checkbox.js'; 2 | 3 | export type {CheckboxControlProps} from './checkbox-control.svelte'; 4 | export type {CheckboxHiddenInputProps} from './checkbox-hidden-input.svelte'; 5 | export type {CheckboxIndicatorProps} from './checkbox-indicator.svelte'; 6 | export type {CheckboxLabelProps} from './checkbox-label.svelte'; 7 | export type {CheckboxProps} from './checkbox-root.svelte'; 8 | 9 | export {anatomy as checkboxAnatomy} from './checkbox-anatomy.js'; 10 | export { 11 | getCheckboxContext, 12 | setCheckboxContext, 13 | } from './checkbox-context.svelte.js'; 14 | export { 15 | createCheckbox, 16 | type CreateCheckboxProps, 17 | type CreateCheckboxReturn, 18 | } from './create-checkbox.svelte.js'; 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/clipboard/clipboard-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/clipboard'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/clipboard/clipboard-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateClipboardReturn} from './create-clipboard.svelte.js'; 3 | 4 | export const [getClipboardContext, setClipboardContext] = 5 | createContext('Clipboard'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/clipboard/clipboard-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/clipboard/clipboard.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './clipboard-control.svelte'; 2 | export {default as Indicator} from './clipboard-indicator.svelte'; 3 | export {default as Input} from './clipboard-input.svelte'; 4 | export {default as Label} from './clipboard-label.svelte'; 5 | export {default as Root} from './clipboard-root.svelte'; 6 | export {default as Trigger} from './clipboard-trigger.svelte'; 7 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/clipboard/create-clipboard.svelte.ts: -------------------------------------------------------------------------------- 1 | import * as clipboard from '@zag-js/clipboard'; 2 | import {normalizeProps, reflect, useMachine} from '@zag-js/svelte'; 3 | import {getEnvironmentContext} from '../environment-provider/enviroment-provider-context.svelte.js'; 4 | 5 | export interface CreateClipboardProps 6 | extends Omit {} 7 | 8 | export interface CreateClipboardReturn extends clipboard.Api {} 9 | 10 | export function createClipboard( 11 | props: CreateClipboardProps, 12 | ): CreateClipboardReturn { 13 | const environment = getEnvironmentContext(); 14 | 15 | const service = useMachine(clipboard.machine, () => ({ 16 | getRootNode: environment?.getRootNode, 17 | ...props, 18 | })); 19 | 20 | return reflect(() => clipboard.connect(service, normalizeProps)); 21 | } 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/collapsible/collapsible-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/collapsible'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/collapsible/collapsible-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateCollapsibleReturn} from './create-collapsible.svelte.js'; 3 | 4 | export const [getCollapsibleContext, setCollapsibleContext] = 5 | createContext('Collapsible'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/collapsible/collapsible.ts: -------------------------------------------------------------------------------- 1 | export {default as Content} from './collapsible-content.svelte'; 2 | export {default as Root} from './collapsible-root.svelte'; 3 | export {default as Trigger} from './collapsible-trigger.svelte'; 4 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/collapsible/index.ts: -------------------------------------------------------------------------------- 1 | export * as Collapsible from './collapsible.js'; 2 | 3 | export type {CollapsibleContentProps} from './collapsible-content.svelte'; 4 | export type {CollapsibleProps} from './collapsible-root.svelte'; 5 | export type {CollapsibleTriggerProps} from './collapsible-trigger.svelte'; 6 | 7 | export {anatomy as collapsibleAnatomy} from './collapsible-anatomy.js'; 8 | export { 9 | getCollapsibleContext, 10 | setCollapsibleContext, 11 | } from './collapsible-context.svelte.js'; 12 | export { 13 | createCollapsible, 14 | type CreateCollapsibleProps, 15 | type CreateCollapsibleReturn, 16 | } from './create-collapsible.svelte.js'; 17 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/collection.ts: -------------------------------------------------------------------------------- 1 | export * from '@zag-js/collection'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/color-picker/color-picker-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {anatomy as _} from '@zag-js/color-picker'; 2 | 3 | export const anatomy = _.extendWith('view'); 4 | export const parts = anatomy.build(); 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/combobox/combobox-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/combobox'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/combobox/combobox-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemGroupProps, ItemProps} from '@zag-js/combobox'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateComboboxReturn} from './create-combobox.svelte.js'; 4 | 5 | export const [getComboboxContext, setComboboxContext] = 6 | createContext('Combobox'); 7 | 8 | export const [getComboboxItemPropsContext, setComboboxItemPropsContext] = 9 | createContext('ComboboxItem.props'); 10 | 11 | export const [ 12 | getComboboxItemGroupPropsContext, 13 | setComboboxItemGroupPropsContext, 14 | ] = createContext('ComboboxItemGroup.props'); 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/combobox/combobox-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | 20 | {#if asChild} 21 | {@render asChild(mergedProps)} 22 | {:else} 23 | 24 | {/if} 25 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/create-split-props.test.ts: -------------------------------------------------------------------------------- 1 | import {createSplitProps} from './create-split-props.js'; 2 | 3 | describe("'createSplitProps' util is working as expected", () => { 4 | test('splits props correctly', () => { 5 | const props = { 6 | a: 1, 7 | b: 2, 8 | c: 3, 9 | d: 4, 10 | e: 5, 11 | }; 12 | 13 | const [i, j] = createSplitProps(['a', 'b'])(props); 14 | 15 | expect(i).toEqual({a: 1, b: 2}); 16 | expect(j).toEqual({c: 3, d: 4, e: 5}); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/date-picker/date-picker-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/date-picker'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/dialog/dialog-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/dialog'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/dialog/dialog-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateDialogReturn} from './create-dialog.svelte.js'; 3 | 4 | export const [getDialogContext, setDialogContext] = 5 | createContext('Dialog'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/dialog/dialog-title.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |

27 | {@render children?.()} 28 |

29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/dialog/dialog.ts: -------------------------------------------------------------------------------- 1 | export {default as Backdrop} from './dialog-backdrop.svelte'; 2 | export {default as CloseTrigger} from './dialog-close-trigger.svelte'; 3 | export {default as Content} from './dialog-content.svelte'; 4 | export {default as Description} from './dialog-description.svelte'; 5 | export {default as Positioner} from './dialog-positioner.svelte'; 6 | export {default as Root} from './dialog-root.svelte'; 7 | export {default as Title} from './dialog-title.svelte'; 8 | export {default as Trigger} from './dialog-trigger.svelte'; 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/drawer/drawer-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {anatomy as _} from '@zag-js/dialog'; 2 | 3 | export const anatomy = _.rename('drawer').extendWith( 4 | 'body', 5 | 'footer', 6 | 'header', 7 | ); 8 | 9 | export const parts = anatomy.build(); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/drawer/drawer-body.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/drawer/drawer-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateDrawerReturn} from './create-drawer.svelte.js'; 3 | 4 | export const [getDrawerContext, setDrawerContext] = 5 | createContext('Drawer'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/drawer/drawer-title.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |

27 | {@render children?.()} 28 |

29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/drawer/drawer.ts: -------------------------------------------------------------------------------- 1 | export {default as Backdrop} from './drawer-backdrop.svelte'; 2 | export {default as Body} from './drawer-body.svelte'; 3 | export {default as CloseTrigger} from './drawer-close-trigger.svelte'; 4 | export {default as Content} from './drawer-content.svelte'; 5 | export {default as Description} from './drawer-description.svelte'; 6 | export {default as Footer} from './drawer-footer.svelte'; 7 | export {default as Header} from './drawer-header.svelte'; 8 | export {default as Positioner} from './drawer-positioner.svelte'; 9 | export {default as Root} from './drawer-root.svelte'; 10 | export {default as Title} from './drawer-title.svelte'; 11 | export {default as Trigger} from './drawer-trigger.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/editable/editable-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/editable'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/editable/editable-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateEditableReturn} from './create-editable.svelte.js'; 3 | 4 | export const [getEditableContext, setEditableContext] = 5 | createContext('Editable'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/editable/editable-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | {#if asChild} 19 | {@render asChild(mergedProps)} 20 | {:else} 21 | 22 | {/if} 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/editable/editable.ts: -------------------------------------------------------------------------------- 1 | export {default as Area} from './editable-area.svelte'; 2 | export {default as CancelTrigger} from './editable-cancel-trigger.svelte'; 3 | export {default as Control} from './editable-control.svelte'; 4 | export {default as EditTrigger} from './editable-edit-trigger.svelte'; 5 | export {default as Input} from './editable-input.svelte'; 6 | export {default as Label} from './editable-label.svelte'; 7 | export {default as Preview} from './editable-preview.svelte'; 8 | export {default as Root} from './editable-root.svelte'; 9 | export {default as SubmitTrigger} from './editable-submit-trigger.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/environment-provider/enviroment-provider-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | 3 | export interface Environment { 4 | getRootNode(): ShadowRoot | Document | Node; 5 | getDocument(): Document; 6 | getWindow(): Window & typeof globalThis; 7 | } 8 | 9 | export const [getEnvironmentContext, setEnvironmentContext] = 10 | createContext('EnvironmentProvider', false); 11 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/environment-provider/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | getEnvironmentContext, 3 | setEnvironmentContext, 4 | type Environment, 5 | } from './enviroment-provider-context.svelte.js'; 6 | export { 7 | default as EnvironmentProvider, 8 | type EnvironmentProviderProps, 9 | } from './environment-provider.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/field/field-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {createAnatomy} from '@zag-js/anatomy'; 2 | 3 | export const anatomy = createAnatomy('field').parts( 4 | 'root', 5 | 'label', 6 | 'input', 7 | 'select', 8 | 'textarea', 9 | 'errorText', 10 | 'helperText', 11 | 'requiredIndicator', 12 | ); 13 | 14 | export const parts = anatomy.build(); 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/field/field-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateFieldReturn} from './create-field.svelte.js'; 3 | 4 | export const [getFieldContext, setFieldContext] = 5 | createContext('Field', false); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/field/field-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | {#if asChild} 19 | {@render asChild(mergedProps)} 20 | {:else} 21 | 22 | {/if} 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/field/field-select.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 | 27 | {/if} 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/field/field.ts: -------------------------------------------------------------------------------- 1 | export {default as ErrorText} from './field-error-text.svelte'; 2 | export {default as HelperText} from './field-helper-text.svelte'; 3 | export {default as Input} from './field-input.svelte'; 4 | export {default as Label} from './field-label.svelte'; 5 | export {default as RequiredIndicator} from './field-required-indicator.svelte'; 6 | export {default as Root} from './field-root.svelte'; 7 | export {default as Select} from './field-select.svelte'; 8 | export {default as Textarea} from './field-textarea.svelte'; 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/file-upload/file-upload-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/file-upload'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/file-upload/file-upload-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/file-upload'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateFileUploadReturn} from './create-file-upload.svelte.js'; 4 | 5 | export const [getFileUploadContext, setFileUploadContext] = 6 | createContext('FileUpload'); 7 | 8 | export const [getFileUploadItemPropsContext, setFileUploadItemPropsContext] = 9 | createContext('FileUploadItem.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/floating-panel/floating-panel-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/floating-panel'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/floating-panel/floating-panel-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateFloatingPanelReturn} from './create-floating-panel.svelte.js'; 3 | 4 | export const [getFloatingPanelContext, setFloatingPanelContext] = 5 | createContext('FloatingPanel'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/focus-trap/index.ts: -------------------------------------------------------------------------------- 1 | export {default as FocusTrap, type FocusTrapProps} from './focus-trap.svelte'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/highlight/index.ts: -------------------------------------------------------------------------------- 1 | export {default as Highlight, type HighlightProps} from './highlight.svelte'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/hover-card/hover-card-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/hover-card'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/hover-card/hover-card-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateHoverCardReturn} from './create-hover-card.svelte.js'; 3 | 4 | export const [getHoverCardContext, setHoverCardContext] = 5 | createContext('HoverCard'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/hover-card/hover-card.ts: -------------------------------------------------------------------------------- 1 | export {default as ArrowTip} from './hover-card-arrow-tip.svelte'; 2 | export {default as Arrow} from './hover-card-arrow.svelte'; 3 | export {default as Content} from './hover-card-content.svelte'; 4 | export {default as Positioner} from './hover-card-positioner.svelte'; 5 | export {default as Root} from './hover-card-root.svelte'; 6 | export {default as Trigger} from './hover-card-trigger.svelte'; 7 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/listbox/listbox-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/listbox'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/listbox/listbox-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemGroupProps, ItemProps} from '@zag-js/listbox'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateListboxReturn} from './create-listbox.svelte.js'; 4 | 5 | export const [getListboxContext, setListboxContext] = 6 | createContext('Listbox'); 7 | 8 | export const [getListboxItemPropsContext, setListboxItemPropsContext] = 9 | createContext('ListboxItem.props'); 10 | 11 | export const [ 12 | getListboxItemGroupPropsContext, 13 | setListboxItemGroupPropsContext, 14 | ] = createContext('ListboxItemGroup.props'); 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/listbox/listbox.ts: -------------------------------------------------------------------------------- 1 | export {collection} from '@zag-js/listbox'; 2 | export {default as Content} from './listbox-content.svelte'; 3 | export {default as Input} from './listbox-input.svelte'; 4 | export {default as ItemGroupLabel} from './listbox-item-group-label.svelte'; 5 | export {default as ItemGroup} from './listbox-item-group.svelte'; 6 | export {default as ItemIndicator} from './listbox-item-indicator.svelte'; 7 | export {default as ItemText} from './listbox-item-text.svelte'; 8 | export {default as Item} from './listbox-item.svelte'; 9 | export {default as Label} from './listbox-label.svelte'; 10 | export {default as Root} from './listbox-root.svelte'; 11 | export {default as ValueText} from './listbox-value-text.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/locale-provider/index.ts: -------------------------------------------------------------------------------- 1 | export type {Locale} from '@zag-js/i18n-utils'; 2 | export { 3 | getLocaleContext, 4 | setLocaleContext, 5 | } from './locale-provider-context.svelte.js'; 6 | export { 7 | default as LocaleProvider, 8 | type LocaleProviderProps, 9 | } from './locale-provider.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/locale-provider/locale-provider-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {Locale} from '@zag-js/i18n-utils'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | 4 | export const [getLocaleContext, setLocaleContext] = createContext( 5 | 'LocaleProvider', 6 | false, 7 | ); 8 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/locale-provider/locale-provider.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 21 | 22 | {@render children()} 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/menu/menu-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/menu'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/menu/menu-arrow.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 | 27 | {@render children?.()} 28 | 29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/merge-props.test.ts: -------------------------------------------------------------------------------- 1 | import {mergeProps} from './merge-props.js'; 2 | 3 | describe("'mergeProps' util is working as expected", () => { 4 | it('merges class correctly', () => { 5 | expect( 6 | mergeProps( 7 | {class: 'a b'}, 8 | {class: ['c', 'd e']}, 9 | { 10 | class: { 11 | f: false, 12 | g: true, 13 | }, 14 | }, 15 | { 16 | class: [ 17 | 'h', 18 | { 19 | i: false, 20 | j: true, 21 | }, 22 | ], 23 | }, 24 | ), 25 | ).toEqual({class: 'a b c d e g h j'}); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/merge-props.ts: -------------------------------------------------------------------------------- 1 | import {mergeProps as zagMergeProps} from '@zag-js/svelte'; 2 | import {clsx} from 'clsx'; 3 | import type {GenericObject} from './types.js'; 4 | 5 | export function mergeProps(...args: GenericObject[]): GenericObject { 6 | const l: GenericObject[] = []; 7 | 8 | /* support svelte class value */ 9 | for (const o of args) { 10 | const c = {...o}; 11 | 12 | if (c.class && !isString(c.class)) { 13 | c.class = clsx(c.class); 14 | } 15 | 16 | if (c.className && !isString(c.class)) { 17 | c.className = clsx(c.className); 18 | } 19 | 20 | l.push(c); 21 | } 22 | 23 | return zagMergeProps(...l); 24 | } 25 | 26 | function isString(value: unknown): value is string { 27 | return typeof value === 'string'; 28 | } 29 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/number-input/number-input-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/number-input'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/number-input/number-input-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateNumberInputReturn} from './create-number-input.svelte.js'; 3 | 4 | export const [getNumberInputContext, setNumberInputContext] = 5 | createContext('NumberInput'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/number-input/number-input-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/number-input/number-input.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './number-input-control.svelte'; 2 | export {default as DecrementTrigger} from './number-input-decrement-trigger.svelte'; 3 | export {default as IncrementTrigger} from './number-input-increment-trigger.svelte'; 4 | export {default as Input} from './number-input-input.svelte'; 5 | export {default as Label} from './number-input-label.svelte'; 6 | export {default as Root} from './number-input-root.svelte'; 7 | export {default as Scrubber} from './number-input-scrubber.svelte'; 8 | export {default as ValueText} from './number-input-value-text.svelte'; 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * as Pagination from './pagination.js'; 2 | 3 | export type {PaginationEllipsisProps} from './pagination-ellipsis.svelte'; 4 | export type {PaginationItemProps} from './pagination-item.svelte'; 5 | export type {PaginationNextTriggerProps} from './pagination-next-trigger.svelte'; 6 | export type {PaginationPrevTriggerProps} from './pagination-prev-trigger.svelte'; 7 | export type {PaginationProps} from './pagination-root.svelte'; 8 | 9 | export { 10 | createPagination, 11 | type CreatePaginationProps, 12 | type CreatePaginationReturn, 13 | } from './create-pagination.svelte.js'; 14 | export {anatomy as paginationAnatomy} from './pagination-anatomy.js'; 15 | export { 16 | getPaginationContext, 17 | setPaginationContext, 18 | } from './pagination-context.svelte.js'; 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pagination/pagination-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/pagination'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pagination/pagination-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreatePaginationReturn} from './create-pagination.svelte.js'; 3 | 4 | export const [getPaginationContext, setPaginationContext] = 5 | createContext('Pagination'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pagination/pagination.ts: -------------------------------------------------------------------------------- 1 | export {default as Ellipsis} from './pagination-ellipsis.svelte'; 2 | export {default as Item} from './pagination-item.svelte'; 3 | export {default as NextTrigger} from './pagination-next-trigger.svelte'; 4 | export {default as PrevTrigger} from './pagination-prev-trigger.svelte'; 5 | export {default as Root} from './pagination-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pin-input/index.ts: -------------------------------------------------------------------------------- 1 | export * as PinInput from './pin-input.js'; 2 | 3 | export type {PinInputControlProps} from './pin-input-control.svelte'; 4 | export type {PinInputHiddenInputProps} from './pin-input-hidden-input.svelte'; 5 | export type {PinInputInputProps} from './pin-input-input.svelte'; 6 | export type {PinInputLabelProps} from './pin-input-label.svelte'; 7 | export type {PinInputProps} from './pin-input-root.svelte'; 8 | 9 | export { 10 | createPinInputContext, 11 | type CreatePinInputProps, 12 | type CreatePinInputReturn, 13 | } from './create-pin-input.svelte.js'; 14 | export {anatomy as pinInputAnatomy} from './pin-input-anatomy.js'; 15 | export { 16 | getPinInputContext, 17 | setPinInputContext, 18 | } from './pin-input-context.svelte.js'; 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pin-input/pin-input-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/pin-input'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pin-input/pin-input-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreatePinInputReturn} from './create-pin-input.svelte.js'; 3 | 4 | export const [getPinInputContext, setPinInputContext] = 5 | createContext('PinInput'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pin-input/pin-input-hidden-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/pin-input/pin-input.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './pin-input-control.svelte'; 2 | export {default as HiddenInput} from './pin-input-hidden-input.svelte'; 3 | export {default as Input} from './pin-input-input.svelte'; 4 | export {default as Label} from './pin-input-label.svelte'; 5 | export {default as Root} from './pin-input-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/popover/popover-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/popover'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/popover/popover-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreatePopoverReturn} from './create-popover.svelte.js'; 3 | 4 | export const [getPopoverContext, setPopoverContext] = 5 | createContext('Popover'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/popover/popover.ts: -------------------------------------------------------------------------------- 1 | export {default as Anchor} from './popover-anchor.svelte'; 2 | export {default as ArrowTip} from './popover-arrow-tip.svelte'; 3 | export {default as Arrow} from './popover-arrow.svelte'; 4 | export {default as CloseTrigger} from './popover-close-trigger.svelte'; 5 | export {default as Content} from './popover-content.svelte'; 6 | export {default as Description} from './popover-description.svelte'; 7 | export {default as Indicator} from './popover-indicator.svelte'; 8 | export {default as Positioner} from './popover-positioner.svelte'; 9 | export {default as Root} from './popover-root.svelte'; 10 | export {default as Title} from './popover-title.svelte'; 11 | export {default as Trigger} from './popover-trigger.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/portal/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | default as PortalProvider, 3 | type PortalProviderProps, 4 | } from './portal-provider.svelte'; 5 | export {default as Portal, type PortalProps} from './portal.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/portal/portal-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | 3 | interface PortalProviderProps { 4 | container?: HTMLElement | null; 5 | } 6 | 7 | export const [getPortalProviderPropsContext, setPortalProviderPropsContext] = 8 | createContext('PortalProvider.props', false); 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/portal/portal-provider.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 20 | 21 | {@render children?.()} 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/presence/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | getPresenceContext, 3 | setPresenceContext, 4 | } from './presence-context.svelte.js'; 5 | export {default as Presence, type PresenceProps} from './presence.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/presence/presence-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type { 3 | CreatePresenceReturn, 4 | PresenceStrategyProps, 5 | } from './create-presence.svelte.js'; 6 | 7 | export const [getPresenceContext, setPresenceContext] = 8 | createContext('Presence'); 9 | 10 | export const [ 11 | getPresenceStrategyPropsContext, 12 | setPresenceStrategyPropsContext, 13 | ] = createContext('PresenceStrategyProps'); 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/progress/progress-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/progress'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/progress/progress-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateProgressReturn} from './create-progress.svelte.js'; 3 | 4 | export const [getProgressContext, setProgressContext] = 5 | createContext('Progress'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/progress/progress.ts: -------------------------------------------------------------------------------- 1 | export {default as CircleRange} from './progress-circle-range.svelte'; 2 | export {default as CircleTrack} from './progress-circle-track.svelte'; 3 | export {default as Circle} from './progress-circle.svelte'; 4 | export {default as Label} from './progress-label.svelte'; 5 | export {default as Range} from './progress-range.svelte'; 6 | export {default as Root} from './progress-root.svelte'; 7 | export {default as Track} from './progress-track.svelte'; 8 | export {default as ValueText} from './progress-value-text.svelte'; 9 | export {default as View} from './progress-view.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/qr-code/index.ts: -------------------------------------------------------------------------------- 1 | export * as QrCode from './qr-code.js'; 2 | 3 | export type {QrCodeDownloadTriggerProps} from './qr-code-download-trigger.svelte'; 4 | export type {QrCodeFrameProps} from './qr-code-frame.svelte'; 5 | export type {QrCodeOverlayProps} from './qr-code-overlay.svelte'; 6 | export type {QrCodePatternProps} from './qr-code-pattern.svelte'; 7 | export type {QrCodeProps} from './qr-code-root.svelte'; 8 | 9 | export { 10 | createQRCode, 11 | type CreateQrCodeProps, 12 | type CreateQrCodeReturn, 13 | } from './create-qr-code.svelte.js'; 14 | export {anatomy as qrCodeAnatomy} from './qr-code-anatomy.js'; 15 | export {getQrCodeContext, setQrCodeContext} from './qr-code-context.svelte.js'; 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/qr-code/qr-code-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/qr-code'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/qr-code/qr-code-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateQrCodeReturn} from './create-qr-code.svelte.js'; 3 | 4 | export const [getQrCodeContext, setQrCodeContext] = 5 | createContext('QRCode'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/qr-code/qr-code.ts: -------------------------------------------------------------------------------- 1 | export {default as DownloadTrigger} from './qr-code-download-trigger.svelte'; 2 | export {default as Frame} from './qr-code-frame.svelte'; 3 | export {default as Overlay} from './qr-code-overlay.svelte'; 4 | export {default as Pattern} from './qr-code-pattern.svelte'; 5 | export {default as Root} from './qr-code-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/radio-group/radio-group-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/radio-group'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/radio-group/radio-group-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/radio-group'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateRadioGroupReturn} from './create-radio-group.svelte.js'; 4 | 5 | export const [getRadioGroupContext, setRadioGroupContext] = 6 | createContext('RadioGroup'); 7 | 8 | export const [getRadioGroupItemPropsContext, setRadioGroupItemPropsContext] = 9 | createContext('RadioGroupItem'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/radio-group/radio-group.ts: -------------------------------------------------------------------------------- 1 | export {default as Indicator} from './radio-group-indicator.svelte'; 2 | export {default as ItemControl} from './radio-group-item-control.svelte'; 3 | export {default as ItemHiddenInput} from './radio-group-item-hidden-input.svelte'; 4 | export {default as ItemText} from './radio-group-item-text.svelte'; 5 | export {default as Item} from './radio-group-item.svelte'; 6 | export {default as Label} from './radio-group-label.svelte'; 7 | export {default as Root} from './radio-group-root.svelte'; 8 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/rating-group/index.ts: -------------------------------------------------------------------------------- 1 | export * as RatingGroup from './rating-group.js'; 2 | 3 | export type {RatingGroupControlProps} from './rating-group-control.svelte'; 4 | export type {RatingGroupHiddenInputProps} from './rating-group-hidden-input.svelte'; 5 | export type {RatingGroupItemProps} from './rating-group-item.svelte'; 6 | export type {RatingGroupLabelProps} from './rating-group-label.svelte'; 7 | export type {RatingGroupProps} from './rating-group-root.svelte'; 8 | 9 | export { 10 | createRatingGroup, 11 | type CreateRatingGroupProps, 12 | type CreateRatingGroupReturn, 13 | } from './create-rating-group.svelte.js'; 14 | export {anatomy as ratingGroupAnatomy} from './rating-group-anatomy.js'; 15 | export { 16 | getRatingGroupContext, 17 | setRatingGroupContext, 18 | } from './rating-group-context.svelte.js'; 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/rating-group/rating-group-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/rating-group'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/rating-group/rating-group-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateRatingGroupReturn} from './create-rating-group.svelte.js'; 3 | 4 | export const [getRatingGroupContext, setRatingGroupContext] = 5 | createContext('RatingGroup'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/rating-group/rating-group.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './rating-group-control.svelte'; 2 | export {default as HiddenInput} from './rating-group-hidden-input.svelte'; 3 | export {default as Item} from './rating-group-item.svelte'; 4 | export {default as Label} from './rating-group-label.svelte'; 5 | export {default as Root} from './rating-group-root.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/segment-group/segment-group-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {anatomy as _} from '@zag-js/radio-group'; 2 | 3 | export const anatomy = _.rename('segment-group'); 4 | export const parts = anatomy.build(); 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/segment-group/segment-group-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/radio-group'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateSegmentGroupReturn} from './create-segment-group.svelte.js'; 4 | 5 | export const [getSegmentGroupContext, setSegmentGroupContext] = 6 | createContext('SegmentGroup'); 7 | 8 | export const [ 9 | getSegmentGroupItemPropsContext, 10 | setSegmentGroupItemPropsContext, 11 | ] = createContext('SegmentGroupItem.props'); 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/segment-group/segment-group.ts: -------------------------------------------------------------------------------- 1 | export {default as Indicator} from './segment-group-indicator.svelte'; 2 | export {default as ItemControl} from './segment-group-item-control.svelte'; 3 | export {default as ItemHiddenInput} from './segment-group-item-hidden-input.svelte'; 4 | export {default as ItemText} from './segment-group-item-text.svelte'; 5 | export {default as Item} from './segment-group-item.svelte'; 6 | export {default as Label} from './segment-group-label.svelte'; 7 | export {default as Root} from './segment-group-root.svelte'; 8 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/select/select-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/select'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/select/select-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemGroupProps, ItemProps} from '@zag-js/select'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateSelectReturn} from './create-select.svelte.js'; 4 | 5 | export const [getSelectContext, setSelectContext] = 6 | createContext('Select'); 7 | 8 | export const [getSelectItemPropsContext, setSelectItemPropsContext] = 9 | createContext('SelectItem.props'); 10 | 11 | export const [getSelectItemGroupPropsContext, setSelectItemGroupPropsContext] = 12 | createContext('SelectItemGroup.props'); 13 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/select/select-list.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/signature-pad/signature-pad-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/signature-pad'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/signature-pad/signature-pad-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateSignaturePadReturn} from './create-signature-pad.svelte.js'; 3 | 4 | export const [getSignaturePadContext, setSignaturePadContext] = 5 | createContext('SignaturePad'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/signature-pad/signature-pad.ts: -------------------------------------------------------------------------------- 1 | export {default as ClearTrigger} from './signature-pad-clear-trigger.svelte'; 2 | export {default as Control} from './signature-pad-control.svelte'; 3 | export {default as CurrentSegmentPath} from './signature-pad-current-segment-path.svelte'; 4 | export {default as Guide} from './signature-pad-guide.svelte'; 5 | export {default as HiddenInput} from './signature-pad-hidden-input.svelte'; 6 | export {default as Label} from './signature-pad-label.svelte'; 7 | export {default as Root} from './signature-pad-root.svelte'; 8 | export {default as SegmentPath} from './signature-pad-segment-path.svelte'; 9 | export {default as Segment} from './signature-pad-segment.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/slider/slider-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/slider'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/slider/slider-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ThumbProps} from '@zag-js/slider'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateSliderReturn} from './create-slider.svelte.js'; 4 | 5 | export const [getSliderContext, setSliderContext] = 6 | createContext('Slider'); 7 | 8 | export const [getSliderThumbPropsContext, setSliderThumbPropsContext] = 9 | createContext('SliderThumb.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/slider/slider-range.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/slider/slider-track.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/slider/slider.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './slider-control.svelte'; 2 | export {default as DraggingIndicator} from './slider-dragging-indicator.svelte'; 3 | export {default as HiddenInput} from './slider-hidden-input.svelte'; 4 | export {default as Label} from './slider-label.svelte'; 5 | export {default as MarkerGroup} from './slider-marker-group.svelte'; 6 | export {default as Marker} from './slider-marker.svelte'; 7 | export {default as Range} from './slider-range.svelte'; 8 | export {default as Root} from './slider-root.svelte'; 9 | export {default as Thumb} from './slider-thumb.svelte'; 10 | export {default as Track} from './slider-track.svelte'; 11 | export {default as ValueText} from './slider-value-text.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/splitter/index.ts: -------------------------------------------------------------------------------- 1 | export * as Splitter from './splitter.js'; 2 | 3 | export type {SplitterPanelProps} from './splitter-panel.svelte'; 4 | export type {SplitterResizeTriggerProps} from './splitter-resize-trigger.svelte'; 5 | export type {SplitterProps} from './splitter-root.svelte'; 6 | 7 | export { 8 | createSplitter, 9 | type CreateSplitterProps, 10 | type CreateSplitterReturn, 11 | } from './create-splitter.svelte.js'; 12 | export {anatomy as splitterAnatomy} from './splitter-anatomy.js'; 13 | export { 14 | getSplitterContext, 15 | setSplitterContext, 16 | } from './splitter-context.svelte.js'; 17 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/splitter/splitter-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/splitter'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/splitter/splitter-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateSplitterReturn} from './create-splitter.svelte.js'; 3 | 4 | export const [getSplitterContext, setSplitterContext] = 5 | createContext('Splitter'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/splitter/splitter.ts: -------------------------------------------------------------------------------- 1 | export { default as Panel } from './splitter-panel.svelte'; 2 | export { default as ResizeTrigger } from './splitter-resize-trigger.svelte'; 3 | export { default as Root } from './splitter-root.svelte'; 4 | 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/steps/steps-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/steps'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/steps/steps-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/steps'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateStepsReturn} from './create-steps.svelte.js'; 4 | 5 | export const [getStepsContext, setStepsContext] = 6 | createContext('Steps'); 7 | 8 | export const [getStepsItemPropsContext, setStepsItemPropsContext] = 9 | createContext('StepsItem.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/steps/steps-list.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/steps/steps-progress.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/steps/steps.ts: -------------------------------------------------------------------------------- 1 | export {default as CompletedContent} from './steps-completed-content.svelte'; 2 | export {default as Content} from './steps-content.svelte'; 3 | export {default as Indicator} from './steps-indicator.svelte'; 4 | export {default as Item} from './steps-item.svelte'; 5 | export {default as List} from './steps-list.svelte'; 6 | export {default as NextTrigger} from './steps-next-trigger.svelte'; 7 | export {default as PrevTrigger} from './steps-prev-trigger.svelte'; 8 | export {default as Progress} from './steps-progress.svelte'; 9 | export {default as Root} from './steps-root.svelte'; 10 | export {default as Separator} from './steps-separator.svelte'; 11 | export {default as Trigger} from './steps-trigger.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/index.ts: -------------------------------------------------------------------------------- 1 | export * as Switch from './switch.js'; 2 | 3 | export type {SwitchControlProps} from './switch-control.svelte'; 4 | export type {SwitchHiddenInputProps} from './switch-hidden-input.svelte'; 5 | export type {SwitchLabelProps} from './switch-label.svelte'; 6 | export type {SwitchProps} from './switch-root.svelte'; 7 | export type {SwitchThumbProps} from './switch-thumb.svelte'; 8 | 9 | export { 10 | createSwitch, 11 | type CreateSwitchProps, 12 | type CreateSwitchReturn, 13 | } from './create-switch.svelte.js'; 14 | export {anatomy as switchAnatomy} from './switch-anatomy.js'; 15 | export {getSwitchContext, setSwitchContext} from './switch-context.svelte.js'; 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/switch-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/switch'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/switch-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateSwitchReturn} from './create-switch.svelte.js'; 3 | 4 | export const [getSwitchContext, setSwitchContext] = 5 | createContext('Switch'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/switch-hidden-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/switch-thumb.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/switch/switch.ts: -------------------------------------------------------------------------------- 1 | export {default as Control} from './switch-control.svelte'; 2 | export {default as HiddenInput} from './switch-hidden-input.svelte'; 3 | export {default as Label} from './switch-label.svelte'; 4 | export {default as Root} from './switch-root.svelte'; 5 | export {default as Thumb} from './switch-thumb.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * as Tabs from './tabs.js'; 2 | 3 | export type {TabsContentProps} from './tabs-content.svelte'; 4 | export type {TabsIndicatorProps} from './tabs-indicator.svelte'; 5 | export type {TabsListProps} from './tabs-list.svelte'; 6 | export type {TabsProps} from './tabs-root.svelte'; 7 | export type {TabsTriggerProps} from './tabs-trigger.svelte'; 8 | 9 | export { 10 | createTabs, 11 | type CreateTabsProps, 12 | type CreateTabsReturn, 13 | } from './create-tabs.svelte.js'; 14 | export {anatomy as tabsAnatomy} from './tabs-anatomy.js'; 15 | export {getTabsContext, setTabsContext} from './tabs-context.svelte.js'; 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/tabs-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/tabs'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/tabs-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateTabsReturn} from './create-tabs.svelte.js'; 3 | 4 | export const [getTabsContext, setTabsContext] = 5 | createContext('Tabs'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/tabs-indicator.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 | 27 | {@render children?.()} 28 | 29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/tabs-list.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tabs/tabs.ts: -------------------------------------------------------------------------------- 1 | export {default as Content} from './tabs-content.svelte'; 2 | export {default as Indicator} from './tabs-indicator.svelte'; 3 | export {default as List} from './tabs-list.svelte'; 4 | export {default as Root} from './tabs-root.svelte'; 5 | export {default as Trigger} from './tabs-trigger.svelte'; 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tags-input/tags-input-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/tags-input'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tags-input/tags-input-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/tags-input'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateTagsInputReturn} from './create-tags-input.svelte.js'; 4 | 5 | export const [getTagsInputContext, setTagsInputContext] = 6 | createContext('TagsInput'); 7 | 8 | export const [getTagsInputItemPropsContext, setTagsInputItemPropsContext] = 9 | createContext('TagsInputItem.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tags-input/tags-input-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tags-input/tags-input.ts: -------------------------------------------------------------------------------- 1 | export {default as ClearTrigger} from './tags-input-clear-trigger.svelte'; 2 | export {default as Control} from './tags-input-control.svelte'; 3 | export {default as HiddenInput} from './tags-input-hidden-input.svelte'; 4 | export {default as Input} from './tags-input-input.svelte'; 5 | export {default as ItemDeleteTrigger} from './tags-input-item-delete-trigger.svelte'; 6 | export {default as ItemInput} from './tags-input-item-input.svelte'; 7 | export {default as ItemPreview} from './tags-input-item-preview.svelte'; 8 | export {default as ItemText} from './tags-input-item-text.svelte'; 9 | export {default as Item} from './tags-input-item.svelte'; 10 | export {default as Label} from './tags-input-label.svelte'; 11 | export {default as Root} from './tags-input-root.svelte'; 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/time-picker/time-picker-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/time-picker'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/time-picker/time-picker-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateTimePickerReturn} from './create-time-picker.svelte.js'; 3 | 4 | export const [getTimePickerContext, setTimePickerContext] = 5 | createContext('TimePicker'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/time-picker/time-picker-input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | 22 | {#if asChild} 23 | {@render asChild(mergedProps)} 24 | {:else} 25 | 26 | {/if} 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/create-timer.svelte.ts: -------------------------------------------------------------------------------- 1 | import {normalizeProps, reflect, useMachine} from '@zag-js/svelte'; 2 | import * as timer from '@zag-js/timer'; 3 | import {getEnvironmentContext} from '../environment-provider/enviroment-provider-context.svelte.js'; 4 | 5 | export interface CreateTimerProps extends Omit {} 6 | export interface CreateTimerReturn extends timer.Api {} 7 | 8 | export function createTimer(props: CreateTimerProps): CreateTimerReturn { 9 | const environment = getEnvironmentContext(); 10 | 11 | const service = useMachine(timer.machine, () => ({ 12 | getRootNode: environment?.getRootNode, 13 | ...props, 14 | })); 15 | 16 | return reflect(() => timer.connect(service, normalizeProps)); 17 | } 18 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/timer-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/timer'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/timer-area.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/timer-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {ItemProps} from '@zag-js/timer'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateTimerReturn} from './create-timer.svelte.js'; 4 | 5 | export const [getTimerContext, setTimerContext] = 6 | createContext('Timer'); 7 | 8 | export const [getTimerItemPropsContext, setTimerItemPropsContext] = 9 | createContext('TimerItem.props'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/timer-control.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/timer/timer.ts: -------------------------------------------------------------------------------- 1 | export {parse} from '@zag-js/timer'; 2 | export {default as ActionTrigger} from './timer-action-trigger.svelte'; 3 | export {default as Area} from './timer-area.svelte'; 4 | export {default as Control} from './timer-control.svelte'; 5 | export {default as ItemLabel} from './timer-item-label.svelte'; 6 | export {default as ItemValue} from './timer-item-value.svelte'; 7 | export {default as Item} from './timer-item.svelte'; 8 | export {default as Root} from './timer-root.svelte'; 9 | export {default as Separator} from './timer-separator.svelte'; 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toast/create-toaster.svelte.ts: -------------------------------------------------------------------------------- 1 | import * as toast from '@zag-js/toast'; 2 | 3 | export interface CreateToasterProps extends toast.StoreProps {} 4 | export interface CreateToasterReturn extends toast.Store {} 5 | 6 | export function createToaster(props: CreateToasterProps): CreateToasterReturn { 7 | const store = $derived(toast.createStore(props)); 8 | return store; 9 | } 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toast/toast-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/toast'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toast/toast-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import * as toast from '@zag-js/toast'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | 4 | export const [getToastContext, setToastContext] = 5 | createContext('Toast'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toast/toast-provider.svelte: -------------------------------------------------------------------------------- 1 | 26 | 27 | {@render props.children?.(api)} 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toast/toast.ts: -------------------------------------------------------------------------------- 1 | export {default as ActionTrigger} from './toast-action-trigger.svelte'; 2 | export {default as CloseTrigger} from './toast-close-trigger.svelte'; 3 | export {default as Description} from './toast-description.svelte'; 4 | export {default as GhostAfter} from './toast-ghost-after.svelte'; 5 | export {default as GhostBefore} from './toast-ghost-before.svelte'; 6 | export {default as Root} from './toast-root.svelte'; 7 | export {default as Title} from './toast-title.svelte'; 8 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle-group/index.ts: -------------------------------------------------------------------------------- 1 | export * as ToggleGroup from './toggle-group.js'; 2 | 3 | export type {ToggleGroupItemProps} from './toggle-group-item.svelte'; 4 | export type {ToggleGroupProps} from './toggle-group-root.svelte'; 5 | 6 | export { 7 | createToggleGroup, 8 | type CreateToggleGroupProps, 9 | type CreateToggleGroupReturn, 10 | } from './create-toggle-group.svelte.js'; 11 | export {anatomy as toggleGroupAnatomy} from './toggle-group-anatomy.js'; 12 | export { 13 | getToggleGroupContext, 14 | setToggleGroupContext, 15 | } from './toggle-group-context.svelte.js'; 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle-group/toggle-group-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/toggle-group'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle-group/toggle-group-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateToggleGroupReturn} from './create-toggle-group.svelte.js'; 3 | 4 | export const [getToggleGroupContext, setToggleGroupContext] = 5 | createContext('ToggleGroup'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle-group/toggle-group.ts: -------------------------------------------------------------------------------- 1 | export {default as Item} from './toggle-group-item.svelte'; 2 | export {default as Root} from './toggle-group-root.svelte'; 3 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle/create-toggle.svelte.ts: -------------------------------------------------------------------------------- 1 | import {normalizeProps, reflect, useMachine} from '@zag-js/svelte'; 2 | import * as toggle from '@zag-js/toggle'; 3 | 4 | export interface CreateToggleProps extends toggle.Props {} 5 | export interface CreateToggleReturn extends toggle.Api {} 6 | 7 | export function createToggle(props: CreateToggleProps) { 8 | const service = useMachine(toggle.machine, props); 9 | return reflect(() => toggle.connect(service, normalizeProps)); 10 | } 11 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle/index.ts: -------------------------------------------------------------------------------- 1 | export * as Toggle from './toggle.js'; 2 | 3 | export type {ToggleIndicatorProps} from './toggle-indicator.svelte'; 4 | export type {ToggleProps} from './toggle-root.svelte'; 5 | 6 | export { 7 | createToggle, 8 | type CreateToggleProps, 9 | type CreateToggleReturn, 10 | } from './create-toggle.svelte.js'; 11 | export {anatomy as toggleAnatomy} from './toggle-anatomy.js'; 12 | export {getToggleContext, setToggleContext} from './toggle-context.svelte.js'; 13 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle/toggle-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/toggle'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle/toggle-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateToggleReturn} from './create-toggle.svelte.js'; 3 | 4 | export const [getToggleContext, setToggleContext] = 5 | createContext('Toggle'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/toggle/toggle.ts: -------------------------------------------------------------------------------- 1 | export {default as Indicator} from './toggle-indicator.svelte'; 2 | export {default as Root} from './toggle-root.svelte'; 3 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export * as Tooltip from './tooltip.js'; 2 | 3 | export type {TooltipArrowTipProps} from './tooltip-arrow-tip.svelte'; 4 | export type {TooltipArrowProps} from './tooltip-arrow.svelte'; 5 | export type {TooltipContentProps} from './tooltip-content.svelte'; 6 | export type {TooltipPositionerProps} from './tooltip-positioner.svelte'; 7 | export type {TooltipProps} from './tooltip-root.svelte'; 8 | export type {TooltipTriggerProps} from './tooltip-trigger.svelte'; 9 | 10 | export { 11 | createTooltip, 12 | type CreateTooltipProps, 13 | type CreateTooltipReturn, 14 | } from './create-tooltip.svelte.js'; 15 | export {anatomy as tooltipAnatomy} from './tooltip-anatomy.js'; 16 | export { 17 | getTooltipContext, 18 | setTooltipContext, 19 | } from './tooltip-context.svelte.js'; 20 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tooltip/tooltip-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/tooltip'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tooltip/tooltip-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import type {CreateTooltipReturn} from './create-tooltip.svelte.js'; 3 | 4 | export const [getTooltipContext, setTooltipContext] = 5 | createContext('Tooltip'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tooltip/tooltip.ts: -------------------------------------------------------------------------------- 1 | export {default as ArrowTip} from './tooltip-arrow-tip.svelte'; 2 | export {default as Arrow} from './tooltip-arrow.svelte'; 3 | export {default as Content} from './tooltip-content.svelte'; 4 | export {default as Positioner} from './tooltip-positioner.svelte'; 5 | export {default as Root} from './tooltip-root.svelte'; 6 | export {default as Trigger} from './tooltip-trigger.svelte'; 7 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tour/tour-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {anatomy as _} from '@zag-js/tour'; 2 | 3 | export const anatomy = _.extendWith('trigger'); 4 | export const parts = anatomy.build(); 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tour/tour-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from '../create-context.svelte.js'; 2 | import {type CreateTourReturn} from './create-tour.svelte.js'; 3 | 4 | export const [getTourContext, setTourContext] = 5 | createContext('Tour'); 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tour/tour-spotlight.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | {#if asChild} 24 | {@render asChild(mergedProps)} 25 | {:else} 26 |
27 | {@render children?.()} 28 |
29 | {/if} 30 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tree-view/tree-view-anatomy.ts: -------------------------------------------------------------------------------- 1 | export {anatomy} from '@zag-js/tree-view'; 2 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tree-view/tree-view-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import type {NodeProps} from '@zag-js/tree-view'; 2 | import {createContext} from '../create-context.svelte.js'; 3 | import type {CreateTreeViewReturn} from './create-tree-view.svelte.js'; 4 | 5 | export const [getTreeViewContext, setTreeViewContext] = 6 | createContext('TreeView'); 7 | 8 | export const [getTreeViewNodePropsContext, setTreeViewNodePropsContext] = 9 | createContext('TreeViewNodeProps'); 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/lib/tree-view/types.ts: -------------------------------------------------------------------------------- 1 | export interface NodeProps { 2 | node: T; 3 | indexPath: number[]; 4 | } 5 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/+page.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/calvo-jp/ui-ingredients/a49d45bdaecd08f9e5752b26cc663fa92663b6b7/packages/ui-ingredients/src/routes/+page.svelte -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/+page.ts: -------------------------------------------------------------------------------- 1 | import {redirect} from '@sveltejs/kit'; 2 | import type {PageLoad} from './$types.js'; 3 | 4 | export const load: PageLoad = async () => { 5 | redirect(307, '/accordion'); 6 | }; 7 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/check-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/chevron-down-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/chevron-left-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/chevron-right-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/chevron-up-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/dropper-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/highlight/+page.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | { 13 | query = e.currentTarget.value; 14 | }} 15 | style="padding:0px 14px;height:40px;border:1px solid var(--border-default);" 16 | /> 17 | 18 | 19 | 20 | 26 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/info-circle-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/menu/context/+page.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | Right click 15 | 16 | 17 | 18 | {#each items as item} 19 | 20 | {item.label} 21 | 22 | {/each} 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/refresh-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/star-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/toaster.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createToaster} from '$lib/index.js'; 2 | 3 | export const toaster = createToaster({ 4 | placement: 'bottom-end', 5 | overlap: true, 6 | duration: 1000 * 5, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/routes/x-icon.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/accordion/accordion.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | {#each items as item} 19 | 20 | 21 | {item.label} 22 | 23 | 24 | {item.content} 25 | 26 | {/each} 27 | 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/alert-dialog/alert-dialog.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Trigger 7 | 8 | 9 | 10 | Title 11 | Description 12 | Close 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/alert-dialog/alert-dialog.test.ts: -------------------------------------------------------------------------------- 1 | import {alertDialogAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import AlertDialog from './alert-dialog.svelte'; 6 | 7 | describe.skip('AlertDialog', () => { 8 | it.each(getAnatomySelector(alertDialogAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(AlertDialog); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(AlertDialog); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/alert/alert.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Title 8 | Description 9 | 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/alert/alert.test.ts: -------------------------------------------------------------------------------- 1 | import {alertAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Alert from './alert.svelte'; 6 | 7 | describe.skip('Alert', () => { 8 | it.each(getAnatomySelector(alertAnatomy))('should render %s', (selector) => { 9 | render(Alert); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Alert); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/avatar/avatar.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | {name} 15 | 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/breadcrumbs/breadcrumbs.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | Home 9 | / 10 | 11 | 12 | Components 13 | / 14 | 15 | 16 | 17 | Breadcrumbs 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/breadcrumbs/breadcrumbs.test.ts: -------------------------------------------------------------------------------- 1 | import {breadcrumbsAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Breadcrumbs from './breadcrumbs.svelte'; 6 | 7 | describe.skip('Breadcrumbs', () => { 8 | it.each(getAnatomySelector(breadcrumbsAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Breadcrumbs); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Breadcrumbs); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/checkbox/checkbox.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | I accept the terms and conditions 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/checkbox/checkbox.test.ts: -------------------------------------------------------------------------------- 1 | import {checkboxAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Checkbox from './checkbox.svelte'; 6 | 7 | describe.skip('Checkbox', () => { 8 | it.each(getAnatomySelector(checkboxAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Checkbox); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Checkbox); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/clipboard/clipboard.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | Label 9 | 10 | 11 | 12 | 13 | 14 | 15 | {#snippet children(ctx)} 16 | {#if ctx.copied} 17 | Copied 18 | {:else} 19 | Copy 20 | {/if} 21 | {/snippet} 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/clipboard/clipboard.test.ts: -------------------------------------------------------------------------------- 1 | import {clipboardAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Clipboard from './clipboard.svelte'; 6 | 7 | describe.skip('Clipboard', () => { 8 | it.each(getAnatomySelector(clipboardAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Clipboard); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Clipboard); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/collapsible/collapsible.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | Toggle 13 | {content} 14 | 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/collapsible/collapsible.test.ts: -------------------------------------------------------------------------------- 1 | import {collapsibleAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Collapsible from './collapsible.svelte'; 6 | 7 | describe.skip('Collapsible', () => { 8 | it.each(getAnatomySelector(collapsibleAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Collapsible); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Collapsible); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/combobox/combobox.svelte: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/date-picker/date-picker.test.ts: -------------------------------------------------------------------------------- 1 | import {datePickerAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import DatePicker from './date-picker.svelte'; 6 | 7 | describe.skip('DatePicker', () => { 8 | /* flaky. hangs */ 9 | it.skip.each(getAnatomySelector(datePickerAnatomy))( 10 | 'should render %s', 11 | (selector) => { 12 | render(DatePicker); 13 | expect(document.querySelector(selector)).toBeInTheDocument(); 14 | }, 15 | ); 16 | 17 | it('should have no a11y violations', async () => { 18 | const {container} = render(DatePicker); 19 | const results = await axe(container); 20 | expect(results).toHaveNoViolations(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/dialog/dialog.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Trigger 7 | 8 | 9 | 10 | Title 11 | Description 12 | Close 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/dialog/dialog.test.ts: -------------------------------------------------------------------------------- 1 | import {dialogAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Dialog from './dialog.svelte'; 6 | 7 | describe.skip('Dialog', () => { 8 | it.each(getAnatomySelector(dialogAnatomy))('should render %s', (selector) => { 9 | render(Dialog); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Dialog); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/drawer/drawer.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Trigger 7 | 8 | 9 | 10 | 11 | Title 12 | Description 13 | 14 | 15 | 16 | Close 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/drawer/drawer.test.ts: -------------------------------------------------------------------------------- 1 | import {drawerAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Drawer from './drawer.svelte'; 6 | 7 | describe.skip('Drawer', () => { 8 | it.each(getAnatomySelector(drawerAnatomy))('should render %s', (selector) => { 9 | render(Drawer); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Drawer); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/editable/editable.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Label 7 | 8 | 9 | 10 | 11 | 12 | Edit 13 | Cancel 14 | Submit 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/editable/editable.test.ts: -------------------------------------------------------------------------------- 1 | import {editableAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Editable from './editable.svelte'; 6 | 7 | describe.skip('Editable', () => { 8 | it.each(getAnatomySelector(editableAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Editable); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Editable); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/field/field.test.ts: -------------------------------------------------------------------------------- 1 | import {fieldAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Field from './field.svelte'; 6 | 7 | describe.skip('Field', () => { 8 | it.each(getAnatomySelector(fieldAnatomy))('should render %s', (selector) => { 9 | render(Field); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Field); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/file-upload/file-upload.test.ts: -------------------------------------------------------------------------------- 1 | import {fileUploadAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import FileUpload from './file-upload.svelte'; 6 | 7 | describe.skip('FileUpload', () => { 8 | it.each(getAnatomySelector(fileUploadAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(FileUpload); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(FileUpload); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/hover-card/hover-card.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | Trigger 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {content} 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/hover-card/hover-card.test.ts: -------------------------------------------------------------------------------- 1 | import {hoverCardAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import HoverCard from './hover-card.svelte'; 6 | 7 | describe.skip('HoverCard', () => { 8 | it.each(getAnatomySelector(hoverCardAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(HoverCard); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(HoverCard); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/number-input/number-input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Enter Amount 7 | 8 | 9 | 10 | 11 | + 12 | - 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/number-input/number-input.test.ts: -------------------------------------------------------------------------------- 1 | import {numberInputAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import NumberInput from './number-input.svelte'; 6 | 7 | describe.skip('NumberInput', () => { 8 | it.each(getAnatomySelector(numberInputAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(NumberInput); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(NumberInput); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/pagination/pagination.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | {#snippet children(context)} 7 | < 8 | > 9 | 10 | {#each context.pages as page, index} 11 | {#if page.type === 'page'} 12 | 13 | {:else} 14 | ... 15 | {/if} 16 | {/each} 17 | {/snippet} 18 | 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/pagination/pagination.test.ts: -------------------------------------------------------------------------------- 1 | import {paginationAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Pagination from './pagination.svelte'; 6 | 7 | describe.skip('Pagination', () => { 8 | it.each(getAnatomySelector(paginationAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Pagination); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Pagination); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/pin-input/pin-input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Label 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/pin-input/pin-input.test.ts: -------------------------------------------------------------------------------- 1 | import {pinInputAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import PinInput from './pin-input.svelte'; 6 | 7 | describe.skip('PinInput', () => { 8 | it.each(getAnatomySelector(pinInputAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(PinInput); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(PinInput); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/popover/popover.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Trigger 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Title 15 | Description 16 | Close 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/popover/popover.test.ts: -------------------------------------------------------------------------------- 1 | import {popoverAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Popover from './popover.svelte'; 6 | 7 | describe.skip('Popover', () => { 8 | it.each(getAnatomySelector(popoverAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Popover); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Popover); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/progress/progress.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Label 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/progress/progress.test.ts: -------------------------------------------------------------------------------- 1 | import {progressAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Progress from './progress.svelte'; 6 | 7 | describe.skip('Progress', () => { 8 | it.each(getAnatomySelector(progressAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Progress); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Progress); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/qr-code/qr-code.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/qr-code/qr-code.test.ts: -------------------------------------------------------------------------------- 1 | import {qrCodeAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import QrCode from './qr-code.svelte'; 6 | 7 | describe.skip('QrCode', () => { 8 | it.each(getAnatomySelector(qrCodeAnatomy))('should render %s', (selector) => { 9 | render(QrCode); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(QrCode); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/radio-group/radio-group.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | Label 18 | 19 | 20 | {#each items as { value, label }} 21 | 22 | 23 | 24 | {label} 25 | 26 | {/each} 27 | 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/rating-group/rating-group.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | {#snippet children(context)} 7 | Label 8 | 9 | 10 | {#each context.items as index} 11 | 12 | {/each} 13 | 14 | {/snippet} 15 | 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/rating-group/rating-group.test.ts: -------------------------------------------------------------------------------- 1 | import {ratingGroupAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import RatingGroup from './rating-group.svelte'; 6 | 7 | describe.skip('RatingGroup', () => { 8 | it.each(getAnatomySelector(ratingGroupAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(RatingGroup); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(RatingGroup); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/segment-group/segment-group.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | Label 18 | 19 | 20 | {#each items as { value, label }} 21 | 22 | 23 | 24 | {label} 25 | 26 | {/each} 27 | 28 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/select/select.svelte: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/signature-pad/signature-pad.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | {#snippet children(context)} 7 | Label 8 | 9 | 10 | 11 | {#each context.paths as path} 12 | 13 | {:else} 14 | 15 | {/each} 16 | 17 | 18 | 19 | 20 | 21 | Clear 22 | {/snippet} 23 | 24 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/signature-pad/signature-pad.test.ts: -------------------------------------------------------------------------------- 1 | import {signaturePadAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import SignaturePad from './signature-pad.svelte'; 6 | 7 | describe.skip('SignaturePad', () => { 8 | it.each(getAnatomySelector(signaturePadAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(SignaturePad); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(SignaturePad); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/slider/slider.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Label 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 25 21 | 50 22 | 75 23 | 24 | 25 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/slider/slider.test.ts: -------------------------------------------------------------------------------- 1 | import {sliderAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Slider from './slider.svelte'; 6 | 7 | describe.skip('Slider', () => { 8 | it.each(getAnatomySelector(sliderAnatomy))('should render %s', (selector) => { 9 | render(Slider); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Slider); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/splitter/splitter.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | A 12 | 13 | B 14 | 15 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/splitter/splitter.test.ts: -------------------------------------------------------------------------------- 1 | import {splitterAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Splitter from './splitter.svelte'; 6 | 7 | describe.skip('Splitter', () => { 8 | it.each(getAnatomySelector(splitterAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Splitter); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Splitter); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/switch/switch.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Label 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/switch/switch.test.ts: -------------------------------------------------------------------------------- 1 | import {switchAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Switch from './switch.svelte'; 6 | 7 | describe.skip('Switch', () => { 8 | it.each(getAnatomySelector(switchAnatomy))('should render %s', (selector) => { 9 | render(Switch); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Switch); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tabs/tabs.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | {#each items as { value, label }} 22 | 23 | {label} 24 | 25 | {/each} 26 | 27 | 28 | {#each items as { value, content }} 29 | {content} 30 | {/each} 31 | 32 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tags-input/tags-input.test.ts: -------------------------------------------------------------------------------- 1 | import {tagsInputAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import TagsInput from './tags-input.svelte'; 6 | 7 | describe.skip('TagsInput', () => { 8 | it.each(getAnatomySelector(tagsInputAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(TagsInput); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(TagsInput); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/time-picker/time-picker.test.ts: -------------------------------------------------------------------------------- 1 | import {timePickerAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import TimePicker from './time-picker.svelte'; 6 | 7 | describe.skip('TimePicker', () => { 8 | it.each(getAnatomySelector(timePickerAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(TimePicker); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(TimePicker); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/timer/timer.test.ts: -------------------------------------------------------------------------------- 1 | import {timerAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Timer from './timer.svelte'; 6 | 7 | describe.skip('Timer', () => { 8 | it.each(getAnatomySelector(timerAnatomy))('should render %s', (selector) => { 9 | render(Timer); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Timer); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toast/toast.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 20 | 21 | 22 | 23 | Close 24 | Action 25 | 26 | 27 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toast/toast.test.ts: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/svelte'; 2 | import {userEvent} from '@testing-library/user-event'; 3 | import {axe} from 'vitest-axe'; 4 | import Toast from './toast.svelte'; 5 | 6 | describe.skip('Toast', () => { 7 | it('should have no a11y violations', async () => { 8 | const {container, getByRole} = render(Toast); 9 | 10 | const user = userEvent.setup(); 11 | const trigger = getByRole('button', {name: 'Create toast'}); 12 | 13 | await user.click(trigger); 14 | 15 | const results = await axe(container); 16 | 17 | expect(results).toHaveNoViolations(); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toggle-group/toggle-group.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 1 7 | 2 8 | 3 9 | 10 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toggle-group/toggle-group.test.ts: -------------------------------------------------------------------------------- 1 | import {toggleGroupAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import ToggleGroup from './toggle-group.svelte'; 6 | 7 | describe.skip('ToggleGroup', () => { 8 | it.each(getAnatomySelector(toggleGroupAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(ToggleGroup); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(ToggleGroup); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toggle/toggle.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | Toggle 6 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/toggle/toggle.test.ts: -------------------------------------------------------------------------------- 1 | import {toggleAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Toggle from './toggle.svelte'; 6 | 7 | describe.skip('Toggle', () => { 8 | it.each(getAnatomySelector(toggleAnatomy))('should render %s', (selector) => { 9 | render(Toggle); 10 | expect(document.querySelector(selector)).toBeInTheDocument(); 11 | }); 12 | 13 | it('should have no a11y violations', async () => { 14 | const {container} = render(Toggle); 15 | const results = await axe(container); 16 | expect(results).toHaveNoViolations(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tooltip/tooltip.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Trigger 7 | 8 | 9 | 10 | 11 | 12 | Content 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tooltip/tooltip.test.ts: -------------------------------------------------------------------------------- 1 | import {tooltipAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import Tooltip from './tooltip.svelte'; 6 | 7 | describe.skip('Tooltip', () => { 8 | it.each(getAnatomySelector(tooltipAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(Tooltip); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(Tooltip); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tree-view/tree-view.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/tree-view/tree-view.test.ts: -------------------------------------------------------------------------------- 1 | import {treeViewAnatomy} from '$lib/index.js'; 2 | import {render} from '@testing-library/svelte'; 3 | import {axe} from 'vitest-axe'; 4 | import {getAnatomySelector} from '../utils.js'; 5 | import TreeView from './tree-view.svelte'; 6 | 7 | describe.skip('TreeView', () => { 8 | it.each(getAnatomySelector(treeViewAnatomy))( 9 | 'should render %s', 10 | (selector) => { 11 | render(TreeView); 12 | expect(document.querySelector(selector)).toBeInTheDocument(); 13 | }, 14 | ); 15 | 16 | it('should have no a11y violations', async () => { 17 | const {container} = render(TreeView); 18 | const results = await axe(container); 19 | expect(results).toHaveNoViolations(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/ui-ingredients/src/tests/utils.ts: -------------------------------------------------------------------------------- 1 | import type {AnatomyInstance} from '@zag-js/anatomy'; 2 | 3 | export function getAnatomySelector>( 4 | anatomy: T, 5 | ) { 6 | const parts = anatomy.build(); 7 | 8 | return Object.values(parts).map((part) => { 9 | return '[data-scope="$1"][data-part="$2"]' 10 | .replace('$1', part.attrs['data-scope']) 11 | .replace('$2', part.attrs['data-part']); 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /packages/ui-ingredients/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/calvo-jp/ui-ingredients/a49d45bdaecd08f9e5752b26cc663fa92663b6b7/packages/ui-ingredients/static/favicon.png -------------------------------------------------------------------------------- /packages/ui-ingredients/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-vercel'; 2 | import {vitePreprocess} from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | preprocess: vitePreprocess(), 7 | kit: { 8 | adapter: adapter(), 9 | }, 10 | compilerOptions: { 11 | runes: true, 12 | }, 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /packages/ui-ingredients/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["vitest/globals"], 5 | "allowJs": true, 6 | "checkJs": true, 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "resolveJsonModule": true, 10 | "skipLibCheck": true, 11 | "sourceMap": true, 12 | "strict": true, 13 | "module": "NodeNext", 14 | "moduleResolution": "NodeNext" 15 | }, 16 | "include": ["src", "vitest.d.ts", "vitest.setup.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /packages/ui-ingredients/vite.config.ts: -------------------------------------------------------------------------------- 1 | import {sveltekit} from '@sveltejs/kit/vite'; 2 | import {svelteTesting} from '@testing-library/svelte/vite'; 3 | import {defineConfig} from 'vitest/config'; 4 | 5 | export default defineConfig({ 6 | plugins: [sveltekit(), svelteTesting()], 7 | test: { 8 | watch: false, 9 | globals: true, 10 | include: ['src/**/*.{test,spec}.{js,ts}'], 11 | environment: 'jsdom', 12 | setupFiles: ['vitest.setup.ts'], 13 | passWithNoTests: true, 14 | }, 15 | server: { 16 | port: 5000, 17 | }, 18 | }); 19 | -------------------------------------------------------------------------------- /packages/ui-ingredients/vitest.d.ts: -------------------------------------------------------------------------------- 1 | import 'vitest'; 2 | 3 | import type {TestingLibraryMatchers} from '@testing-library/jest-dom/matchers'; 4 | import type {AxeMatchers} from 'vitest-axe/matchers'; 5 | 6 | declare module 'vitest' { 7 | interface Assertion extends TestingLibraryMatchers, AxeMatchers {} 8 | 9 | interface AsymmetricMatchersContaining 10 | extends TestingLibraryMatchers, 11 | AxeMatchers {} 12 | } 13 | -------------------------------------------------------------------------------- /packages/ui-ingredients/vitest.setup.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/vitest'; 2 | import 'vitest-axe/extend-expect'; 3 | import 'vitest-canvas-mock'; 4 | 5 | import {faker} from '@faker-js/faker'; 6 | import {cleanup} from '@testing-library/svelte'; 7 | import {JSDOM} from 'jsdom'; 8 | import ResizeObserver from 'resize-observer-polyfill'; 9 | import {vi} from 'vitest'; 10 | 11 | const {window} = new JSDOM(); 12 | 13 | vi.stubGlobal('ResizeObserver', ResizeObserver); 14 | window['ResizeObserver'] = ResizeObserver; 15 | window.URL.createObjectURL = () => faker.image.avatar(); 16 | 17 | Object.assign(global, { 18 | window, 19 | document: window.document, 20 | }); 21 | 22 | afterEach(cleanup); 23 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | - scripts 4 | - website 5 | ignoredBuiltDependencies: 6 | - '@tailwindcss/oxide' 7 | -------------------------------------------------------------------------------- /scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui-ingredients-scripts", 3 | "type": "module", 4 | "private": true, 5 | "scripts": { 6 | "generate:anatomy-icons": "tsx src/generate-anatomy-icons.ts" 7 | }, 8 | "dependencies": { 9 | "@clack/prompts": "^0.10.1", 10 | "@tsconfig/node22": "^22.0.1", 11 | "@types/react": "^19.1.4", 12 | "@types/react-dom": "^19.1.5", 13 | "@zag-js/anatomy-icons": "^1.12.3", 14 | "prettier": "^3.5.3", 15 | "react": "^19.1.0", 16 | "react-dom": "^19.1.0", 17 | "svgson": "^5.3.1", 18 | "tsx": "^4.19.4", 19 | "typescript": "^5.8.3" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /scripts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node22/tsconfig.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "verbatimModuleSyntax": true 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /website/src/app.d.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | namespace App { 3 | interface TocEntry { 4 | url: string; 5 | title: string; 6 | items: TocEntry[]; 7 | } 8 | 9 | interface PageData { 10 | toc: TocEntry[]; 11 | } 12 | } 13 | } 14 | 15 | export {}; 16 | -------------------------------------------------------------------------------- /website/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | %sveltekit.head% 10 | 11 | 12 | 16 |
%sveltekit.body%
17 | 18 | 19 | -------------------------------------------------------------------------------- /website/src/content/components/alert.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: alert 3 | title: Alert 4 | description: A component for displaying important messages or notifications. 5 | --- 6 | 7 | 8 | 9 | ## Usage 10 | 11 | ```svelte 12 | 16 | 17 | 18 | 19 | 20 | 21 | Title 22 | Description 23 | 24 | ``` 25 | 26 | ## API Reference 27 | 28 | 29 | -------------------------------------------------------------------------------- /website/src/content/components/avatar.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: avatar 3 | title: Avatar 4 | description: A visual component for displaying a user’s profile image or initials. 5 | --- 6 | 7 | 8 | 9 | ## Anatomy 10 | 11 | 12 | 13 | ## Usage 14 | 15 | ```svelte 16 | 19 | 20 | 21 | 22 | JD 23 | 24 | ``` 25 | 26 | ## API Reference 27 | 28 | 29 | -------------------------------------------------------------------------------- /website/src/content/components/collapsible.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: collapsible 3 | title: Collapsible 4 | description: A component that expands or collapses to show or hide content. 5 | --- 6 | 7 | 8 | 9 | ## Usage 10 | 11 | ```svelte 12 | 15 | 16 | 17 | Toggle 18 | Content 19 | 20 | ``` 21 | 22 | ## API Reference 23 | 24 | 25 | 26 | ## Accessibility 27 | 28 | ### Keyboard Support 29 | 30 | 31 | -------------------------------------------------------------------------------- /website/src/content/components/progress-circular.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: progress-circular 3 | title: Progress - Circular 4 | description: A component for displaying the completion status of a task or process. 5 | --- 6 | 7 | 8 | 9 | ## Anatomy 10 | 11 | 12 | 13 | ## Usage 14 | 15 | ```svelte 16 | 19 | 20 | 21 | Label 22 | 23 | 24 | 25 | 26 | 27 | ``` 28 | 29 | ## API Reference 30 | 31 | 32 | -------------------------------------------------------------------------------- /website/src/content/components/progress-linear.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: progress-linear 3 | title: Progress - Linear 4 | description: A component for displaying the completion status of a task or process. 5 | --- 6 | 7 | 8 | 9 | ## Anatomy 10 | 11 | 12 | 13 | ## Usage 14 | 15 | ```svelte 16 | 19 | 20 | 21 | Label 22 | 23 | 24 | 25 | 26 | 27 | ``` 28 | 29 | ## API Reference 30 | 31 | 32 | -------------------------------------------------------------------------------- /website/src/content/components/qr-code.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: qr-code 3 | title: Qr Code 4 | description: A component for generating and displaying QR codes for quick scanning and access to information. 5 | --- 6 | 7 | 8 | 9 | ## Anatomy 10 | 11 | 12 | 13 | ## Usage 14 | 15 | ```svelte 16 | 19 | 20 | 21 | 22 | 23 | 24 | Download 25 | 26 | ``` 27 | 28 | ## API Reference 29 | 30 | 31 | -------------------------------------------------------------------------------- /website/src/content/components/toggle.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: toggle 3 | title: Toggle 4 | description: A component for switching between two states, suchjson as on/off. 5 | --- 6 | 7 | 8 | 9 | ```svelte 10 | 16 | 17 | { 20 | pressed = detail.pressed; 21 | }} 22 | > 23 | {#if pressed} 24 | 25 | {:else} 26 | 27 | {/if} 28 | 29 | ``` 30 | 31 | ## API Reference 32 | 33 | 34 | -------------------------------------------------------------------------------- /website/src/content/utilities/environment-provider.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: environment-provider 3 | title: Environment Provider 4 | description: A component for providing environment information to the rest of the application. 5 | --- 6 | 7 | ## Usage 8 | 9 | ```svelte 10 | 11 | 16 | 17 | document}> 18 | {@render children()} 19 | 20 | ``` 21 | 22 | ## API Reference 23 | 24 | 25 | -------------------------------------------------------------------------------- /website/src/content/utilities/highlight.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: highlight 3 | title: Highlight 4 | description: A component for highlighting text within a string. 5 | --- 6 | 7 | 8 | 9 | ## Usage 10 | 11 | ```svelte 12 | 18 | 19 | 20 | ``` 21 | 22 | ## API Reference 23 | 24 | 25 | -------------------------------------------------------------------------------- /website/src/content/utilities/locale-provider.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: locale-provider 3 | title: Locale Provider 4 | description: A component for providing locale information to the rest of the application. 5 | --- 6 | 7 | ## Usage 8 | 9 | ```svelte 10 | 11 | 16 | 17 | 18 | {@render children()} 19 | 20 | ``` 21 | 22 | ## API Reference 23 | 24 | 25 | -------------------------------------------------------------------------------- /website/src/content/utilities/presence.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: presence 3 | title: Presence 4 | description: A component that controls content rendering and unmounting based on state. 5 | --- 6 | 7 | 8 | 9 | ## Usage 10 | 11 | ```svelte 12 | 17 | 18 | 25 | 26 | Content 27 | ``` 28 | 29 | ## API Reference 30 | 31 | 32 | -------------------------------------------------------------------------------- /website/src/lib/components/api/environment-provider.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry<'Root'>({ 4 | Root: { 5 | context: { 6 | rootNode: { 7 | type: 'ShadowRoot | Document | Node | (() => ShadowRoot | Document | Node)', 8 | description: '', 9 | }, 10 | }, 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /website/src/lib/components/api/floating-panel.ts: -------------------------------------------------------------------------------- 1 | import {floatingPanelAnatomy} from 'ui-ingredients'; 2 | import {apiEntryFromAnatomy} from './utils'; 3 | 4 | export default apiEntryFromAnatomy(floatingPanelAnatomy)({}); 5 | -------------------------------------------------------------------------------- /website/src/lib/components/api/focus-trap.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry({ 4 | Root: { 5 | context: { 6 | disabled: { 7 | type: 'boolean', 8 | description: 'Whether the focus trap is disabled', 9 | }, 10 | returnFocusOnDeactivate: { 11 | type: 'boolean', 12 | description: 13 | 'Whether the focus trap should return focus to the previously focused element when deactivated', 14 | }, 15 | }, 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /website/src/lib/components/api/highlight.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry<'Root'>({ 4 | Root: { 5 | context: { 6 | query: { 7 | type: 'string | string[]', 8 | description: 'The query to highlight in the text', 9 | }, 10 | text: { 11 | type: 'string', 12 | description: 'The text to highlight', 13 | }, 14 | ignoreCase: { 15 | type: 'boolean', 16 | description: 'Whether to ignore case while matching', 17 | }, 18 | matchAll: { 19 | type: 'boolean', 20 | description: 'Whether to match multiple instances of the query', 21 | }, 22 | }, 23 | }, 24 | }); 25 | -------------------------------------------------------------------------------- /website/src/lib/components/api/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './api.svelte'; 2 | -------------------------------------------------------------------------------- /website/src/lib/components/api/locale-provider.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry<'Root'>({ 4 | Root: { 5 | context: { 6 | locale: { 7 | type: 'string', 8 | description: 'The locale to use for the application.', 9 | defaultValue: "'en-US'", 10 | }, 11 | }, 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /website/src/lib/components/api/portal.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry<'Root'>({ 4 | Root: { 5 | context: { 6 | container: { 7 | type: 'HTMLElement', 8 | description: 'The element to render the element into', 9 | }, 10 | disabled: { 11 | type: 'boolean', 12 | description: 'Whether the portal is disabled', 13 | }, 14 | }, 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /website/src/lib/components/api/presence.ts: -------------------------------------------------------------------------------- 1 | import {apiEntry} from './utils'; 2 | 3 | export default apiEntry<'Root'>({ 4 | Root: { 5 | context: { 6 | present: { 7 | type: 'string', 8 | description: 'Whether the element is present', 9 | }, 10 | lazyMount: { 11 | type: 'boolean', 12 | description: 'Whether to enable lazy mounting.', 13 | }, 14 | keepMounted: { 15 | type: 'boolean', 16 | description: 'Whether to keep the component mounted after exit.', 17 | }, 18 | asChild: { 19 | type: 'Snippet', 20 | description: 'Render a different element.', 21 | }, 22 | }, 23 | dataAttr: { 24 | 'data-state': '"open" | "closed"', 25 | }, 26 | }, 27 | }); 28 | -------------------------------------------------------------------------------- /website/src/lib/components/api/time-picker.ts: -------------------------------------------------------------------------------- 1 | import {timePickerAnatomy} from 'ui-ingredients'; 2 | import {apiEntryFromAnatomy} from './utils'; 3 | 4 | export default apiEntryFromAnatomy(timePickerAnatomy)({}); 5 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/alert.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 11 | 12 |
13 | Title 14 | 17 | Description 18 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/field.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | {#snippet asChild(attrs)} 10 | 14 | {/snippet} 15 | 16 | 17 | {#snippet asChild(attrs)} 18 | 19 | {/snippet} 20 | 21 | 24 | This is a helper text 25 | 26 | 27 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './demo.svelte'; 2 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/pin-input.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | {#snippet asChild(attrs)} 10 | 11 | {/snippet} 12 | 13 | 14 | 15 | 16 | 17 | {#each Array.from({length: 4}) as _, i} 18 | 19 | {#snippet asChild(attrs)} 20 | 21 | {/snippet} 22 | 23 | {/each} 24 | 25 | 26 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/qr-code.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/switch.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/demo/toggle.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | {#snippet asChild(attrs, api)} 9 | 10 | {#if api.pressed} 11 | 12 | {:else} 13 | 14 | {/if} 15 | 16 | {/snippet} 17 | 18 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/badge.recipe.ts: -------------------------------------------------------------------------------- 1 | import {tv, type VariantProps} from 'tailwind-variants'; 2 | 3 | export const badgeRecipe = tv({ 4 | base: 'inline-block rounded-full', 5 | variants: { 6 | variant: { 7 | outline: 'font-semibold border', 8 | }, 9 | colorScheme: { 10 | primary: 11 | 'border-neutral-200 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-800/50', 12 | warning: 13 | 'border-amber-200 text-amber-700 dark:text-amber-400 bg-amber-50 dark:border-amber-800 dark:bg-amber-800/50', 14 | }, 15 | size: { 16 | md: 'px-1.5 py-px text-xs', 17 | }, 18 | }, 19 | defaultVariants: { 20 | variant: 'outline', 21 | colorScheme: 'primary', 22 | size: 'md', 23 | }, 24 | }); 25 | 26 | export type BadgeRecipeProps = VariantProps; 27 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/badge.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | {@render children?.()} 19 | 20 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/button.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/icon-button.recipe.ts: -------------------------------------------------------------------------------- 1 | import {tv, type VariantProps} from 'tailwind-variants'; 2 | 3 | export const iconButtonRecipe = tv({ 4 | base: 'size-12 cursor-pointer shrink-0 flex items-center justify-center gap-2 rounded font-semibold transition-colors duration-150 disabled:cursor-not-allowed disabled:opacity-50', 5 | variants: { 6 | variant: { 7 | outline: 8 | 'border border-neutral-200 bg-white dark:bg-transparent dark:border-neutral-700 ui-pressed:bg-neutral-100/75 ui-on:bg-neutral-100/75 dark:ui-pressed:bg-neutral-700/25 dark:ui-on:bg-neutral-700/25', 9 | solid: 'bg-neutral-300', 10 | }, 11 | }, 12 | defaultVariants: { 13 | variant: 'outline', 14 | }, 15 | }); 16 | 17 | export type IconButtonRecipeProps = VariantProps; 18 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/icon-button.svelte: -------------------------------------------------------------------------------- 1 | 21 | 22 | 29 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/input.recipe.ts: -------------------------------------------------------------------------------- 1 | import {tv, type VariantProps} from 'tailwind-variants'; 2 | 3 | export const inputRecipe = tv({ 4 | base: 'block w-full rounded placeholder:text-neutral-500', 5 | variants: { 6 | size: { 7 | xs: 'px-3 h-10', 8 | sm: 'px-3.5 h-11', 9 | md: 'px-4 h-12', 10 | }, 11 | variant: { 12 | outline: 13 | 'border border-neutral-200 bg-white dark:bg-transparent ui-invalid:focus:outline-red-400 ui-invalid:border-red-400 ui-invalid:focus:outline ui-invalid:focus:outline-1 dark:ui-invalid:border-red-400 dark:border-neutral-700', 14 | }, 15 | }, 16 | defaultVariants: { 17 | size: 'md', 18 | variant: 'outline', 19 | }, 20 | }); 21 | 22 | export type InputRecipeProps = VariantProps; 23 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/input.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/label.recipe.ts: -------------------------------------------------------------------------------- 1 | import {tv, type VariantProps} from 'tailwind-variants'; 2 | 3 | export const labelRecipe = tv({ 4 | base: 'mb-1 block text-sm font-semibold', 5 | }); 6 | 7 | export type LabelRecipeProps = VariantProps; 8 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/label.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/index.ts: -------------------------------------------------------------------------------- 1 | import * as Table from './table'; 2 | export default Table; 3 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-anatomy.ts: -------------------------------------------------------------------------------- 1 | import {createAnatomy} from 'ui-ingredients'; 2 | 3 | export const anatomy = createAnatomy('Table').parts( 4 | 'root', 5 | 'header', 6 | 'body', 7 | 'footer', 8 | 'row', 9 | 'cell', 10 | 'heading', 11 | ); 12 | 13 | export const parts = anatomy.build(); 14 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-body.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-cell.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-container.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
16 | {@render children?.()} 17 |
18 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-context.svelte.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from 'ui-ingredients'; 2 | import type {CreateTableReturn} from './create-table.svelte'; 3 | 4 | export const [getTableContext, setTableContext] = 5 | createContext('Table'); 6 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-footer.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-header.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-heading.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-root.svelte: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | {@render children?.()} 22 |
23 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table-row.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | {@render children?.()} 14 | 15 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/table/table.ts: -------------------------------------------------------------------------------- 1 | export {default as Body} from './table-body.svelte'; 2 | export {default as Cell} from './table-cell.svelte'; 3 | export {default as Container} from './table-container.svelte'; 4 | export {default as Footer} from './table-footer.svelte'; 5 | export {default as Header} from './table-header.svelte'; 6 | export {default as Heading} from './table-heading.svelte'; 7 | export {default as Root} from './table-root.svelte'; 8 | export {default as Row} from './table-row.svelte'; 9 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/textarea.recipe.ts: -------------------------------------------------------------------------------- 1 | import {tv, type VariantProps} from 'tailwind-variants'; 2 | import {inputRecipe} from './input.recipe'; 3 | 4 | export const textareaRecipe = tv({ 5 | base: 'resize-none', 6 | variants: { 7 | size: { 8 | xs: 'h-auto px-2.5 py-1.5', 9 | sm: 'h-auto px-3 py-2', 10 | md: 'h-auto px-4 py-2.5', 11 | }, 12 | }, 13 | extend: inputRecipe, 14 | }); 15 | 16 | export type TextareaRecipeProps = VariantProps; 17 | -------------------------------------------------------------------------------- /website/src/lib/components/ui/textarea.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 | 17 | -------------------------------------------------------------------------------- /website/src/lib/icons/anatomy/time-picker-anatomy-icon.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /website/src/lib/stores/navbar.svelte.ts: -------------------------------------------------------------------------------- 1 | function createNavbarStore() { 2 | let isDrawerOpen = $state(false); 3 | 4 | return { 5 | drawer: { 6 | get isOpen() { 7 | return isDrawerOpen; 8 | }, 9 | open() { 10 | isDrawerOpen = true; 11 | }, 12 | close() { 13 | isDrawerOpen = false; 14 | }, 15 | toggle() { 16 | isDrawerOpen = !isDrawerOpen; 17 | }, 18 | }, 19 | }; 20 | } 21 | 22 | export const navbarStore = createNavbarStore(); 23 | -------------------------------------------------------------------------------- /website/src/lib/types/index.ts: -------------------------------------------------------------------------------- 1 | export type Assign< 2 | Target extends Record, 3 | Source extends Record, 4 | > = Source & Omit; 5 | -------------------------------------------------------------------------------- /website/src/routes/+page.server.ts: -------------------------------------------------------------------------------- 1 | import {redirect} from '@sveltejs/kit'; 2 | import type {PageServerLoad} from './$types'; 3 | 4 | export const load: PageServerLoad = async () => { 5 | return redirect(302, '/overview/introduction'); 6 | }; 7 | -------------------------------------------------------------------------------- /website/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /website/src/routes/components/[id]/+page.server.ts: -------------------------------------------------------------------------------- 1 | import {components} from '.velite'; 2 | import {error} from '@sveltejs/kit'; 3 | import type {EntryGenerator, PageServerLoad} from './$types'; 4 | 5 | export const prerender = true; 6 | 7 | export const entries: EntryGenerator = () => { 8 | return components.map(({id}) => { 9 | return {id}; 10 | }); 11 | }; 12 | 13 | export const load: PageServerLoad = async ({params}) => { 14 | const data = components.find(({id}) => params.id === id); 15 | if (!data) error(404); 16 | return data; 17 | }; 18 | -------------------------------------------------------------------------------- /website/src/routes/components/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | {data.title} | UI Ingredients 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {#key data.id} 19 | 20 | {/key} 21 | -------------------------------------------------------------------------------- /website/src/routes/overview/[id]/+page.server.ts: -------------------------------------------------------------------------------- 1 | import {overview} from '.velite'; 2 | import {error} from '@sveltejs/kit'; 3 | import type {EntryGenerator, PageServerLoad} from './$types'; 4 | 5 | export const prerender = true; 6 | 7 | export const entries: EntryGenerator = () => { 8 | return overview.map(({id}) => { 9 | return {id}; 10 | }); 11 | }; 12 | 13 | export const load: PageServerLoad = async ({params}) => { 14 | const data = overview.find(({id}) => id === params.id); 15 | if (!data) error(404); 16 | return data; 17 | }; 18 | -------------------------------------------------------------------------------- /website/src/routes/overview/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | {data.title} | UI Ingredients 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {@html data.content} 17 | -------------------------------------------------------------------------------- /website/src/routes/robots.txt/+server.ts: -------------------------------------------------------------------------------- 1 | import type {RequestHandler} from '@sveltejs/kit'; 2 | 3 | const content = ` 4 | User-agent: * 5 | Allow: / 6 | ` 7 | .split('\n') 8 | .map((s) => s.trim()) 9 | .filter(Boolean) 10 | .join('\n'); 11 | 12 | export const GET: RequestHandler = () => { 13 | return new Response(content, { 14 | headers: { 15 | 'Content-Type': 'text/plain', 16 | }, 17 | }); 18 | }; 19 | -------------------------------------------------------------------------------- /website/src/routes/sitemap.xml/+server.ts: -------------------------------------------------------------------------------- 1 | import {components, overview, utilities} from '.velite'; 2 | import type {RequestHandler} from '@sveltejs/kit'; 3 | 4 | export const prerender = true; 5 | 6 | export const GET: RequestHandler = async ({url: {origin}}) => { 7 | const urls = [ 8 | ...components.map((item) => item.permalink), 9 | ...utilities.map((item) => item.permalink), 10 | ...overview.map((item) => item.permalink), 11 | ].map((path) => `${origin}${path}`); 12 | 13 | const content = ` 14 | 15 | ${urls.map((url) => `${url}`).join('')} 16 | `; 17 | 18 | return new Response(content, { 19 | headers: { 20 | 'Content-Type': 'application/xml', 21 | }, 22 | }); 23 | }; 24 | -------------------------------------------------------------------------------- /website/src/routes/utilities/[id]/+page.server.ts: -------------------------------------------------------------------------------- 1 | import {utilities} from '.velite'; 2 | import {error} from '@sveltejs/kit'; 3 | import type {EntryGenerator, PageServerLoad} from './$types'; 4 | 5 | export const prerender = true; 6 | 7 | export const entries: EntryGenerator = () => { 8 | return utilities.map(({id}) => { 9 | return {id}; 10 | }); 11 | }; 12 | 13 | export const load: PageServerLoad = async ({params}) => { 14 | const data = utilities.find(({id}) => params.id === id); 15 | if (!data) error(404); 16 | return data; 17 | }; 18 | -------------------------------------------------------------------------------- /website/src/routes/utilities/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | {data.title} | UI Ingredients 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {#key data.id} 19 | 20 | {/key} 21 | -------------------------------------------------------------------------------- /website/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/calvo-jp/ui-ingredients/a49d45bdaecd08f9e5752b26cc663fa92663b6b7/website/static/favicon.png -------------------------------------------------------------------------------- /website/svelte.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import adapter from '@sveltejs/adapter-vercel'; 3 | import {vitePreprocess} from '@sveltejs/vite-plugin-svelte'; 4 | 5 | /** @type {import('@sveltejs/kit').Config} */ 6 | const config = { 7 | preprocess: [vitePreprocess()], 8 | kit: { 9 | adapter: adapter({ 10 | runtime: 'nodejs22.x', 11 | }), 12 | alias: { 13 | '.velite': 'src/.velite', 14 | }, 15 | }, 16 | compilerOptions: { 17 | runes: true, 18 | css: 'injected', 19 | }, 20 | }; 21 | 22 | export default config; 23 | -------------------------------------------------------------------------------- /website/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "bundler" 13 | }, 14 | "include": ["src", "vite-env.d.ts", "ts-reset.d.ts", "velite.config.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /website/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import tailwindcss from '@tailwindcss/vite'; 3 | import { defineConfig } from 'vite'; 4 | 5 | export default defineConfig({ 6 | plugins: [sveltekit(), tailwindcss()], 7 | server: { 8 | port: 3000, 9 | }, 10 | }); 11 | --------------------------------------------------------------------------------