snice 4.27.0 → 4.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/react/action-bar.d.ts +30 -0
- package/adapters/react/action-bar.d.ts.map +1 -0
- package/adapters/react/action-bar.js +24 -0
- package/adapters/react/action-bar.js.map +1 -0
- package/adapters/react/action-bar.tsx +38 -0
- package/adapters/react/binpack.d.ts +35 -0
- package/adapters/react/binpack.d.ts.map +1 -0
- package/adapters/react/binpack.js +24 -0
- package/adapters/react/binpack.js.map +1 -0
- package/adapters/react/binpack.tsx +43 -0
- package/adapters/react/components.d.ts +4 -0
- package/adapters/react/components.d.ts.map +1 -1
- package/adapters/react/components.js +2 -0
- package/adapters/react/components.js.map +1 -1
- package/adapters/react/components.ts +4 -0
- package/adapters/react/useRequestHandler.d.ts +56 -0
- package/adapters/react/useRequestHandler.js +103 -0
- package/adapters/react/useRequestHandler.js.map +1 -0
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/accordion/snice-accordion.min.js +1 -1
- package/dist/cdn/action-bar/README.md +27 -0
- package/dist/cdn/action-bar/snice-action-bar.js +249 -0
- package/dist/cdn/action-bar/snice-action-bar.js.map +1 -0
- package/dist/cdn/action-bar/snice-action-bar.min.js +12 -0
- package/dist/cdn/action-bar/snice-action-bar.min.js.map +1 -0
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/alert/snice-alert.min.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/availability/snice-availability.min.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar/snice-avatar.min.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
- package/dist/cdn/badge/snice-badge.js +2 -2
- package/dist/cdn/badge/snice-badge.js.map +1 -1
- package/dist/cdn/badge/snice-badge.min.js +2 -2
- package/dist/cdn/badge/snice-badge.min.js.map +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/banner/snice-banner.min.js +1 -1
- package/dist/cdn/binpack/README.md +27 -0
- package/dist/cdn/binpack/snice-binpack.js +1037 -0
- package/dist/cdn/binpack/snice-binpack.js.map +1 -0
- package/dist/cdn/binpack/snice-binpack.min.js +13 -0
- package/dist/cdn/binpack/snice-binpack.min.js.map +1 -0
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/book/snice-book.min.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/booking/snice-booking.min.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
- package/dist/cdn/button/README.md +1 -1
- package/dist/cdn/button/snice-button.js +11 -10
- package/dist/cdn/button/snice-button.js.map +1 -1
- package/dist/cdn/button/snice-button.min.js +3 -3
- package/dist/cdn/button/snice-button.min.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera/snice-camera.min.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/card/snice-card.min.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/carousel/snice-carousel.min.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/cart/snice-cart.min.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/chip/snice-chip.min.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-display/snice-color-display.min.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/comments/snice-comments.min.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/countdown/snice-countdown.min.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/cropper/snice-cropper.min.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/data-card/snice-data-card.min.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/diff/snice-diff.min.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/divider/snice-divider.min.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/doc/snice-doc.min.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/draw/snice-draw.min.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/drawer/snice-drawer.min.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/estimate/snice-estimate.min.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/flow/snice-flow.min.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/funnel/snice-funnel.min.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gantt/snice-gantt.min.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/gauge/snice-gauge.min.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/image/snice-image.min.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/input/snice-input.min.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/invoice/snice-invoice.min.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/kanban/snice-kanban.min.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/key-value/snice-key-value.min.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/kpi/snice-kpi.min.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/layout/snice-layout.min.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link/snice-link.min.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/list/snice-list.min.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/location/snice-location.min.js +1 -1
- package/dist/cdn/login/README.md +2 -2
- package/dist/cdn/login/snice-login.js +11 -10
- package/dist/cdn/login/snice-login.js.map +1 -1
- package/dist/cdn/login/snice-login.min.js +5 -5
- package/dist/cdn/login/snice-login.min.js.map +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/map/snice-map.min.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/markdown/snice-markdown.min.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/masonry/snice-masonry.min.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/menu/snice-menu.min.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.min.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/modal/snice-modal.min.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/music-player/snice-music-player.min.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/nav/snice-nav.min.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/pagination/snice-pagination.min.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/paint/snice-paint.min.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/product-card/snice-product-card.min.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress/snice-progress.min.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/radio/snice-radio.min.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/rating/snice-rating.min.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/recipe/snice-recipe.min.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +152 -62
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +152 -61
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +8 -8
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/sankey/snice-sankey.min.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/select/snice-select.min.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/slider/snice-slider.min.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sortable/snice-sortable.min.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/spinner/snice-spinner.min.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-button/snice-split-button.min.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/step-input/snice-step-input.min.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/stepper/snice-stepper.min.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/switch/snice-switch.min.js +1 -1
- package/dist/cdn/table/README.md +1 -1
- package/dist/cdn/table/snice-table.js +11 -10
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +73 -73
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag/snice-tag.min.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/terminal/snice-terminal.min.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/textarea/snice-textarea.min.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.min.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timeline/snice-timeline.min.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/timer/snice-timer.min.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/toast/snice-toast.min.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/tree/snice-tree.min.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/treemap/snice-treemap.min.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/user-card/snice-user-card.min.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/video-player/snice-video-player.min.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/weather/snice-weather.min.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/cdn/work-order/snice-work-order.min.js +1 -1
- package/dist/components/action-bar/snice-action-bar.d.ts +22 -0
- package/dist/components/action-bar/snice-action-bar.js +182 -0
- package/dist/components/action-bar/snice-action-bar.js.map +1 -0
- package/dist/components/action-bar/snice-action-bar.types.d.ts +17 -0
- package/dist/components/badge/snice-badge.js +1 -1
- package/dist/components/badge/snice-badge.js.map +1 -1
- package/dist/components/binpack/snice-binpack.d.ts +82 -0
- package/dist/components/binpack/snice-binpack.js +970 -0
- package/dist/components/binpack/snice-binpack.js.map +1 -0
- package/dist/components/binpack/snice-binpack.types.d.ts +52 -0
- package/dist/components/button/snice-button.d.ts +2 -2
- package/dist/components/button/snice-button.js +11 -10
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/create-request-handler.d.ts +42 -0
- package/dist/index.cjs +149 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +149 -59
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +149 -58
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +9 -7
- package/dist/react/useRequestHandler.d.ts +56 -0
- package/dist/react/useRequestHandler.js +103 -0
- package/dist/react/useRequestHandler.js.map +1 -0
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/DEVELOPMENT.md +1 -1
- package/docs/ai/components/accordion.md +46 -80
- package/docs/ai/components/action-bar.md +75 -0
- package/docs/ai/components/activity-feed.md +7 -7
- package/docs/ai/components/alert.md +26 -44
- package/docs/ai/components/app-tiles.md +34 -39
- package/docs/ai/components/approval-flow.md +1 -1
- package/docs/ai/components/audio-recorder.md +35 -67
- package/docs/ai/components/availability.md +13 -34
- package/docs/ai/components/avatar-group.md +26 -13
- package/docs/ai/components/avatar.md +52 -36
- package/docs/ai/components/badge.md +21 -32
- package/docs/ai/components/banner.md +21 -43
- package/docs/ai/components/binpack.md +89 -0
- package/docs/ai/components/book.md +25 -23
- package/docs/ai/components/booking.md +31 -36
- package/docs/ai/components/breadcrumbs.md +36 -11
- package/docs/ai/components/button.md +33 -44
- package/docs/ai/components/calendar.md +37 -70
- package/docs/ai/components/camera-annotate.md +31 -64
- package/docs/ai/components/camera.md +38 -120
- package/docs/ai/components/candlestick.md +32 -52
- package/docs/ai/components/card.md +20 -30
- package/docs/ai/components/carousel.md +32 -32
- package/docs/ai/components/cart.md +24 -29
- package/docs/ai/components/chart.md +29 -114
- package/docs/ai/components/chat.md +38 -75
- package/docs/ai/components/checkbox.md +22 -41
- package/docs/ai/components/chip.md +18 -54
- package/docs/ai/components/code-block.md +57 -178
- package/docs/ai/components/color-display.md +12 -32
- package/docs/ai/components/color-picker.md +17 -39
- package/docs/ai/components/command-palette.md +49 -71
- package/docs/ai/components/comments.md +55 -36
- package/docs/ai/components/countdown.md +28 -30
- package/docs/ai/components/cropper.md +33 -33
- package/docs/ai/components/data-card.md +20 -14
- package/docs/ai/components/date-picker.md +40 -47
- package/docs/ai/components/date-range-picker.md +31 -15
- package/docs/ai/components/date-time-picker.md +23 -46
- package/docs/ai/components/diff.md +30 -31
- package/docs/ai/components/divider.md +17 -47
- package/docs/ai/components/doc.md +43 -68
- package/docs/ai/components/draw.md +35 -87
- package/docs/ai/components/drawer.md +48 -77
- package/docs/ai/components/empty-state.md +10 -44
- package/docs/ai/components/estimate.md +33 -58
- package/docs/ai/components/file-gallery.md +48 -100
- package/docs/ai/components/file-upload.md +17 -53
- package/docs/ai/components/flip-card.md +31 -23
- package/docs/ai/components/flow.md +37 -65
- package/docs/ai/components/form-builder.md +35 -75
- package/docs/ai/components/form-layout.md +10 -20
- package/docs/ai/components/funnel.md +33 -48
- package/docs/ai/components/gantt.md +27 -23
- package/docs/ai/components/gauge.md +16 -17
- package/docs/ai/components/heatmap.md +21 -21
- package/docs/ai/components/image.md +7 -13
- package/docs/ai/components/input.md +38 -70
- package/docs/ai/components/invoice.md +35 -36
- package/docs/ai/components/kanban.md +32 -61
- package/docs/ai/components/key-value.md +32 -16
- package/docs/ai/components/kpi.md +38 -73
- package/docs/ai/components/layout.md +29 -23
- package/docs/ai/components/leaderboard.md +28 -37
- package/docs/ai/components/link-preview.md +12 -18
- package/docs/ai/components/link.md +10 -7
- package/docs/ai/components/list.md +21 -5
- package/docs/ai/components/location.md +21 -25
- package/docs/ai/components/login.md +14 -9
- package/docs/ai/components/map.md +27 -33
- package/docs/ai/components/markdown.md +20 -24
- package/docs/ai/components/masonry.md +10 -14
- package/docs/ai/components/mentions.md +26 -12
- package/docs/ai/components/menu.md +54 -52
- package/docs/ai/components/message-strip.md +20 -20
- package/docs/ai/components/metric-table.md +14 -21
- package/docs/ai/components/modal.md +27 -18
- package/docs/ai/components/music-player.md +49 -41
- package/docs/ai/components/nav.md +34 -31
- package/docs/ai/components/network-graph.md +27 -42
- package/docs/ai/components/notification-center.md +31 -33
- package/docs/ai/components/order-tracker.md +36 -27
- package/docs/ai/components/org-chart.md +36 -31
- package/docs/ai/components/pagination.md +34 -26
- package/docs/ai/components/paint.md +53 -91
- package/docs/ai/components/pdf-viewer.md +35 -36
- package/docs/ai/components/permission-matrix.md +26 -31
- package/docs/ai/components/podcast-player.md +64 -70
- package/docs/ai/components/pricing-table.md +37 -48
- package/docs/ai/components/product-card.md +58 -41
- package/docs/ai/components/progress-ring.md +20 -24
- package/docs/ai/components/progress.md +28 -45
- package/docs/ai/components/qr-code.md +25 -27
- package/docs/ai/components/qr-reader.md +20 -23
- package/docs/ai/components/radio.md +17 -15
- package/docs/ai/components/range-slider.md +22 -11
- package/docs/ai/components/rating.md +29 -33
- package/docs/ai/components/receipt.md +50 -127
- package/docs/ai/components/recipe.md +44 -42
- package/docs/ai/components/sankey.md +21 -30
- package/docs/ai/components/scheduler.md +29 -41
- package/docs/ai/components/segmented-control.md +11 -15
- package/docs/ai/components/select.md +58 -102
- package/docs/ai/components/skeleton.md +16 -30
- package/docs/ai/components/slider.md +26 -20
- package/docs/ai/components/sortable.md +25 -27
- package/docs/ai/components/sparkline.md +21 -17
- package/docs/ai/components/spinner.md +9 -5
- package/docs/ai/components/split-button.md +10 -13
- package/docs/ai/components/split-pane.md +19 -14
- package/docs/ai/components/spotlight.md +31 -26
- package/docs/ai/components/spreadsheet.md +51 -97
- package/docs/ai/components/stat-group.md +9 -19
- package/docs/ai/components/step-input.md +17 -15
- package/docs/ai/components/stepper.md +14 -15
- package/docs/ai/components/switch.md +15 -9
- package/docs/ai/components/table.md +24 -84
- package/docs/ai/components/tabs.md +18 -10
- package/docs/ai/components/tag-input.md +18 -29
- package/docs/ai/components/tag.md +10 -22
- package/docs/ai/components/terminal.md +9 -9
- package/docs/ai/components/testimonial.md +9 -19
- package/docs/ai/components/textarea.md +15 -16
- package/docs/ai/components/theme.md +3 -3
- package/docs/ai/components/time-picker.md +30 -49
- package/docs/ai/components/time-range-picker.md +16 -15
- package/docs/ai/components/timeline.md +5 -4
- package/docs/ai/components/timer.md +8 -8
- package/docs/ai/components/toast.md +24 -18
- package/docs/ai/components/tooltip.md +11 -22
- package/docs/ai/components/tree.md +9 -9
- package/docs/ai/components/treemap.md +14 -13
- package/docs/ai/components/user-card.md +21 -27
- package/docs/ai/components/video-player.md +35 -52
- package/docs/ai/components/virtual-scroller.md +1 -1
- package/docs/ai/components/waterfall.md +17 -16
- package/docs/ai/components/weather.md +19 -34
- package/docs/ai/components/work-order.md +58 -134
- package/docs/ai/patterns.md +63 -0
- package/docs/components/accordion.md +72 -151
- package/docs/components/action-bar.md +185 -0
- package/docs/components/activity-feed.md +9 -14
- package/docs/components/alert.md +17 -109
- package/docs/components/app-tiles.md +58 -43
- package/docs/components/approval-flow.md +8 -14
- package/docs/components/audio-recorder.md +45 -51
- package/docs/components/availability.md +30 -45
- package/docs/components/avatar-group.md +34 -14
- package/docs/components/avatar.md +20 -55
- package/docs/components/badge.md +53 -470
- package/docs/components/banner.md +44 -30
- package/docs/components/binpack.md +208 -0
- package/docs/components/book.md +78 -57
- package/docs/components/booking.md +35 -87
- package/docs/components/breadcrumbs.md +74 -448
- package/docs/components/button.md +72 -603
- package/docs/components/calendar.md +77 -261
- package/docs/components/camera-annotate.md +44 -96
- package/docs/components/camera.md +94 -333
- package/docs/components/candlestick.md +79 -116
- package/docs/components/card.md +51 -689
- package/docs/components/carousel.md +29 -76
- package/docs/components/cart.md +44 -136
- package/docs/components/chart.md +95 -438
- package/docs/components/chat.md +175 -439
- package/docs/components/checkbox.md +52 -609
- package/docs/components/chip.md +45 -574
- package/docs/components/code-block.md +157 -421
- package/docs/components/color-display.md +45 -54
- package/docs/components/color-picker.md +103 -36
- package/docs/components/command-palette.md +98 -92
- package/docs/components/comments.md +16 -10
- package/docs/components/countdown.md +15 -20
- package/docs/components/cropper.md +14 -16
- package/docs/components/data-card.md +16 -15
- package/docs/components/date-picker.md +45 -25
- package/docs/components/date-range-picker.md +140 -87
- package/docs/components/date-time-picker.md +25 -28
- package/docs/components/diff.md +22 -17
- package/docs/components/divider.md +18 -20
- package/docs/components/doc.md +105 -197
- package/docs/components/draw.md +117 -223
- package/docs/components/drawer.md +113 -478
- package/docs/components/empty-state.md +13 -29
- package/docs/components/estimate.md +58 -118
- package/docs/components/file-gallery.md +123 -495
- package/docs/components/file-upload.md +36 -123
- package/docs/components/flip-card.md +30 -34
- package/docs/components/flow.md +74 -89
- package/docs/components/form-builder.md +59 -86
- package/docs/components/form-layout.md +21 -31
- package/docs/components/funnel.md +21 -22
- package/docs/components/gantt.md +5 -5
- package/docs/components/gauge.md +5 -23
- package/docs/components/heatmap.md +13 -55
- package/docs/components/image.md +28 -32
- package/docs/components/input.md +25 -14
- package/docs/components/invoice.md +34 -33
- package/docs/components/kanban.md +99 -394
- package/docs/components/key-value.md +22 -12
- package/docs/components/kpi.md +41 -112
- package/docs/components/layout.md +7 -13
- package/docs/components/leaderboard.md +52 -76
- package/docs/components/link-preview.md +20 -16
- package/docs/components/link.md +22 -19
- package/docs/components/list.md +44 -26
- package/docs/components/location.md +9 -13
- package/docs/components/login.md +42 -36
- package/docs/components/map.md +24 -46
- package/docs/components/markdown.md +14 -25
- package/docs/components/masonry.md +15 -13
- package/docs/components/mentions.md +36 -25
- package/docs/components/menu.md +39 -46
- package/docs/components/message-strip.md +15 -51
- package/docs/components/metric-table.md +50 -72
- package/docs/components/modal.md +32 -43
- package/docs/components/music-player.md +41 -49
- package/docs/components/nav.md +23 -13
- package/docs/components/network-graph.md +14 -13
- package/docs/components/notification-center.md +68 -172
- package/docs/components/order-tracker.md +72 -117
- package/docs/components/org-chart.md +58 -207
- package/docs/components/pagination.md +67 -89
- package/docs/components/paint.md +86 -172
- package/docs/components/pdf-viewer.md +46 -151
- package/docs/components/permission-matrix.md +61 -112
- package/docs/components/podcast-player.md +41 -119
- package/docs/components/pricing-table.md +104 -147
- package/docs/components/product-card.md +94 -197
- package/docs/components/progress-ring.md +29 -32
- package/docs/components/progress.md +30 -61
- package/docs/components/qr-code.md +53 -61
- package/docs/components/qr-reader.md +53 -42
- package/docs/components/radio.md +42 -40
- package/docs/components/range-slider.md +41 -30
- package/docs/components/rating.md +50 -84
- package/docs/components/receipt.md +91 -129
- package/docs/components/recipe.md +107 -216
- package/docs/components/sankey.md +47 -83
- package/docs/components/scheduler.md +81 -184
- package/docs/components/segmented-control.md +48 -40
- package/docs/components/select.md +107 -129
- package/docs/components/skeleton.md +33 -47
- package/docs/components/slider.md +49 -53
- package/docs/components/sortable.md +43 -186
- package/docs/components/sparkline.md +26 -25
- package/docs/components/spinner.md +32 -37
- package/docs/components/split-button.md +43 -23
- package/docs/components/split-pane.md +41 -58
- package/docs/components/spotlight.md +53 -145
- package/docs/components/spreadsheet.md +84 -307
- package/docs/components/stat-group.md +27 -61
- package/docs/components/step-input.md +44 -41
- package/docs/components/stepper.md +55 -89
- package/docs/components/switch.md +39 -39
- package/docs/components/table.md +27 -32
- package/docs/components/tabs.md +36 -27
- package/docs/components/tag-input.md +50 -176
- package/docs/components/tag.md +12 -50
- package/docs/components/terminal.md +32 -37
- package/docs/components/testimonial.md +24 -81
- package/docs/components/textarea.md +9 -14
- package/docs/components/theme.md +10 -23
- package/docs/components/time-picker.md +48 -72
- package/docs/components/time-range-picker.md +22 -41
- package/docs/components/timeline.md +7 -14
- package/docs/components/timer.md +16 -32
- package/docs/components/toast.md +19 -45
- package/docs/components/tooltip.md +13 -115
- package/docs/components/tree.md +2 -19
- package/docs/components/treemap.md +19 -43
- package/docs/components/user-card.md +13 -22
- package/docs/components/video-player.md +53 -227
- package/docs/components/virtual-scroller.md +11 -44
- package/docs/components/waterfall.md +58 -137
- package/docs/components/weather.md +94 -153
- package/docs/components/work-order.md +56 -143
- package/docs/plans/2026-03-09-action-bar-design.md +104 -0
- package/docs/plans/2026-03-09-action-bar-plan.md +676 -0
- package/docs/plans/2026-03-10-react-integration-design.md +166 -0
- package/docs/request-response.md +77 -0
- package/package.json +20 -10
|
@@ -1,462 +1,205 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/code-block.md -->
|
|
2
2
|
|
|
3
3
|
# Code Block Component
|
|
4
4
|
|
|
5
5
|
Display code with syntax highlighting, line numbers, and copy functionality. Uses a JSON-driven tokenizer engine with Monarch-inspired state machine for syntax highlighting.
|
|
6
6
|
|
|
7
|
+
## Table of Contents
|
|
8
|
+
- [Properties](#properties)
|
|
9
|
+
- [Methods](#methods)
|
|
10
|
+
- [Events](#events)
|
|
11
|
+
- [Slots](#slots)
|
|
12
|
+
- [CSS Parts](#css-parts)
|
|
13
|
+
- [Basic Usage](#basic-usage)
|
|
14
|
+
- [Examples](#examples)
|
|
15
|
+
- [Accessibility](#accessibility)
|
|
16
|
+
|
|
7
17
|
## Properties
|
|
8
18
|
|
|
9
19
|
| Property | Type | Default | Description |
|
|
10
20
|
|----------|------|---------|-------------|
|
|
11
|
-
| `code` | `string` | `''` | Code content |
|
|
21
|
+
| `code` | `string` | `''` | Code content (set via slot or property) |
|
|
12
22
|
| `language` | `CodeLanguage` | `'plaintext'` | Programming language |
|
|
13
23
|
| `grammar` | `Grammar \| string \| null` | `null` | Grammar object or URL to grammar JSON |
|
|
14
|
-
| `showLineNumbers` | `boolean` | `false` | Show line numbers |
|
|
15
|
-
| `startLine` | `number` | `1` | Starting line number |
|
|
16
|
-
| `highlightLines` | `number[]` | `[]` | Lines to highlight |
|
|
24
|
+
| `showLineNumbers` (attr: `show-line-numbers`) | `boolean` | `false` | Show line numbers |
|
|
25
|
+
| `startLine` (attr: `start-line`) | `number` | `1` | Starting line number |
|
|
26
|
+
| `highlightLines` (attr: `highlight-lines`) | `number[]` | `[]` | Lines to highlight |
|
|
17
27
|
| `copyable` | `boolean` | `true` | Show copy button |
|
|
18
|
-
| `filename` | `string` | `''` | File name to display |
|
|
28
|
+
| `filename` | `string` | `''` | File name to display in header |
|
|
19
29
|
| `format` | `string` | `''` | Formatter name from grammar (e.g. `"pretty"`), or any truthy string with `setFormatter()` |
|
|
20
|
-
| `theme` | `'' \| 'dark' \| 'light'` | `''` | Force a specific color theme; empty
|
|
21
|
-
| `fetchMode` | `'native' \| 'virtual' \| 'event'` | `'native'` | How grammar URLs are fetched
|
|
30
|
+
| `theme` | `'' \| 'dark' \| 'light'` | `''` | Force a specific color theme; empty = auto-detect from page/OS |
|
|
31
|
+
| `fetchMode` (attr: `fetch-mode`) | `'native' \| 'virtual' \| 'event'` | `'native'` | How grammar URLs are fetched |
|
|
22
32
|
|
|
23
|
-
|
|
33
|
+
### Fetch Mode
|
|
24
34
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
- **`native`** (default) -- `fetch(url).then(r => r.json())`. No external wiring needed.
|
|
36
|
+
- **`virtual`** -- Uses `@request/@respond` pattern (`snice/code-block/load-grammar`). Requires a `@respond` handler.
|
|
37
|
+
- **`event`** -- Dispatches `grammar-request` CustomEvent. Listener calls `codeBlock.setGrammar()` to provide grammar.
|
|
28
38
|
|
|
29
39
|
## Methods
|
|
30
40
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
| Method | Arguments | Description |
|
|
42
|
+
|--------|-----------|-------------|
|
|
43
|
+
| `copy()` | -- | Copy code to clipboard |
|
|
44
|
+
| `highlight()` | -- | Manually trigger syntax highlighting |
|
|
45
|
+
| `setHighlighter()` | `fn: HighlighterFunction` | Set an external highlighter function |
|
|
46
|
+
| `setFormatter()` | `fn: FormatterFunction` | Set a code formatter function |
|
|
47
|
+
| `setGrammar()` | `grammar: Grammar` | Set a grammar object programmatically |
|
|
36
48
|
|
|
37
49
|
## Events
|
|
38
50
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
| Event | Detail | Description |
|
|
52
|
+
|-------|--------|-------------|
|
|
53
|
+
| `code-copy` | `{ code, codeBlock }` | Code copied to clipboard |
|
|
54
|
+
| `code-before-format` | `{ code, language, codeBlock }` | Before formatting |
|
|
55
|
+
| `code-after-format` | `{ code, language, codeBlock }` | After formatting |
|
|
56
|
+
| `code-before-highlight` | `{ code, language, codeBlock }` | Before highlighting |
|
|
57
|
+
| `code-after-highlight` | `{ code, language, codeBlock }` | After highlighting |
|
|
58
|
+
| `grammar-request` | `{ url, language, codeBlock }` | Grammar fetch requested (only when `fetch-mode="event"`) |
|
|
59
|
+
| `grammar-loaded` | `{ grammar, url, language, codeBlock }` | Grammar loaded (any mode) or set via `setGrammar()` |
|
|
46
60
|
|
|
47
|
-
##
|
|
48
|
-
|
|
49
|
-
```html
|
|
50
|
-
<snice-code-block id="code" language="javascript" grammar="grammars/typescript.json"></snice-code-block>
|
|
51
|
-
<script>
|
|
52
|
-
document.getElementById('code').code = `
|
|
53
|
-
function hello() {
|
|
54
|
-
console.log("Hello World");
|
|
55
|
-
}
|
|
56
|
-
`;
|
|
57
|
-
</script>
|
|
58
|
-
```
|
|
61
|
+
## Slots
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
| Name | Description |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| (default) | Code content as slotted text (auto-dedented) |
|
|
61
66
|
|
|
62
|
-
|
|
67
|
+
## CSS Parts
|
|
63
68
|
|
|
64
|
-
|
|
69
|
+
| Part | Description |
|
|
70
|
+
|------|-------------|
|
|
71
|
+
| `container` | The outer code block wrapper |
|
|
72
|
+
| `header` | The header bar with filename and copy button |
|
|
73
|
+
| `filename` | The filename display |
|
|
74
|
+
| `copy-button` | The copy-to-clipboard button |
|
|
75
|
+
| `content` | The scrollable code content area |
|
|
76
|
+
| `pre` | The pre-formatted code container |
|
|
77
|
+
| `code` | The code element containing highlighted tokens |
|
|
65
78
|
|
|
66
|
-
|
|
79
|
+
## Basic Usage
|
|
67
80
|
|
|
68
81
|
```html
|
|
69
|
-
<snice-code-block grammar="grammars/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
**Grammars with built-in `"pretty"` formatters:** `json.json`, `typescript.json`, `css.json`, `snice.json`.
|
|
75
|
-
|
|
76
|
-
#### Grammar Formatter Rules
|
|
77
|
-
|
|
78
|
-
Each named formatter is a set of declarative rules defined in the grammar JSON:
|
|
79
|
-
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"formatters": {
|
|
83
|
-
"pretty": {
|
|
84
|
-
"tabSize": 2,
|
|
85
|
-
"useTabs": false,
|
|
86
|
-
"newlineAfter": "[{\\[,]",
|
|
87
|
-
"newlineBefore": "[}\\]]",
|
|
88
|
-
"spaceAfter": "[:]",
|
|
89
|
-
"indent": "[{\\[]",
|
|
90
|
-
"dedent": "[}\\]]",
|
|
91
|
-
"skipStrings": true,
|
|
92
|
-
"skipComments": true
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
| Field | Type | Default | Description |
|
|
99
|
-
|-------|------|---------|-------------|
|
|
100
|
-
| `tabSize` | `number` | `2` | Indent width |
|
|
101
|
-
| `useTabs` | `boolean` | `false` | Use tabs instead of spaces |
|
|
102
|
-
| `newlineAfter` | `string` (regex) | — | Insert newline after these chars |
|
|
103
|
-
| `newlineBefore` | `string` (regex) | — | Insert newline before these chars |
|
|
104
|
-
| `spaceAfter` | `string` (regex) | — | Insert space after these chars |
|
|
105
|
-
| `spaceBefore` | `string` (regex) | — | Insert space before these chars |
|
|
106
|
-
| `spaceAround` | `string` (regex) | — | Insert space on both sides |
|
|
107
|
-
| `indent` | `string` (regex) | — | Chars that increase indent level |
|
|
108
|
-
| `dedent` | `string` (regex) | — | Chars that decrease indent level |
|
|
109
|
-
| `trimTrailing` | `boolean` | `true` | Remove trailing whitespace per line |
|
|
110
|
-
| `collapseBlankLines` | `number` | — | Max consecutive blank lines |
|
|
111
|
-
| `skipStrings` | `boolean` | `true` | Don't apply rules inside string literals |
|
|
112
|
-
| `skipComments` | `boolean` | `true` | Don't apply rules inside comments |
|
|
113
|
-
|
|
114
|
-
### Imperative Formatters
|
|
115
|
-
|
|
116
|
-
For cases requiring JavaScript logic, `setFormatter(fn)` still works. When both are present, `setFormatter()` takes priority over grammar-based formatters.
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
type FormatterFunction = (code: string, language: string) => string | Promise<string>;
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### JSON Formatter
|
|
123
|
-
|
|
124
|
-
Zero-dependency formatter that pretty-prints JSON using `JSON.parse()` + `JSON.stringify()`:
|
|
125
|
-
|
|
126
|
-
```typescript
|
|
127
|
-
import { createJsonFormatter } from 'snice/components/code-block/formatters/json';
|
|
128
|
-
|
|
129
|
-
const formatter = createJsonFormatter({ indent: 2 });
|
|
130
|
-
codeBlock.setFormatter(formatter);
|
|
131
|
-
codeBlock.format = 'pretty';
|
|
132
|
-
codeBlock.code = '{"name":"snice","version":"4.0.0"}';
|
|
82
|
+
<snice-code-block language="javascript" grammar="grammars/typescript.json">
|
|
83
|
+
const x = 1;
|
|
84
|
+
console.log(x);
|
|
85
|
+
</snice-code-block>
|
|
133
86
|
```
|
|
134
87
|
|
|
135
|
-
### Indent Formatter
|
|
136
|
-
|
|
137
|
-
Zero-dependency indent normalizer that re-indents code by tracking brace/bracket/paren nesting depth:
|
|
138
|
-
|
|
139
88
|
```typescript
|
|
140
|
-
import
|
|
141
|
-
|
|
142
|
-
const formatter = createIndentFormatter({ tabSize: 2, useTabs: false });
|
|
143
|
-
codeBlock.setFormatter(formatter);
|
|
144
|
-
codeBlock.format = 'pretty';
|
|
89
|
+
import 'snice/components/code-block/snice-code-block';
|
|
145
90
|
```
|
|
146
91
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
Adapter for Prettier (requires `prettier` as a dependency):
|
|
150
|
-
|
|
151
|
-
```typescript
|
|
152
|
-
import * as prettier from 'prettier/standalone';
|
|
153
|
-
import parserBabel from 'prettier/plugins/babel';
|
|
154
|
-
import parserEstree from 'prettier/plugins/estree';
|
|
155
|
-
import { setupPrettierFormatter } from 'snice/components/code-block/formatters/prettier';
|
|
156
|
-
|
|
157
|
-
const formatter = setupPrettierFormatter(prettier, [parserBabel, parserEstree], {
|
|
158
|
-
tabWidth: 2,
|
|
159
|
-
singleQuote: true,
|
|
160
|
-
});
|
|
161
|
-
codeBlock.setFormatter(formatter);
|
|
162
|
-
codeBlock.format = 'pretty';
|
|
163
|
-
```
|
|
92
|
+
## Examples
|
|
164
93
|
|
|
165
|
-
###
|
|
94
|
+
### With Line Numbers and Filename
|
|
166
95
|
|
|
167
|
-
|
|
96
|
+
Set `show-line-numbers` and `filename` for a file-like display.
|
|
168
97
|
|
|
169
98
|
```html
|
|
170
|
-
<
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
</snice-code-block>
|
|
176
|
-
</div>
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
The 4-space indent from HTML nesting is stripped, but the 2-space relative indent inside the function is preserved.
|
|
180
|
-
|
|
181
|
-
## Grammar Format
|
|
182
|
-
|
|
183
|
-
Grammars are JSON-serializable objects with states, transitions, and lookup tables:
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
interface Grammar {
|
|
187
|
-
name: string; // Language name
|
|
188
|
-
fileTypes?: string[]; // File extensions
|
|
189
|
-
defaultToken?: string; // Token type for unmatched text
|
|
190
|
-
ignoreCase?: boolean; // Case-insensitive regex matching
|
|
191
|
-
tokenizer: Record<string, GrammarEntry[]>; // Named states
|
|
192
|
-
formatters?: Record<string, FormatRules>; // Named declarative formatters
|
|
193
|
-
[key: string]: any; // Lookup tables (keywords, builtins, etc.)
|
|
194
|
-
}
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### Rules
|
|
198
|
-
|
|
199
|
-
Each state contains an array of rules. Rules can be:
|
|
200
|
-
|
|
201
|
-
- **Simple**: `[regex, token]` — Match regex, assign token type
|
|
202
|
-
- **With transition**: `[regex, token, nextState]` — Match and change state
|
|
203
|
-
- **Conditional**: `[regex, { cases: { '@table': 'token', '@default': 'fallback' } }]` — Lookup matched text in tables
|
|
204
|
-
- **Include**: `{ include: '@stateName' }` — Include rules from another state
|
|
205
|
-
|
|
206
|
-
### State Transitions
|
|
207
|
-
|
|
208
|
-
- `@stateName` — Push state onto stack (enter nested context)
|
|
209
|
-
- `@pop` — Pop state from stack (return to previous context)
|
|
210
|
-
|
|
211
|
-
### Example: Handling Multi-line Comments
|
|
212
|
-
|
|
213
|
-
```json
|
|
214
|
-
{
|
|
215
|
-
"tokenizer": {
|
|
216
|
-
"root": [
|
|
217
|
-
["/\\*", "comment", "@comment"],
|
|
218
|
-
["//.*$", "comment"]
|
|
219
|
-
],
|
|
220
|
-
"comment": [
|
|
221
|
-
["[^*]+", "comment"],
|
|
222
|
-
["\\*/", "comment", "@pop"],
|
|
223
|
-
["[*]", "comment"]
|
|
224
|
-
]
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### Example: Template Literals with Interpolation
|
|
230
|
-
|
|
231
|
-
```json
|
|
232
|
-
{
|
|
233
|
-
"tokenizer": {
|
|
234
|
-
"root": [
|
|
235
|
-
["`", "string", "@template"]
|
|
236
|
-
],
|
|
237
|
-
"template": [
|
|
238
|
-
["\\$\\{", "punctuation", "@interpolation"],
|
|
239
|
-
["[^`$\\\\]+", "string"],
|
|
240
|
-
["\\\\.", "string"],
|
|
241
|
-
["`", "string", "@pop"]
|
|
242
|
-
],
|
|
243
|
-
"interpolation": [
|
|
244
|
-
["\\}", "punctuation", "@pop"],
|
|
245
|
-
{ "include": "@root" }
|
|
246
|
-
]
|
|
247
|
-
}
|
|
248
|
-
}
|
|
99
|
+
<snice-code-block grammar="grammars/typescript.json" language="typescript" show-line-numbers filename="index.ts">
|
|
100
|
+
const greeting = 'Hello World';
|
|
101
|
+
console.log(greeting);
|
|
102
|
+
</snice-code-block>
|
|
249
103
|
```
|
|
250
104
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
The highlighter engine can be used directly:
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
import {
|
|
257
|
-
highlightCode,
|
|
258
|
-
tokenize,
|
|
259
|
-
registerGrammar,
|
|
260
|
-
unregisterGrammar,
|
|
261
|
-
getGrammar
|
|
262
|
-
} from 'snice/components/code-block/highlighter';
|
|
263
|
-
|
|
264
|
-
// Highlight with a grammar object → HTML string
|
|
265
|
-
const html = highlightCode('const x = 1;', grammarObject);
|
|
266
|
-
|
|
267
|
-
// Highlight with a registered grammar name (plaintext fallback if not found)
|
|
268
|
-
registerGrammar('typescript', tsGrammar);
|
|
269
|
-
const html2 = highlightCode('const x = 1;', 'typescript');
|
|
270
|
-
|
|
271
|
-
// Get raw tokens
|
|
272
|
-
const tokens = tokenize('const x = 1;', grammarObject);
|
|
273
|
-
// [{ text: 'const', type: 'keyword' }, { text: ' ', type: null }, ...]
|
|
274
|
-
|
|
275
|
-
// Register a grammar globally
|
|
276
|
-
registerGrammar('myLang', myGrammar);
|
|
105
|
+
### Highlight Specific Lines
|
|
277
106
|
|
|
278
|
-
|
|
279
|
-
unregisterGrammar('myLang');
|
|
280
|
-
|
|
281
|
-
// Look up a registered grammar (returns undefined if not found)
|
|
282
|
-
const grammar = getGrammar('typescript');
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## Examples
|
|
107
|
+
Use `highlight-lines` to draw attention to specific lines.
|
|
286
108
|
|
|
287
109
|
```html
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
<!-- Highlight specific lines -->
|
|
295
|
-
<snice-code-block grammar="grammars/python.json" language="python" highlight-lines="[2,3,4]"></snice-code-block>
|
|
296
|
-
|
|
297
|
-
<!-- Plaintext (no grammar needed) -->
|
|
298
|
-
<snice-code-block language="plaintext"></snice-code-block>
|
|
110
|
+
<snice-code-block grammar="grammars/python.json" language="python" highlight-lines="[2,3,4]">
|
|
111
|
+
def hello():
|
|
112
|
+
name = "World"
|
|
113
|
+
greeting = f"Hello {name}"
|
|
114
|
+
print(greeting)
|
|
115
|
+
</snice-code-block>
|
|
299
116
|
```
|
|
300
117
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
Grammars are **external JSON files** loaded on demand — the component ships with no built-in grammars to keep the bundle small.
|
|
304
|
-
|
|
305
|
-
### Available Grammars
|
|
306
|
-
|
|
307
|
-
| File | Languages | Aliases |
|
|
308
|
-
|------|-----------|---------|
|
|
309
|
-
| `typescript.json` | TypeScript, JavaScript | ts, tsx, js, jsx |
|
|
310
|
-
| `html.json` | HTML, XML | htm, svg |
|
|
311
|
-
| `css.json` | CSS, SCSS, Less | |
|
|
312
|
-
| `json.json` | JSON | jsonc |
|
|
313
|
-
| `python.json` | Python | py, pyw |
|
|
314
|
-
| `bash.json` | Bash, Shell | sh, zsh |
|
|
315
|
-
| `snice.json` | Snice (TS + templates) | |
|
|
316
|
-
|
|
317
|
-
Grammar files are located at:
|
|
318
|
-
- **Source:** `components/code-block/grammars/`
|
|
319
|
-
- **Built:** `dist/components/code-block/grammars/`
|
|
320
|
-
- **Standalone:** serve alongside the component JS file
|
|
321
|
-
|
|
322
|
-
### Snice Grammar
|
|
323
|
-
|
|
324
|
-
The `snice.json` grammar extends TypeScript with full awareness of snice's template DSL. Use it to highlight snice component source code.
|
|
325
|
-
|
|
326
|
-
**What it highlights:**
|
|
118
|
+
### Programmatic Code
|
|
327
119
|
|
|
328
|
-
|
|
329
|
-
|--------|-----------|-------------|
|
|
330
|
-
| `html\`` / `css\`` | `tag` | Tagged template entry (enters HTML/CSS mode) |
|
|
331
|
-
| `<if>`, `<case>`, `<when>`, `<default>` | `keyword` | Snice conditional rendering elements |
|
|
332
|
-
| `.prop=${val}` | `property` | Property bindings |
|
|
333
|
-
| `?attr=${bool}` | `attr-name` | Boolean attribute bindings |
|
|
334
|
-
| `@event=${fn}` | `function` | Event bindings (includes `@event:modifier`, `@event.modifier`) |
|
|
335
|
-
| `${...}` | (TypeScript) | Interpolations return to TS mode |
|
|
336
|
-
| `html/*html*/\`` | `tag` | Editor hint pattern supported |
|
|
337
|
-
|
|
338
|
-
**Example:**
|
|
120
|
+
Set code via the `code` property for dynamic content.
|
|
339
121
|
|
|
340
122
|
```html
|
|
341
|
-
<snice-code-block
|
|
123
|
+
<snice-code-block id="code" language="javascript" grammar="grammars/typescript.json"></snice-code-block>
|
|
124
|
+
|
|
342
125
|
<script>
|
|
343
126
|
document.getElementById('code').code = `
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
@render()
|
|
349
|
-
template() {
|
|
350
|
-
return html\\\`
|
|
351
|
-
<if \\\${this.count > 0}>
|
|
352
|
-
<span>\\\${this.count}</span>
|
|
353
|
-
</if>
|
|
354
|
-
<button @click=\\\${() => this.count++}>+</button>
|
|
355
|
-
\\\`;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
@styles()
|
|
359
|
-
componentStyles() {
|
|
360
|
-
return css\\\`:host { display: block; padding: 1rem; }\\\`;
|
|
361
|
-
}
|
|
362
|
-
}`;
|
|
127
|
+
function hello() {
|
|
128
|
+
console.log("Hello World");
|
|
129
|
+
}
|
|
130
|
+
`;
|
|
363
131
|
</script>
|
|
364
132
|
```
|
|
365
133
|
|
|
366
|
-
###
|
|
134
|
+
### Force Theme
|
|
367
135
|
|
|
368
|
-
|
|
136
|
+
Use `theme` to override auto-detection.
|
|
369
137
|
|
|
370
138
|
```html
|
|
371
|
-
<snice-code-block
|
|
372
|
-
|
|
373
|
-
language="typescript"
|
|
374
|
-
id="code">
|
|
375
|
-
</snice-code-block>
|
|
376
|
-
<script>
|
|
377
|
-
document.getElementById('code').code = 'const x: number = 42;';
|
|
378
|
-
</script>
|
|
139
|
+
<snice-code-block theme="dark" language="javascript">const x = 1;</snice-code-block>
|
|
140
|
+
<snice-code-block theme="light" language="javascript">const x = 1;</snice-code-block>
|
|
379
141
|
```
|
|
380
142
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
### Inline Grammar Object
|
|
143
|
+
### Grammar-Based Formatter
|
|
384
144
|
|
|
385
|
-
|
|
145
|
+
Use `format="pretty"` with a grammar that includes formatters.
|
|
386
146
|
|
|
387
147
|
```html
|
|
388
|
-
<snice-code-block
|
|
389
|
-
<script>
|
|
390
|
-
const codeBlock = document.getElementById('cb');
|
|
391
|
-
codeBlock.grammar = {
|
|
392
|
-
name: 'my-language',
|
|
393
|
-
keywords: ['func', 'var', 'return'],
|
|
394
|
-
tokenizer: {
|
|
395
|
-
root: [
|
|
396
|
-
['//.*$', 'comment'],
|
|
397
|
-
['"[^"]*"', 'string'],
|
|
398
|
-
['\\b\\d+\\b', 'number'],
|
|
399
|
-
['[a-zA-Z_]\\w*', { cases: { '@keywords': 'keyword', '@default': '' } }]
|
|
400
|
-
]
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
codeBlock.code = 'func main() { return 42; }';
|
|
404
|
-
</script>
|
|
148
|
+
<snice-code-block grammar="grammars/json.json" format="pretty" code='{"a":1,"b":[2,3]}'></snice-code-block>
|
|
405
149
|
```
|
|
406
150
|
|
|
407
|
-
|
|
151
|
+
Grammars with built-in `"pretty"` formatters: `json.json`, `typescript.json`, `css.json`, `snice.json`.
|
|
408
152
|
|
|
409
|
-
|
|
153
|
+
### Imperative Formatter
|
|
154
|
+
|
|
155
|
+
Use `setFormatter()` for custom formatting logic.
|
|
410
156
|
|
|
411
157
|
```typescript
|
|
412
|
-
import {
|
|
158
|
+
import { createJsonFormatter } from 'snice/components/code-block/formatters/json';
|
|
413
159
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
registerGrammar('ts', tsGrammar); // register aliases too
|
|
418
|
-
registerGrammar('javascript', tsGrammar);
|
|
419
|
-
registerGrammar('js', tsGrammar);
|
|
160
|
+
codeBlock.setFormatter(createJsonFormatter({ indent: 2 }));
|
|
161
|
+
codeBlock.format = 'pretty';
|
|
162
|
+
codeBlock.code = '{"name":"snice","version":"4.0.0"}';
|
|
420
163
|
```
|
|
421
164
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
## Theming (Light / Dark Mode)
|
|
425
|
-
|
|
426
|
-
The code block automatically follows the page's theme. It detects:
|
|
427
|
-
|
|
428
|
-
1. **`data-theme` attribute** on the page (snice theme system): `[data-theme="dark"]` or `[data-theme="light"]`
|
|
429
|
-
2. **OS preference** via `prefers-color-scheme` media query (fallback when no `data-theme` is set)
|
|
165
|
+
### Event-Based Grammar Loading
|
|
430
166
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
Use the `theme` attribute to override auto-detection:
|
|
167
|
+
Use `fetch-mode="event"` to control grammar loading externally.
|
|
434
168
|
|
|
435
169
|
```html
|
|
436
|
-
|
|
437
|
-
<snice-code-block theme="dark" language="javascript">
|
|
438
|
-
const x = 1;
|
|
439
|
-
</snice-code-block>
|
|
170
|
+
<snice-code-block grammar="grammars/typescript.json" fetch-mode="event" id="cb"></snice-code-block>
|
|
440
171
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
const
|
|
444
|
-
|
|
172
|
+
<script>
|
|
173
|
+
cb.addEventListener('grammar-request', async (e) => {
|
|
174
|
+
const grammar = await fetch(e.detail.url).then(r => r.json());
|
|
175
|
+
e.detail.codeBlock.setGrammar(grammar);
|
|
176
|
+
});
|
|
177
|
+
</script>
|
|
445
178
|
```
|
|
446
179
|
|
|
447
|
-
###
|
|
448
|
-
|
|
449
|
-
Override structural colors with CSS custom properties:
|
|
180
|
+
### Inline Grammar Object
|
|
450
181
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
182
|
+
Pass a grammar object directly via JavaScript.
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
codeBlock.grammar = {
|
|
186
|
+
name: 'my-language',
|
|
187
|
+
keywords: ['func', 'var', 'return'],
|
|
188
|
+
tokenizer: {
|
|
189
|
+
root: [
|
|
190
|
+
['//.*$', 'comment'],
|
|
191
|
+
['"[^"]*"', 'string'],
|
|
192
|
+
['\\b\\d+\\b', 'number'],
|
|
193
|
+
['[a-zA-Z_]\\w*', { cases: { '@keywords': 'keyword', '@default': '' } }]
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
codeBlock.code = 'func main() { return 42; }';
|
|
457
198
|
```
|
|
458
199
|
|
|
459
|
-
|
|
200
|
+
### Customize Token Colors
|
|
201
|
+
|
|
202
|
+
Override individual token colors with CSS custom properties.
|
|
460
203
|
|
|
461
204
|
```css
|
|
462
205
|
snice-code-block {
|
|
@@ -468,51 +211,44 @@ snice-code-block {
|
|
|
468
211
|
}
|
|
469
212
|
```
|
|
470
213
|
|
|
471
|
-
|
|
214
|
+
### Customize Structural Colors
|
|
472
215
|
|
|
473
|
-
|
|
216
|
+
Override the block background, text, and header colors.
|
|
474
217
|
|
|
475
|
-
|
|
218
|
+
```css
|
|
219
|
+
snice-code-block {
|
|
220
|
+
--code-block-bg: #1e1e2e;
|
|
221
|
+
--code-block-text: #cdd6f4;
|
|
222
|
+
--code-block-header-bg: #181825;
|
|
223
|
+
}
|
|
224
|
+
```
|
|
476
225
|
|
|
477
|
-
|
|
478
|
-
|-------|----------------|-------------|
|
|
479
|
-
| `keyword` | Purple (#c678dd) | Language keywords |
|
|
480
|
-
| `string` | Green (#98c379) | String literals |
|
|
481
|
-
| `comment` | Gray (#5c6370) | Comments (italic) |
|
|
482
|
-
| `number` | Orange (#d19a66) | Numeric literals |
|
|
483
|
-
| `function` | Blue (#61afef) | Function names |
|
|
484
|
-
| `class-name` | Yellow (#e5c07b) | Class/type names |
|
|
485
|
-
| `tag` | Red (#e06c75) | HTML tags, decorators |
|
|
486
|
-
| `attr-name` | Orange (#d19a66) | Attribute names |
|
|
487
|
-
| `attr-value` | Green (#98c379) | Attribute values |
|
|
488
|
-
| `property` | Orange (#d19a66) | Object properties |
|
|
489
|
-
| `operator` | Cyan (#56b6c2) | Operators |
|
|
490
|
-
| `punctuation` | Gray (#abb2bf) | Brackets, semicolons |
|
|
491
|
-
| `constant` | Orange (#d19a66) | true/false/null |
|
|
492
|
-
| `builtin` | Red (#e06c75) | Built-in functions |
|
|
226
|
+
### Programmatic Highlighter API
|
|
493
227
|
|
|
494
|
-
|
|
228
|
+
Use the highlighter engine directly for custom rendering.
|
|
495
229
|
|
|
496
|
-
|
|
230
|
+
```typescript
|
|
231
|
+
import { highlightCode, tokenize, registerGrammar } from 'snice/components/code-block/highlighter';
|
|
232
|
+
|
|
233
|
+
const html = highlightCode('const x = 1;', grammarObject);
|
|
234
|
+
registerGrammar('typescript', tsGrammar);
|
|
235
|
+
const html2 = highlightCode('const x = 1;', 'typescript');
|
|
236
|
+
```
|
|
497
237
|
|
|
498
|
-
|
|
238
|
+
### Available Grammar Files
|
|
499
239
|
|
|
500
|
-
|
|
|
501
|
-
|
|
502
|
-
| `
|
|
503
|
-
| `
|
|
504
|
-
| `
|
|
505
|
-
| `
|
|
506
|
-
| `
|
|
507
|
-
| `
|
|
508
|
-
| `
|
|
240
|
+
| File | Languages |
|
|
241
|
+
|------|-----------|
|
|
242
|
+
| `typescript.json` | TypeScript, JavaScript |
|
|
243
|
+
| `html.json` | HTML, XML |
|
|
244
|
+
| `css.json` | CSS, SCSS, Less |
|
|
245
|
+
| `json.json` | JSON |
|
|
246
|
+
| `python.json` | Python |
|
|
247
|
+
| `bash.json` | Bash, Shell |
|
|
248
|
+
| `snice.json` | Snice (TypeScript + html/css template highlighting) |
|
|
509
249
|
|
|
510
|
-
|
|
511
|
-
snice-code-block::part(container) {
|
|
512
|
-
border-radius: 8px;
|
|
513
|
-
}
|
|
250
|
+
## Accessibility
|
|
514
251
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
```
|
|
252
|
+
- Auto-follows `data-theme` attribute or OS `prefers-color-scheme`
|
|
253
|
+
- Copy button for easy code copying
|
|
254
|
+
- Semantic `<pre>` and `<code>` elements
|