{"packageName":"@jcsoftdev/ui","version":"0.1.0","counts":{"components":264,"entries":15,"stories":1210,"hooksAndHelpers":615},"entries":[{"subpath":"ai","depth":1,"category":"ai","importPath":"@jcsoftdev/ui/ai"},{"subpath":"ai/attachment","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/attachment"},{"subpath":"ai/chain-of-thought","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/chain-of-thought"},{"subpath":"ai/chat-list","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/chat-list"},{"subpath":"ai/chat-message","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/chat-message"},{"subpath":"ai/code-block","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/code-block"},{"subpath":"ai/conversation","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/conversation"},{"subpath":"ai/loader","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/loader"},{"subpath":"ai/markdown","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/markdown"},{"subpath":"ai/message-actions","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/message-actions"},{"subpath":"ai/prompt-input","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/prompt-input"},{"subpath":"ai/prompt-suggestion","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/prompt-suggestion"},{"subpath":"ai/source","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/source"},{"subpath":"ai/text-shimmer","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/text-shimmer"},{"subpath":"ai/tool-call","depth":2,"category":"ai","importPath":"@jcsoftdev/ui/ai/tool-call"},{"subpath":"atoms","depth":1,"category":"atoms","importPath":"@jcsoftdev/ui/atoms"},{"subpath":"atoms/avatar","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/avatar"},{"subpath":"atoms/avatar-group","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/avatar-group"},{"subpath":"atoms/big-date","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/big-date"},{"subpath":"atoms/button","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/button"},{"subpath":"atoms/checkbox","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/checkbox"},{"subpath":"atoms/chip","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/chip"},{"subpath":"atoms/icon","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/icon"},{"subpath":"atoms/led","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/led"},{"subpath":"atoms/number-value","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/number-value"},{"subpath":"atoms/pressable-feedback","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/pressable-feedback"},{"subpath":"atoms/progress","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/progress"},{"subpath":"atoms/radio-group","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/radio-group"},{"subpath":"atoms/status-dot","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/status-dot"},{"subpath":"atoms/status-pill","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/status-pill"},{"subpath":"atoms/switch","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/switch"},{"subpath":"atoms/trend-chip","depth":2,"category":"atoms","importPath":"@jcsoftdev/ui/atoms/trend-chip"},{"subpath":"brand","depth":1,"category":"brand","importPath":"@jcsoftdev/ui/brand"},{"subpath":"calendar","depth":1,"category":"calendar","importPath":"@jcsoftdev/ui/calendar"},{"subpath":"calendar/day-chip","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/day-chip"},{"subpath":"calendar/event-block","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/event-block"},{"subpath":"calendar/internal","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/internal"},{"subpath":"calendar/month-view","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/month-view"},{"subpath":"calendar/timeline-view","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/timeline-view"},{"subpath":"calendar/week-view","depth":2,"category":"calendar","importPath":"@jcsoftdev/ui/calendar/week-view"},{"subpath":"charts","depth":1,"category":"charts","importPath":"@jcsoftdev/ui/charts"},{"subpath":"charts/area-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/area-chart"},{"subpath":"charts/bar-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/bar-chart"},{"subpath":"charts/beeswarm-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/beeswarm-chart"},{"subpath":"charts/box-plot","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/box-plot"},{"subpath":"charts/bubble-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/bubble-chart"},{"subpath":"charts/bubble-map","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/bubble-map"},{"subpath":"charts/bullet-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/bullet-chart"},{"subpath":"charts/candlestick-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/candlestick-chart"},{"subpath":"charts/chart-grid","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/chart-grid"},{"subpath":"charts/chord-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/chord-chart"},{"subpath":"charts/choropleth-map","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/choropleth-map"},{"subpath":"charts/combo-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/combo-chart"},{"subpath":"charts/core","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/core"},{"subpath":"charts/crossfilter","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/crossfilter"},{"subpath":"charts/donut-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/donut-chart"},{"subpath":"charts/dumbbell-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/dumbbell-chart"},{"subpath":"charts/fill-gauge-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/fill-gauge-chart"},{"subpath":"charts/funnel-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/funnel-chart"},{"subpath":"charts/gantt-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/gantt-chart"},{"subpath":"charts/gauge-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/gauge-chart"},{"subpath":"charts/globe-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/globe-chart"},{"subpath":"charts/heatmap-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/heatmap-chart"},{"subpath":"charts/hex-tile-map","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/hex-tile-map"},{"subpath":"charts/hierarchy-morph","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/hierarchy-morph"},{"subpath":"charts/histogram","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/histogram"},{"subpath":"charts/icicle-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/icicle-chart"},{"subpath":"charts/isotype-rows","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/isotype-rows"},{"subpath":"charts/line-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/line-chart"},{"subpath":"charts/lollipop-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/lollipop-chart"},{"subpath":"charts/maps","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/maps"},{"subpath":"charts/parliament-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/parliament-chart"},{"subpath":"charts/pictogram-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/pictogram-chart"},{"subpath":"charts/pie-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/pie-chart"},{"subpath":"charts/polar-area-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/polar-area-chart"},{"subpath":"charts/progress-units","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/progress-units"},{"subpath":"charts/radar-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/radar-chart"},{"subpath":"charts/radial-bar-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/radial-bar-chart"},{"subpath":"charts/raincloud-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/raincloud-chart"},{"subpath":"charts/range-area-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/range-area-chart"},{"subpath":"charts/sankey-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/sankey-chart"},{"subpath":"charts/scatter-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/scatter-chart"},{"subpath":"charts/slope-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/slope-chart"},{"subpath":"charts/sparkline","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/sparkline"},{"subpath":"charts/stock-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/stock-chart"},{"subpath":"charts/stream-graph","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/stream-graph"},{"subpath":"charts/sunburst-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/sunburst-chart"},{"subpath":"charts/timeline-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/timeline-chart"},{"subpath":"charts/tree-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/tree-chart"},{"subpath":"charts/treemap-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/treemap-chart"},{"subpath":"charts/violin-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/violin-chart"},{"subpath":"charts/waffle-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/waffle-chart"},{"subpath":"charts/waterfall-chart","depth":2,"category":"charts","importPath":"@jcsoftdev/ui/charts/waterfall-chart"},{"subpath":"containers","depth":1,"category":"containers","importPath":"@jcsoftdev/ui/containers"},{"subpath":"containers/action-bar","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/action-bar"},{"subpath":"containers/banner","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/banner"},{"subpath":"containers/card","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/card"},{"subpath":"containers/carousel","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/carousel"},{"subpath":"containers/cell","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/cell"},{"subpath":"containers/cols","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/cols"},{"subpath":"containers/comment","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/comment"},{"subpath":"containers/data-grid","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/data-grid"},{"subpath":"containers/description-list","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/description-list"},{"subpath":"containers/facts","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/facts"},{"subpath":"containers/file-tree","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/file-tree"},{"subpath":"containers/generic-row","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/generic-row"},{"subpath":"containers/hbars","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/hbars"},{"subpath":"containers/highlight-line","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/highlight-line"},{"subpath":"containers/item-card-group","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/item-card-group"},{"subpath":"containers/kanban","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/kanban"},{"subpath":"containers/kpi","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/kpi"},{"subpath":"containers/kpi-group","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/kpi-group"},{"subpath":"containers/page-header","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/page-header"},{"subpath":"containers/resizable","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/resizable"},{"subpath":"containers/scrolly","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/scrolly"},{"subpath":"containers/settings-layout","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/settings-layout"},{"subpath":"containers/settings-row","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/settings-row"},{"subpath":"containers/table","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/table"},{"subpath":"containers/timeline","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/timeline"},{"subpath":"containers/toolbar","depth":2,"category":"containers","importPath":"@jcsoftdev/ui/containers/toolbar"},{"subpath":"forms","depth":1,"category":"forms","importPath":"@jcsoftdev/ui/forms"},{"subpath":"forms/accent-picker","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/accent-picker"},{"subpath":"forms/checkbox-button-group","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/checkbox-button-group"},{"subpath":"forms/dropzone","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/dropzone"},{"subpath":"forms/emoji-picker","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/emoji-picker"},{"subpath":"forms/emoji-reaction-button","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/emoji-reaction-button"},{"subpath":"forms/field","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/field"},{"subpath":"forms/form-grid","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/form-grid"},{"subpath":"forms/inline-select","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/inline-select"},{"subpath":"forms/input","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/input"},{"subpath":"forms/input-icon","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/input-icon"},{"subpath":"forms/label","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/label"},{"subpath":"forms/native-select","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/native-select"},{"subpath":"forms/number-stepper","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/number-stepper"},{"subpath":"forms/pin-input","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/pin-input"},{"subpath":"forms/radio-button-group","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/radio-button-group"},{"subpath":"forms/rating","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/rating"},{"subpath":"forms/select","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/select"},{"subpath":"forms/slider","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/slider"},{"subpath":"forms/textarea","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/textarea"},{"subpath":"forms/time-input","depth":2,"category":"forms","importPath":"@jcsoftdev/ui/forms/time-input"},{"subpath":"navigation","depth":1,"category":"navigation","importPath":"@jcsoftdev/ui/navigation"},{"subpath":"navigation/floating-toc","depth":2,"category":"navigation","importPath":"@jcsoftdev/ui/navigation/floating-toc"},{"subpath":"navigation/segmented","depth":2,"category":"navigation","importPath":"@jcsoftdev/ui/navigation/segmented"},{"subpath":"navigation/stepper","depth":2,"category":"navigation","importPath":"@jcsoftdev/ui/navigation/stepper"},{"subpath":"navigation/tabs","depth":2,"category":"navigation","importPath":"@jcsoftdev/ui/navigation/tabs"},{"subpath":"overlays","depth":1,"category":"overlays","importPath":"@jcsoftdev/ui/overlays"},{"subpath":"overlays/context-menu","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/context-menu"},{"subpath":"overlays/dialog","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/dialog"},{"subpath":"overlays/drawer","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/drawer"},{"subpath":"overlays/dropdown-menu","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/dropdown-menu"},{"subpath":"overlays/focus-return","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/focus-return"},{"subpath":"overlays/hover-card","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/hover-card"},{"subpath":"overlays/popover","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/popover"},{"subpath":"overlays/toaster","depth":2,"category":"overlays","importPath":"@jcsoftdev/ui/overlays/toaster"},{"subpath":"palette","depth":1,"category":"palette","importPath":"@jcsoftdev/ui/palette"},{"subpath":"palette/command-palette","depth":2,"category":"palette","importPath":"@jcsoftdev/ui/palette/command-palette"},{"subpath":"rich-text","depth":1,"category":"rich-text","importPath":"@jcsoftdev/ui/rich-text"},{"subpath":"shell","depth":1,"category":"shell","importPath":"@jcsoftdev/ui/shell"},{"subpath":"shell/app-shell","depth":2,"category":"shell","importPath":"@jcsoftdev/ui/shell/app-shell"},{"subpath":"shell/sidebar","depth":2,"category":"shell","importPath":"@jcsoftdev/ui/shell/sidebar"},{"subpath":"shell/topbar","depth":2,"category":"shell","importPath":"@jcsoftdev/ui/shell/topbar"},{"subpath":"states","depth":1,"category":"states","importPath":"@jcsoftdev/ui/states"},{"subpath":"states/empty-state","depth":2,"category":"states","importPath":"@jcsoftdev/ui/states/empty-state"},{"subpath":"states/error-state","depth":2,"category":"states","importPath":"@jcsoftdev/ui/states/error-state"},{"subpath":"states/forbidden-state","depth":2,"category":"states","importPath":"@jcsoftdev/ui/states/forbidden-state"},{"subpath":"states/offline-banner","depth":2,"category":"states","importPath":"@jcsoftdev/ui/states/offline-banner"},{"subpath":"states/skeleton","depth":2,"category":"states","importPath":"@jcsoftdev/ui/states/skeleton"},{"subpath":"utils","depth":1,"category":"utils","importPath":"@jcsoftdev/ui/utils"},{"subpath":"xlsx","depth":1,"category":"xlsx","importPath":"@jcsoftdev/ui/xlsx"}],"categories":[{"id":"ai","title":"AI","count":15},{"id":"atoms","title":"Atoms","count":17},{"id":"brand","title":"Brand","count":2},{"id":"calendar","title":"Calendar","count":5},{"id":"charts","title":"Charts","count":95},{"id":"containers","title":"Containers","count":51},{"id":"forms","title":"Forms","count":21},{"id":"navigation","title":"Navigation","count":8},{"id":"overlays","title":"Overlays","count":39},{"id":"palette","title":"Palette","count":1},{"id":"rich-text","title":"Rich text","count":2},{"id":"shell","title":"Shell","count":3},{"id":"states","title":"States","count":5}],"components":[{"name":"Attachment","slug":"attachment","category":"ai","subpath":"ai","page":"/docs/components/attachment","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/attachment"],"summary":"File chip or preview tile for prompt attachments, with an optional remove button.","declarationFile":"ai/attachment/attachment.tsx","props":[{"name":"name","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"size","type":"string","required":false,"default":null,"description":"Pre-formatted size, e.g. `240 KB`.","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"previewSrc","type":"string","required":false,"default":null,"description":"Image URL (or object URL). Without it a document icon is shown.","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"status","type":"\"done\" | \"uploading\" | \"error\"","required":false,"default":"\"done\"","description":"","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"progress","type":"number","required":false,"default":null,"description":"0-100, only for `uploading`.","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"variant","type":"\"chip\" | \"preview\"","required":false,"default":"\"chip\"","description":"`chip` is one compact line; `preview` is a tile with a larger thumbnail.","deprecated":false,"file":"ai/attachment/attachment.tsx"},{"name":"onRemove","type":"(() => void)","required":false,"default":null,"description":"Shows the remove button.","deprecated":false,"file":"ai/attachment/attachment.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-attachment--default","name":"Default"},{"id":"ai-attachment--uploading","name":"Uploading"},{"id":"ai-attachment--failed","name":"Failed"},{"id":"ai-attachment--preview","name":"Preview"},{"id":"ai-attachment--narrow","name":"Narrow"},{"id":"ai-attachment--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/attachment/attachment.stories.tsx","story":"Default"}},{"name":"ChainOfThought","slug":"chain-of-thought","category":"ai","subpath":"ai","page":"/docs/components/chain-of-thought","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/chain-of-thought"],"summary":"Collapsible list of reasoning steps with a status rail.","declarationFile":"ai/chain-of-thought/chain-of-thought.tsx","props":[{"name":"steps","type":"ThoughtStep[]","required":true,"default":null,"description":"","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"title","type":"string","required":false,"default":"\"Razonamiento\"","description":"Header text; while any step is `active` it shimmers.","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"duration","type":"string","required":false,"default":null,"description":"Pre-formatted total time shown in the header, e.g. `4 s`.","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"open","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"defaultOpen","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"onOpenChange","type":"((open: boolean) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chain-of-thought/chain-of-thought.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-chainofthought--default","name":"Default"},{"id":"ai-chainofthought--thinking","name":"Thinking"},{"id":"ai-chainofthought--collapsed","name":"Collapsed"},{"id":"ai-chainofthought--narrow","name":"Narrow"},{"id":"ai-chainofthought--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/chain-of-thought/chain-of-thought.stories.tsx","story":"Default"}},{"name":"ChatList","slug":"chat-list","category":"ai","subpath":"ai","page":"/docs/components/chat-list","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/chat-list"],"summary":"Sidebar list of conversations grouped by date (Hoy, Ayer, Últimos 7 días…).","declarationFile":"ai/chat-list/chat-list.tsx","props":[{"name":"items","type":"ChatListItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"activeId","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"onSelect","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"onNew","type":"(() => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"onDelete","type":"((id: string) => void)","required":false,"default":null,"description":"Shows a delete button per row.","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"now","type":"string | number | Date","required":false,"default":null,"description":"Reference date for the groups; defaults to the current time. Pass it for stable output.","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"label","type":"string","required":false,"default":"\"Conversaciones\"","description":"Accessible name of the navigation landmark.","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"emptyText","type":"string","required":false,"default":"\"Aún no hay conversaciones.\"","description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chat-list/chat-list.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-chatlist--default","name":"Default"},{"id":"ai-chatlist--interactive","name":"Interactive"},{"id":"ai-chatlist--empty","name":"Empty"},{"id":"ai-chatlist--narrow","name":"Narrow"},{"id":"ai-chatlist--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/chat-list/chat-list.stories.tsx","story":"Default"}},{"name":"ChatMessage","slug":"chat-message","category":"ai","subpath":"ai","page":"/docs/components/chat-message","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/chat-message"],"summary":"One chat turn: avatar, bubble, status, streaming caret and an optional footer slot.","declarationFile":"ai/chat-message/chat-message.tsx","props":[{"name":"author","type":"\"user\" | \"assistant\" | \"system\"","required":true,"default":null,"description":"","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"Display name, also the avatar's accessible name.","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"avatarSrc","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"status","type":"\"done\" | \"error\" | \"sending\" | \"streaming\"","required":false,"default":"\"done\"","description":"`sending` and `streaming` show activity; `error` shows the failure line.","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"time","type":"string","required":false,"default":null,"description":"Time label shown under the bubble (already formatted).","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"content","type":"string","required":false,"default":null,"description":"Markdown text. Assistant messages render it as Markdown; user and system as plain text.","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"children","type":"ReactNode","required":false,"default":null,"description":"Rich body; replaces `content`.","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"footer","type":"ReactNode","required":false,"default":null,"description":"Slot under the bubble (e.g. MessageActions, sources).","deprecated":false,"file":"ai/chat-message/chat-message.tsx"},{"name":"errorText","type":"string","required":false,"default":"\"No se pudo enviar el mensaje.\"","description":"Text of the failure line when `status` is `error`.","deprecated":false,"file":"ai/chat-message/chat-message.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-chatmessage--default","name":"Default"},{"id":"ai-chatmessage--user","name":"User"},{"id":"ai-chatmessage--system","name":"System"},{"id":"ai-chatmessage--streaming","name":"Streaming"},{"id":"ai-chatmessage--waiting","name":"Waiting"},{"id":"ai-chatmessage--failed","name":"Failed"},{"id":"ai-chatmessage--with-actions","name":"With Actions"},{"id":"ai-chatmessage--narrow","name":"Narrow"},{"id":"ai-chatmessage--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/chat-message/chat-message.stories.tsx","story":"Default"}},{"name":"CodeBlock","slug":"code-block","category":"ai","subpath":"ai","page":"/docs/components/code-block","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/code-block"],"summary":"Code with a language label, a copy button and a dependency-free syntax highlighter.","declarationFile":"ai/code-block/code-block.tsx","props":[{"name":"code","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"ai/code-block/code-block.tsx"},{"name":"language","type":"string","required":false,"default":null,"description":"`ts`, `js`, `json`, `bash`, `go` or `sql` (aliases like `typescript` work); anything else is plain.","deprecated":false,"file":"ai/code-block/code-block.tsx"},{"name":"filename","type":"string","required":false,"default":null,"description":"Optional file name shown instead of the language label.","deprecated":false,"file":"ai/code-block/code-block.tsx"},{"name":"wrap","type":"boolean","required":false,"default":null,"description":"Wrap long lines instead of scrolling horizontally.","deprecated":false,"file":"ai/code-block/code-block.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/code-block/code-block.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-codeblock--default","name":"Default"},{"id":"ai-codeblock--narrow","name":"Narrow"},{"id":"ai-codeblock--json","name":"Json"},{"id":"ai-codeblock--bash","name":"Bash"},{"id":"ai-codeblock--go","name":"Go"},{"id":"ai-codeblock--sql","name":"Sql"},{"id":"ai-codeblock--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/code-block/code-block.stories.tsx","story":"Default"}},{"name":"Conversation","slug":"conversation","category":"ai","subpath":"ai","page":"/docs/components/conversation","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/conversation"],"summary":"Scrollable message log that sticks to the bottom while new content streams in. Scrolling up\npauses the follow behavior and reveals a \"jump to latest\" button. Fills its parent's height.","declarationFile":"ai/conversation/conversation.tsx","props":[{"name":"label","type":"string","required":false,"default":"\"Conversación\"","description":"Accessible name of the message log.","deprecated":false,"file":"ai/conversation/conversation.tsx"},{"name":"jumpLabel","type":"string","required":false,"default":"\"Ir al último mensaje\"","description":"Label of the \"jump to latest\" button.","deprecated":false,"file":"ai/conversation/conversation.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-conversation--default","name":"Default"},{"id":"ai-conversation--growing-history","name":"Growing History"},{"id":"ai-conversation--narrow","name":"Narrow"},{"id":"ai-conversation--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/conversation/conversation.stories.tsx","story":"Default"}},{"name":"Loader","slug":"loader","category":"ai","subpath":"ai","page":"/docs/components/loader","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/loader"],"summary":"Animated waiting indicator. With reduced motion the dots stay still.","declarationFile":"ai/loader/loader.tsx","props":[{"name":"variant","type":"\"dots\" | \"typing\"","required":false,"default":"\"dots\"","description":"`dots` is the bare indicator; `typing` wraps it in a bubble with a label.","deprecated":false,"file":"ai/loader/loader.tsx"},{"name":"size","type":"\"sm\" | \"md\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"ai/loader/loader.tsx"},{"name":"label","type":"string","required":false,"default":"\"Escribiendo…\"","description":"Spoken label (`role=\"status\"`); shown as text in the `typing` variant.","deprecated":false,"file":"ai/loader/loader.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/loader/loader.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-loader--default","name":"Default"},{"id":"ai-loader--typing","name":"Typing"},{"id":"ai-loader--narrow","name":"Narrow"},{"id":"ai-loader--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/loader/loader.stories.tsx","story":"Default"}},{"name":"Markdown","slug":"markdown","category":"ai","subpath":"ai","page":"/docs/components/markdown","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/markdown"],"summary":"Safe Markdown renderer: headings, lists, emphasis, inline code, code fences, quotes, tables\nand links. It builds React elements from a parsed AST, so no input ever reaches innerHTML.","declarationFile":"ai/markdown/markdown.tsx","props":[{"name":"children","type":"string","required":true,"default":null,"description":"Markdown source. Raw HTML is shown as text; only http, https and mailto links are active.","deprecated":false,"file":"ai/markdown/markdown.tsx"},{"name":"streaming","type":"boolean","required":false,"default":null,"description":"Shows a blinking caret after the last character, for streaming answers.","deprecated":false,"file":"ai/markdown/markdown.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/markdown/markdown.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-markdown--default","name":"Default"},{"id":"ai-markdown--narrow","name":"Narrow"},{"id":"ai-markdown--streaming","name":"Streaming"},{"id":"ai-markdown--safe-by-default","name":"Safe By Default"},{"id":"ai-markdown--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/markdown/markdown.stories.tsx","story":"Default"}},{"name":"MessageActions","slug":"message-actions","category":"ai","subpath":"ai","page":"/docs/components/message-actions","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/message-actions"],"summary":"Copy, regenerate, like and dislike for an assistant message. Feedback toggles off on re-press.","declarationFile":"ai/message-actions/message-actions.tsx","props":[{"name":"text","type":"string","required":true,"default":null,"description":"Text copied by the copy button.","deprecated":false,"file":"ai/message-actions/message-actions.tsx"},{"name":"onCopy","type":"((text: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/message-actions/message-actions.tsx"},{"name":"onRegenerate","type":"(() => void)","required":false,"default":null,"description":"Omit to hide the regenerate button.","deprecated":false,"file":"ai/message-actions/message-actions.tsx"},{"name":"onFeedback","type":"((value: MessageFeedback) => void)","required":false,"default":null,"description":"Omit to hide the like/dislike buttons.","deprecated":false,"file":"ai/message-actions/message-actions.tsx"},{"name":"feedback","type":"null | \"like\" | \"dislike\"","required":false,"default":null,"description":"","deprecated":false,"file":"ai/message-actions/message-actions.tsx"},{"name":"defaultFeedback","type":"null | \"like\" | \"dislike\"","required":false,"default":"null","description":"","deprecated":false,"file":"ai/message-actions/message-actions.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-messageactions--default","name":"Default"},{"id":"ai-messageactions--liked","name":"Liked"},{"id":"ai-messageactions--copy-only","name":"Copy Only"},{"id":"ai-messageactions--narrow","name":"Narrow"},{"id":"ai-messageactions--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/message-actions/message-actions.stories.tsx","story":"Default"}},{"name":"PromptInput","slug":"prompt-input","category":"ai","subpath":"ai","page":"/docs/components/prompt-input","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/prompt-input"],"summary":"Composer: autosizing textarea, Enter to send, Shift+Enter for a new line, attachments slot\nand a stop button while a response streams.","declarationFile":"ai/prompt-input/prompt-input.tsx","props":[{"name":"value","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"defaultValue","type":"string","required":false,"default":"\"\"","description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"onValueChange","type":"((value: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"onSubmit","type":"((value: string) => void)","required":false,"default":null,"description":"Called with the trimmed text on Enter or send. Never called when empty.","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"streaming","type":"boolean","required":false,"default":null,"description":"While true the send button becomes a stop button.","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"onStop","type":"(() => void)","required":false,"default":null,"description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"placeholder","type":"string","required":false,"default":"\"Escribe un mensaje…\"","description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"label","type":"string","required":false,"default":"\"Mensaje\"","description":"Accessible name of the textarea.","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"maxRows","type":"number","required":false,"default":"6","description":"Rows after which the textarea scrolls instead of growing.","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"attachments","type":"ReactNode","required":false,"default":null,"description":"Row above the text (Attachment chips).","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"actions","type":"ReactNode","required":false,"default":null,"description":"Left of the send button (attach button, model picker…).","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"hint","type":"ReactNode","required":false,"default":null,"description":"Hint line under the field.","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/prompt-input/prompt-input.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-promptinput--default","name":"Default"},{"id":"ai-promptinput--with-attachments","name":"With Attachments"},{"id":"ai-promptinput--streaming","name":"Streaming"},{"id":"ai-promptinput--echo","name":"Echo"},{"id":"ai-promptinput--narrow","name":"Narrow"},{"id":"ai-promptinput--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/prompt-input/prompt-input.stories.tsx","story":"Default"}},{"name":"PromptSuggestion","slug":"prompt-suggestion","category":"ai","subpath":"ai","page":"/docs/components/prompt-suggestion","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/prompt-suggestion"],"summary":"Chip with a suggested prompt. Pressing it hands the text to `onSelect`.","declarationFile":"ai/prompt-suggestion/prompt-suggestion.tsx","props":[{"name":"onSelect","type":"((text: string) => void)","required":false,"default":null,"description":"Receives the suggestion text when pressed (the visible label is the text).","deprecated":false,"file":"ai/prompt-suggestion/prompt-suggestion.tsx"},{"name":"children","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"ai/prompt-suggestion/prompt-suggestion.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-promptsuggestion--default","name":"Default"},{"id":"ai-promptsuggestion--list","name":"List"},{"id":"ai-promptsuggestion--narrow","name":"Narrow"},{"id":"ai-promptsuggestion--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/prompt-suggestion/prompt-suggestion.stories.tsx","story":"Default"}},{"name":"PromptSuggestionList","slug":"prompt-suggestion-list","category":"ai","subpath":"ai","page":"/docs/components/prompt-suggestion-list","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/prompt-suggestion"],"summary":"Wrapping group of suggestion chips.","declarationFile":"ai/prompt-suggestion/prompt-suggestion.tsx","props":[{"name":"label","type":"string","required":false,"default":"\"Sugerencias\"","description":"","deprecated":false,"file":"ai/prompt-suggestion/prompt-suggestion.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-promptsuggestion--default","name":"Default"},{"id":"ai-promptsuggestion--list","name":"List"},{"id":"ai-promptsuggestion--narrow","name":"Narrow"},{"id":"ai-promptsuggestion--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/prompt-suggestion/prompt-suggestion.stories.tsx","story":"Default"}},{"name":"Source","slug":"source","category":"ai","subpath":"ai","page":"/docs/components/source","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/source"],"summary":"Citation chip with a hover/focus preview of the source (title, host and excerpt).","declarationFile":"ai/source/source.tsx","props":[{"name":"index","type":"number","required":false,"default":null,"description":"Citation number shown in the chip.","deprecated":false,"file":"ai/source/source.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"ai/source/source.tsx"},{"name":"url","type":"string","required":true,"default":null,"description":"Only http(s) and mailto URLs are linked; anything else renders a non-clickable chip.","deprecated":false,"file":"ai/source/source.tsx"},{"name":"snippet","type":"string","required":false,"default":null,"description":"Short excerpt shown in the hover preview.","deprecated":false,"file":"ai/source/source.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"ai-source--default","name":"Default"},{"id":"ai-source--group","name":"Group"},{"id":"ai-source--narrow","name":"Narrow"},{"id":"ai-source--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/source/source.stories.tsx","story":"Default"}},{"name":"TextShimmer","slug":"text-shimmer","category":"ai","subpath":"ai","page":"/docs/components/text-shimmer","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/text-shimmer"],"summary":"Text with a light sweep, used for \"thinking…\" labels. Static with reduced motion.","declarationFile":"ai/text-shimmer/text-shimmer.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"ai/text-shimmer/text-shimmer.tsx"},{"name":"as","type":"ElementType","required":false,"default":"\"span\"","description":"Element to render.","deprecated":false,"file":"ai/text-shimmer/text-shimmer.tsx"},{"name":"duration","type":"number","required":false,"default":"2","description":"Seconds for one sweep.","deprecated":false,"file":"ai/text-shimmer/text-shimmer.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/text-shimmer/text-shimmer.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-textshimmer--default","name":"Default"},{"id":"ai-textshimmer--narrow","name":"Narrow"},{"id":"ai-textshimmer--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/text-shimmer/text-shimmer.stories.tsx","story":"Default"}},{"name":"ToolCall","slug":"tool-call","category":"ai","subpath":"ai","page":"/docs/components/tool-call","importPath":"@jcsoftdev/ui/ai","singleEntries":["@jcsoftdev/ui/ai/tool-call"],"summary":"Collapsible tool invocation with status, JSON arguments and JSON result.","declarationFile":"ai/tool-call/tool-call.tsx","props":[{"name":"name","type":"string","required":true,"default":null,"description":"Tool identifier, e.g. `buscar_turnos`.","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"status","type":"\"done\" | \"error\" | \"pending\" | \"running\"","required":false,"default":"\"pending\"","description":"","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"args","type":"unknown","required":false,"default":null,"description":"Arguments sent to the tool; shown as formatted JSON.","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"result","type":"unknown","required":false,"default":null,"description":"Result returned by the tool; shown as formatted JSON.","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"error","type":"string","required":false,"default":null,"description":"Error text when `status` is `error`.","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"duration","type":"string","required":false,"default":null,"description":"Pre-formatted duration, e.g. `1,2 s`.","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"defaultOpen","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"ai/tool-call/tool-call.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"ai/tool-call/tool-call.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"ai-toolcall--default","name":"Default"},{"id":"ai-toolcall--running","name":"Running"},{"id":"ai-toolcall--failed","name":"Failed"},{"id":"ai-toolcall--narrow","name":"Narrow"},{"id":"ai-toolcall--preset-brutal","name":"Preset Brutal"}],"example":{"file":"ai/tool-call/tool-call.stories.tsx","story":"Default"}},{"name":"Avatar","slug":"avatar","category":"atoms","subpath":"atoms","page":"/docs/components/avatar","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/avatar"],"summary":"","declarationFile":"atoms/avatar/avatar.tsx","props":[{"name":"name","type":"string","required":true,"default":null,"description":"Full name: used for the initials fallback and as the accessible name.","deprecated":false,"file":"atoms/avatar/avatar.tsx"},{"name":"src","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/avatar/avatar.tsx"},{"name":"size","type":"\"md\" | \"lg\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"atoms/avatar/avatar.tsx"},{"name":"highlighted","type":"boolean","required":false,"default":null,"description":"Fills the avatar with the accent color (e.g. the current user).","deprecated":false,"file":"atoms/avatar/avatar.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/avatar/avatar.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-avatar--default","name":"Default"},{"id":"atoms-avatar--large","name":"Large"},{"id":"atoms-avatar--highlighted","name":"Highlighted"},{"id":"atoms-avatar--single-name","name":"Single Name"},{"id":"atoms-avatar--team","name":"Team"}],"example":{"file":"atoms/avatar/avatar.stories.tsx","story":"Default"}},{"name":"AvatarGroup","slug":"avatar-group","category":"atoms","subpath":"atoms","page":"/docs/components/avatar-group","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/avatar-group"],"summary":"Stacked, overlapping avatars separated by a surface-colored ring.","declarationFile":"atoms/avatar-group/avatar-group.tsx","props":[{"name":"children","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/avatar-group/avatar-group.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/avatar-group/avatar-group.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-avatargroup--default","name":"Default"},{"id":"atoms-avatargroup--large","name":"Large"},{"id":"atoms-avatargroup--single","name":"Single"}],"example":{"file":"atoms/avatar-group/avatar-group.stories.tsx","story":"Default"}},{"name":"BigDate","slug":"big-date","category":"atoms","subpath":"atoms","page":"/docs/components/big-date","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/big-date"],"summary":"Prominent date or number, typically at the top of a card.","declarationFile":"atoms/big-date/big-date.tsx","props":[{"name":"size","type":"\"normal\" | \"compact\"","required":false,"default":"\"normal\"","description":"","deprecated":false,"file":"atoms/big-date/big-date.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-bigdate--default","name":"Default"},{"id":"atoms-bigdate--compact","name":"Compact"},{"id":"atoms-bigdate--as-amount","name":"As Amount"},{"id":"atoms-bigdate--in-card","name":"In Card"}],"example":{"file":"atoms/big-date/big-date.stories.tsx","story":"Default"}},{"name":"Button","slug":"button","category":"atoms","subpath":"atoms","page":"/docs/components/button","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/button"],"summary":"","declarationFile":"atoms/button/button.tsx","props":[{"name":"variant","type":"\"primary\" | \"secondary\" | \"ghost\" | \"danger\"","required":false,"default":"\"secondary\"","description":"","deprecated":false,"file":"atoms/button/button.tsx"},{"name":"size","type":"\"sm\" | \"md\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"atoms/button/button.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/button/button.tsx"},{"name":"asChild","type":"boolean","required":false,"default":null,"description":"Render the child element (via Radix Slot) instead of a `<button>`, e.g. a link.","deprecated":false,"file":"atoms/button/button.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-button--default","name":"Default"},{"id":"atoms-button--secondary","name":"Secondary"},{"id":"atoms-button--ghost","name":"Ghost"},{"id":"atoms-button--danger","name":"Danger"},{"id":"atoms-button--small","name":"Small"},{"id":"atoms-button--loading","name":"Loading"},{"id":"atoms-button--disabled","name":"Disabled"},{"id":"atoms-button--with-icon","name":"With Icon"},{"id":"atoms-button--as-link","name":"As Link"},{"id":"atoms-button--long-label","name":"Long Label"}],"example":{"file":"atoms/button/button.stories.tsx","story":"Default"}},{"name":"Checkbox","slug":"checkbox","category":"atoms","subpath":"atoms","page":"/docs/components/checkbox","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/checkbox"],"summary":"","declarationFile":"atoms/checkbox/checkbox.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-checkbox--default","name":"Default"},{"id":"atoms-checkbox--checked","name":"Checked"},{"id":"atoms-checkbox--disabled","name":"Disabled"},{"id":"atoms-checkbox--disabled-checked","name":"Disabled Checked"},{"id":"atoms-checkbox--controlled-checklist","name":"Controlled Checklist"}],"example":{"file":"atoms/checkbox/checkbox.stories.tsx","story":"Default"}},{"name":"Chip","slug":"chip","category":"atoms","subpath":"atoms","page":"/docs/components/chip","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/chip"],"summary":"","declarationFile":"atoms/chip/chip.tsx","props":[{"name":"tone","type":"\"danger\" | \"neutral\" | \"warning\" | \"success\" | \"accent\" | \"solid\" | \"outline\"","required":false,"default":"\"neutral\"","description":"","deprecated":false,"file":"atoms/chip/chip.tsx"},{"name":"square","type":"boolean","required":false,"default":null,"description":"Use the smaller chip radius instead of a full pill.","deprecated":false,"file":"atoms/chip/chip.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-chip--default","name":"Default"},{"id":"atoms-chip--square","name":"Square"},{"id":"atoms-chip--with-icon","name":"With Icon"},{"id":"atoms-chip--all-tones","name":"All Tones"},{"id":"atoms-chip--all-tones-square","name":"All Tones Square"}],"example":{"file":"atoms/chip/chip.stories.tsx","story":"Default"}},{"name":"Icon","slug":"icon","category":"atoms","subpath":"atoms","page":"/docs/components/icon","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/icon"],"summary":"","declarationFile":"atoms/icon/icon.tsx","props":[{"name":"name","type":"\"menu\" | \"search\" | \"video\" | \"download\" | \"alert\" | \"grid\" | \"list\" | \"calendar\" | \"folder\" | \"users\" | \"pen\" | \"file\" | \"coin\" | \"shield\" | \"calculator\" | \"sync\" | \"sliders\" | \"bell\" | \"plus\" | \"chevron-down\" | \"chevron-left\" | \"chevron-right\" | \"check\" | \"close\" | \"clock\" | \"sparkles\" | \"camera\" | \"lock\" | \"upload\" | \"columns\" | \"copy\" | \"arrow\" | \"message\" | \"tasks\" | \"chart\" | \"book\" | \"external\"","required":false,"default":null,"description":"Registry name; ignored when `icon` is provided.","deprecated":false,"file":"atoms/icon/icon.tsx"},{"name":"icon","type":"LucideIcon","required":false,"default":null,"description":"Any lucide icon component.","deprecated":false,"file":"atoms/icon/icon.tsx"},{"name":"label","type":"string","required":false,"default":null,"description":"Accessible label. Without it the icon is decorative (aria-hidden).","deprecated":false,"file":"atoms/icon/icon.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/icon/icon.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-icon--default","name":"Default"},{"id":"atoms-icon--with-label","name":"With Label"},{"id":"atoms-icon--custom-lucide-icon","name":"Custom Lucide Icon"},{"id":"atoms-icon--registry","name":"Registry"}],"example":{"file":"atoms/icon/icon.stories.tsx","story":"Default"}},{"name":"Led","slug":"led","category":"atoms","subpath":"atoms","page":"/docs/components/led","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/led"],"summary":"","declarationFile":"atoms/led/led.tsx","props":[{"name":"status","type":"\"danger\" | \"warning\" | \"success\" | \"idle\"","required":false,"default":"\"success\"","description":"","deprecated":false,"file":"atoms/led/led.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Text describing the status: color is never the only signal.","deprecated":false,"file":"atoms/led/led.tsx"},{"name":"showLabel","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/led/led.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/led/led.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-led--default","name":"Default"},{"id":"atoms-led--warning","name":"Warning"},{"id":"atoms-led--danger","name":"Danger"},{"id":"atoms-led--idle","name":"Idle"},{"id":"atoms-led--label-hidden","name":"Label Hidden"},{"id":"atoms-led--all-statuses","name":"All Statuses"}],"example":{"file":"atoms/led/led.stories.tsx","story":"Default"}},{"name":"Meter","slug":"meter","category":"atoms","subpath":"atoms","page":"/docs/components/meter","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/progress"],"summary":"Thinner progress bar.","declarationFile":"atoms/progress/progress.tsx","props":[{"name":"value","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/progress/progress.tsx"},{"name":"max","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/progress/progress.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-progress--default","name":"Default"},{"id":"atoms-progress--empty","name":"Empty"},{"id":"atoms-progress--complete","name":"Complete"},{"id":"atoms-progress--custom-max","name":"Custom Max"},{"id":"atoms-progress--thin-meter","name":"Thin Meter"},{"id":"atoms-progress--comparison","name":"Comparison"}],"example":{"file":"atoms/progress/progress.stories.tsx","story":"Default"}},{"name":"NumberValue","slug":"number-value","category":"atoms","subpath":"atoms","page":"/docs/components/number-value","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/number-value"],"summary":"Number that counts up to `value`, formatted with Intl. Assistive tech reads the final\nvalue at once; the animated text is hidden from it so it is not announced digit by digit.","declarationFile":"atoms/number-value/number-value.tsx","props":[{"name":"value","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/number-value/number-value.tsx"},{"name":"format","type":"NumberFormatConfig","required":false,"default":null,"description":"Intl options plus `locale`, e.g. `{ style: \"currency\", currency: \"PEN\" }`.","deprecated":false,"file":"atoms/number-value/number-value.tsx"},{"name":"duration","type":"number","required":false,"default":"900","description":"Animation length in ms. No animation under `prefers-reduced-motion`.","deprecated":false,"file":"atoms/number-value/number-value.tsx"},{"name":"from","type":"number","required":false,"default":"0","description":"Count up from this value on first render.","deprecated":false,"file":"atoms/number-value/number-value.tsx"},{"name":"animateOnMount","type":"boolean","required":false,"default":"true","description":"When false, only later changes of `value` animate.","deprecated":false,"file":"atoms/number-value/number-value.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-numbervalue--default","name":"Default"},{"id":"atoms-numbervalue--percent","name":"Percent"},{"id":"atoms-numbervalue--compact","name":"Compact"},{"id":"atoms-numbervalue--updating","name":"Updating"},{"id":"atoms-numbervalue--narrow","name":"Narrow"},{"id":"atoms-numbervalue--brutal-preset","name":"Brutal Preset"}],"example":{"file":"atoms/number-value/number-value.stories.tsx","story":"Default"}},{"name":"PressableFeedback","slug":"pressable-feedback","category":"atoms","subpath":"atoms","page":"/docs/components/pressable-feedback","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/pressable-feedback"],"summary":"Wraps any content with press feedback: a ripple from the pointer and a small scale-down. Both\nare skipped under `prefers-reduced-motion`. It adds no semantics, so put it around (or let it\ncontain) the real button or link.","declarationFile":"atoms/pressable-feedback/pressable-feedback.tsx","props":[{"name":"ripple","type":"boolean","required":false,"default":"true","description":"Draws an expanding ripple from the pointer position.","deprecated":false,"file":"atoms/pressable-feedback/pressable-feedback.tsx"},{"name":"scale","type":"boolean","required":false,"default":"true","description":"Scales the content down while pressed (uses the preset's `--press-scale`).","deprecated":false,"file":"atoms/pressable-feedback/pressable-feedback.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/pressable-feedback/pressable-feedback.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-pressablefeedback--default","name":"Default"},{"id":"atoms-pressablefeedback--ripple-only","name":"Ripple Only"},{"id":"atoms-pressablefeedback--disabled","name":"Disabled"},{"id":"atoms-pressablefeedback--narrow","name":"Narrow"},{"id":"atoms-pressablefeedback--brutal-preset","name":"Brutal Preset"}],"example":{"file":"atoms/pressable-feedback/pressable-feedback.stories.tsx","story":"Default"}},{"name":"Progress","slug":"progress","category":"atoms","subpath":"atoms","page":"/docs/components/progress","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/progress"],"summary":"","declarationFile":"atoms/progress/progress.tsx","props":[{"name":"value","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/progress/progress.tsx"},{"name":"max","type":"number","required":false,"default":"100","description":"","deprecated":false,"file":"atoms/progress/progress.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-progress--default","name":"Default"},{"id":"atoms-progress--empty","name":"Empty"},{"id":"atoms-progress--complete","name":"Complete"},{"id":"atoms-progress--custom-max","name":"Custom Max"},{"id":"atoms-progress--thin-meter","name":"Thin Meter"},{"id":"atoms-progress--comparison","name":"Comparison"}],"example":{"file":"atoms/progress/progress.stories.tsx","story":"Default"}},{"name":"RadioGroup","slug":"radio-group","category":"atoms","subpath":"atoms","page":"/docs/components/radio-group","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/radio-group"],"summary":"","declarationFile":"atoms/radio-group/radio-group.tsx","props":[{"name":"options","type":"RadioOption[]","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/radio-group/radio-group.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-radiogroup--default","name":"Default"},{"id":"atoms-radiogroup--without-descriptions","name":"Without Descriptions"},{"id":"atoms-radiogroup--disabled","name":"Disabled"},{"id":"atoms-radiogroup--controlled","name":"Controlled"}],"example":{"file":"atoms/radio-group/radio-group.stories.tsx","story":"Default"}},{"name":"StatusDot","slug":"status-dot","category":"atoms","subpath":"atoms","page":"/docs/components/status-dot","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/status-dot"],"summary":"","declarationFile":"atoms/status-dot/status-dot.tsx","props":[{"name":"tone","type":"\"danger\" | \"neutral\" | \"warning\" | \"success\" | \"accent\"","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Text describing the status: color is never the only signal.","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"},{"name":"showLabel","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"},{"name":"shape","type":"\"dot\" | \"square\"","required":false,"default":"\"dot\"","description":"","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"},{"name":"hollow","type":"boolean","required":false,"default":null,"description":"Hollow variant: transparent fill with an accent inner ring.","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/status-dot/status-dot.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-statusdot--default","name":"Default"},{"id":"atoms-statusdot--square","name":"Square"},{"id":"atoms-statusdot--hollow","name":"Hollow"},{"id":"atoms-statusdot--label-hidden","name":"Label Hidden"},{"id":"atoms-statusdot--all-tones","name":"All Tones"}],"example":{"file":"atoms/status-dot/status-dot.stories.tsx","story":"Default"}},{"name":"StatusPill","slug":"status-pill","category":"atoms","subpath":"atoms","page":"/docs/components/status-pill","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/status-pill"],"summary":"Pill showing a status LED and its label; the label is hidden when the surrounding container (e.g. the topbar) is narrow.","declarationFile":"atoms/status-pill/status-pill.tsx","props":[{"name":"status","type":"\"danger\" | \"warning\" | \"success\" | \"idle\"","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/status-pill/status-pill.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"atoms/status-pill/status-pill.tsx"},{"name":"onSelect","type":"(() => void)","required":false,"default":null,"description":"Without this the pill is decorative (disabled).","deprecated":false,"file":"atoms/status-pill/status-pill.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/status-pill/status-pill.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"atoms-statuspill--default","name":"Default"},{"id":"atoms-statuspill--warning","name":"Warning"},{"id":"atoms-statuspill--danger","name":"Danger"},{"id":"atoms-statuspill--idle","name":"Idle"},{"id":"atoms-statuspill--decorative","name":"Decorative"}],"example":{"file":"atoms/status-pill/status-pill.stories.tsx","story":"Default"}},{"name":"Switch","slug":"switch","category":"atoms","subpath":"atoms","page":"/docs/components/switch","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/switch"],"summary":"","declarationFile":"atoms/switch/switch.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-switch--default","name":"Default"},{"id":"atoms-switch--on","name":"On"},{"id":"atoms-switch--disabled","name":"Disabled"},{"id":"atoms-switch--disabled-on","name":"Disabled On"},{"id":"atoms-switch--controlled","name":"Controlled"}],"example":{"file":"atoms/switch/switch.stories.tsx","story":"Default"}},{"name":"TrendChip","slug":"trend-chip","category":"atoms","subpath":"atoms","page":"/docs/components/trend-chip","importPath":"@jcsoftdev/ui/atoms","singleEntries":["@jcsoftdev/ui/atoms/trend-chip"],"summary":"Compact change indicator: arrow, signed percent and a good/bad tone, never color alone.","declarationFile":"atoms/trend-chip/trend-chip.tsx","props":[{"name":"value","type":"number","required":true,"default":null,"description":"Change in percent, e.g. 12.5 for +12.5%.","deprecated":false,"file":"atoms/trend-chip/trend-chip.tsx"},{"name":"invert","type":"boolean","required":false,"default":"false","description":"Lower is better (cancelaciones, mermas): a drop reads as favorable.","deprecated":false,"file":"atoms/trend-chip/trend-chip.tsx"},{"name":"epsilon","type":"number","required":false,"default":"0","description":"Changes whose absolute value is within this stay \"flat\".","deprecated":false,"file":"atoms/trend-chip/trend-chip.tsx"},{"name":"label","type":"string","required":false,"default":null,"description":"Text after the number, e.g. \"vs. semana pasada\".","deprecated":false,"file":"atoms/trend-chip/trend-chip.tsx"},{"name":"locale","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"atoms/trend-chip/trend-chip.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"atoms-trendchip--default","name":"Default"},{"id":"atoms-trendchip--down","name":"Down"},{"id":"atoms-trendchip--flat","name":"Flat"},{"id":"atoms-trendchip--lower-is-better","name":"Lower Is Better"},{"id":"atoms-trendchip--narrow","name":"Narrow"},{"id":"atoms-trendchip--brutal-preset","name":"Brutal Preset"}],"example":{"file":"atoms/trend-chip/trend-chip.stories.tsx","story":"Default"}},{"name":"LogoForge","slug":"logo-forge","category":"brand","subpath":"brand","page":"/docs/components/logo-forge","importPath":"@jcsoftdev/ui/brand","singleEntries":[],"summary":"Interactive brand-mark editor: pick a shape, monogram, palette and layout, browse twelve\nseeded variations, then download SVG or PNG or copy the SVG source. The chrome follows\n`data-style` and the active theme; the marks keep their own palettes.","declarationFile":"brand/logo-forge.tsx","props":[{"name":"defaultValue","type":"Partial<LogoForgeValue>","required":false,"default":null,"description":"","deprecated":false,"file":"brand/logo-forge.tsx"},{"name":"onChange","type":"((options: MarkOptions) => void)","required":false,"default":null,"description":"Called with the generator options each time the editor changes.","deprecated":false,"file":"brand/logo-forge.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"brand/logo-forge.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"foundations-logoforge--default","name":"Default"},{"id":"foundations-logoforge--narrow","name":"Narrow"},{"id":"foundations-logoforge--brutal-preset","name":"Brutal Preset"},{"id":"foundations-logoforge--barberia-don-lucho","name":"Barbería Don Lucho"}],"example":{"file":"brand/logo-forge.stories.tsx","story":"Default"}},{"name":"LogoMark","slug":"logo-mark","category":"brand","subpath":"brand","page":"/docs/components/logo-mark","importPath":"@jcsoftdev/ui/brand","singleEntries":[],"summary":"Renders a generated brand mark as an inline `<svg role=\"img\">`.","declarationFile":"brand/logo-mark.tsx","props":[{"name":"size","type":"string | number","required":false,"default":"\"100%\"","description":"CSS width of the mark; the height follows the aspect ratio. Defaults to the full container.","deprecated":false,"file":"brand/logo-mark.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"brand/logo-mark.tsx"},{"name":"name","type":"string","required":true,"default":null,"description":"Business name: drives the wordmark and the initials.","deprecated":false,"file":"brand/generate.ts"},{"name":"tagline","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"initials","type":"string","required":false,"default":null,"description":"Overrides the initials taken from `name`.","deprecated":false,"file":"brand/generate.ts"},{"name":"shape","type":"\"circle\" | \"none\" | \"shield\" | \"squircle\" | \"hexagon\" | \"badge\" | \"ribbon\"","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"monogram","type":"\"initials\" | \"glyph\"","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"glyph","type":"\"scissors\" | \"comb\" | \"razor\" | \"pole\" | \"star\" | \"leaf\" | \"bolt\" | \"crown\" | \"mustache\"","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"initialsCount","type":"1 | 3 | 2","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"palette","type":"string | BrandPalette","required":false,"default":null,"description":"A palette id from `BRAND_PALETTES` or a custom palette.","deprecated":false,"file":"brand/generate.ts"},{"name":"layout","type":"\"icon\" | \"horizontal\" | \"stacked\"","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"fill","type":"\"solid\" | \"outline\" | \"gradient\"","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"seed","type":"number","required":false,"default":null,"description":"0 is the canonical look; other values deterministically vary angle, tilt, ring and color order.","deprecated":false,"file":"brand/generate.ts"},{"name":"ring","type":"boolean","required":false,"default":null,"description":"Inner ring; left undefined it follows the seed.","deprecated":false,"file":"brand/generate.ts"},{"name":"wordmark","type":"WordmarkStyle","required":false,"default":null,"description":"","deprecated":false,"file":"brand/generate.ts"},{"name":"background","type":"string","required":false,"default":null,"description":"Paints a padded background rectangle behind the mark.","deprecated":false,"file":"brand/generate.ts"},{"name":"wordmarkColor","type":"string","required":false,"default":null,"description":"Overrides the wordmark color (use a light one over a dark background).","deprecated":false,"file":"brand/generate.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"foundations-logomark--default","name":"Default"},{"id":"foundations-logomark--stacked","name":"Stacked"},{"id":"foundations-logomark--initials","name":"Initials"},{"id":"foundations-logomark--narrow","name":"Narrow"},{"id":"foundations-logomark--gallery","name":"Gallery"}],"example":{"file":"brand/logo-mark.stories.tsx","story":"Default"}},{"name":"DayChip","slug":"day-chip","category":"calendar","subpath":"calendar","page":"/docs/components/day-chip","importPath":"@jcsoftdev/ui/calendar","singleEntries":["@jcsoftdev/ui/calendar/day-chip"],"summary":"Compact single-line chip for a day marker.","declarationFile":"calendar/day-chip/day-chip.tsx","props":[{"name":"marker","type":"CalendarMarker","required":true,"default":null,"description":"","deprecated":false,"file":"calendar/day-chip/day-chip.tsx"},{"name":"onOpen","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/day-chip/day-chip.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/day-chip/day-chip.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"calendar-daychip--default","name":"Default"},{"id":"calendar-daychip--accent","name":"Accent"},{"id":"calendar-daychip--without-subtitle","name":"Without Subtitle"},{"id":"calendar-daychip--truncated","name":"Truncated"}],"example":{"file":"calendar/day-chip/day-chip.stories.tsx","story":"Default"}},{"name":"EventBlock","slug":"event-block","category":"calendar","subpath":"calendar","page":"/docs/components/event-block","importPath":"@jcsoftdev/ui/calendar","singleEntries":["@jcsoftdev/ui/calendar/event-block"],"summary":"","declarationFile":"calendar/event-block/event-block.tsx","props":[{"name":"event","type":"CalendarEvent","required":true,"default":null,"description":"","deprecated":false,"file":"calendar/event-block/event-block.tsx"},{"name":"variant","type":"\"compact\" | \"detailed\"","required":false,"default":"\"detailed\"","description":"\"detailed\": time range, title and subtitle. \"compact\": one \"time title\" line.","deprecated":false,"file":"calendar/event-block/event-block.tsx"},{"name":"onOpen","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/event-block/event-block.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/event-block/event-block.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"calendar-eventblock--default","name":"Default"},{"id":"calendar-eventblock--compact","name":"Compact"},{"id":"calendar-eventblock--with-trailing-avatar","name":"With Trailing Avatar"},{"id":"calendar-eventblock--no-end-time","name":"No End Time"},{"id":"calendar-eventblock--tones","name":"Tones"},{"id":"calendar-eventblock--compact-tones","name":"Compact Tones"},{"id":"calendar-eventblock--narrow","name":"Narrow"}],"example":{"file":"calendar/event-block/event-block.stories.tsx","story":"Default"}},{"name":"MonthView","slug":"month-view","category":"calendar","subpath":"calendar","page":"/docs/components/month-view","importPath":"@jcsoftdev/ui/calendar","singleEntries":["@jcsoftdev/ui/calendar/month-view"],"summary":"","declarationFile":"calendar/month-view/month-view.tsx","props":[{"name":"month","type":"string","required":true,"default":null,"description":"Any \"YYYY-MM-DD\" date inside the month to show.","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"today","type":"string","required":true,"default":null,"description":"\"YYYY-MM-DD\" date highlighted as today; the view never computes it.","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"events","type":"CalendarEvent[]","required":true,"default":null,"description":"","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"markers","type":"CalendarMarker[]","required":false,"default":"[]","description":"","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"shadedDates","type":"string[]","required":false,"default":"[]","description":"Dates (\"YYYY-MM-DD\") rendered with a hatch pattern (non-working days).","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"locale","type":"string","required":false,"default":null,"description":"BCP 47 locale for weekday labels. Defaults to the runtime locale.","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"weekStartsOn","type":"0 | 1 | 4 | 3 | 2 | 5 | 6","required":false,"default":"1","description":"First day of the week, 0 (Sunday) to 6 (Saturday). Defaults to 1 (Monday).","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"formatMore","type":"(count: number) => string","required":true,"default":null,"description":"Label for the overflow button, e.g. `(n) => \\`+${n} more\\``.","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"onOpenEvent","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"onOpenMarker","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"onSelectDate","type":"((date: string) => void)","required":false,"default":null,"description":"Called with the day's date when the overflow button is clicked.","deprecated":false,"file":"calendar/month-view/month-view.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/month-view/month-view.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"calendar-monthview--default","name":"Default"},{"id":"calendar-monthview--sunday-start","name":"Sunday Start"},{"id":"calendar-monthview--empty","name":"Empty"},{"id":"calendar-monthview--next-month","name":"Next Month"},{"id":"calendar-monthview--narrow","name":"Narrow"}],"example":{"file":"calendar/month-view/month-view.stories.tsx","story":"Default"}},{"name":"TimelineView","slug":"timeline-view","category":"calendar","subpath":"calendar","page":"/docs/components/timeline-view","importPath":"@jcsoftdev/ui/calendar","singleEntries":["@jcsoftdev/ui/calendar/timeline-view"],"summary":"","declarationFile":"calendar/timeline-view/timeline-view.tsx","props":[{"name":"today","type":"string","required":true,"default":null,"description":"\"YYYY-MM-DD\" date highlighted as today; the view never computes it.","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"events","type":"CalendarEvent[]","required":true,"default":null,"description":"","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"markers","type":"CalendarMarker[]","required":false,"default":"[]","description":"","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"hiddenDates","type":"string[]","required":false,"default":"[]","description":"Dates (\"YYYY-MM-DD\") hidden from the timeline unless they are today.","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"locale","type":"string","required":false,"default":null,"description":"BCP 47 locale for date labels. Defaults to the runtime locale.","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"todayLabel","type":"string","required":true,"default":null,"description":"Suffix marking today's group, e.g. \"today\".","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"emptyLabel","type":"string","required":true,"default":null,"description":"Text shown for a day without events or markers.","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"onOpenEvent","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"onOpenMarker","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/timeline-view/timeline-view.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"calendar-timelineview--default","name":"Default"},{"id":"calendar-timelineview--empty-today","name":"Empty Today"},{"id":"calendar-timelineview--hidden-dates","name":"Hidden Dates"},{"id":"calendar-timelineview--markers-only","name":"Markers Only"},{"id":"calendar-timelineview--narrow","name":"Narrow"}],"example":{"file":"calendar/timeline-view/timeline-view.stories.tsx","story":"Default"}},{"name":"WeekView","slug":"week-view","category":"calendar","subpath":"calendar","page":"/docs/components/week-view","importPath":"@jcsoftdev/ui/calendar","singleEntries":["@jcsoftdev/ui/calendar/week-view"],"summary":"","declarationFile":"calendar/week-view/week-view.tsx","props":[{"name":"week","type":"string","required":true,"default":null,"description":"Any \"YYYY-MM-DD\" date inside the week to show.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"today","type":"string","required":true,"default":null,"description":"\"YYYY-MM-DD\" date highlighted as today; the view never computes it.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"currentTime","type":"string","required":false,"default":null,"description":"Current time \"HH:mm\" for the \"now\" line; without it no line is drawn.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"events","type":"CalendarEvent[]","required":true,"default":null,"description":"","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"markers","type":"CalendarMarker[]","required":false,"default":"[]","description":"Markers render in the all-day row.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"shadedDates","type":"string[]","required":false,"default":"[]","description":"Dates (\"YYYY-MM-DD\") rendered with a hatch pattern (non-working days).","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"workingHours","type":"readonly [number, number]","required":false,"default":null,"description":"Highlighted band of working hours, [start, end) in hours.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"locale","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"weekStartsOn","type":"0 | 1 | 4 | 3 | 2 | 5 | 6","required":false,"default":"1","description":"First day of the week, 0 (Sunday) to 6 (Saturday). Defaults to 1 (Monday).","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"allDayLabel","type":"string","required":true,"default":null,"description":"Label of the all-day row.","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"onOpenEvent","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"onOpenMarker","type":"((id: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/week-view/week-view.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"calendar/week-view/week-view.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"calendar-weekview--default","name":"Default"},{"id":"calendar-weekview--sunday-start","name":"Sunday Start"},{"id":"calendar-weekview--empty","name":"Empty"},{"id":"calendar-weekview--no-now-line","name":"No Now Line"},{"id":"calendar-weekview--busy-day","name":"Busy Day"},{"id":"calendar-weekview--narrow","name":"Narrow"}],"example":{"file":"calendar/week-view/week-view.stories.tsx","story":"Default"}},{"name":"AlluvialChart","slug":"alluvial-chart","category":"charts","subpath":"charts","page":"/docs/components/alluvial-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/sankey-chart"],"summary":"Alluvial diagram: how the same categories flow from one moment to the next\n(client segments month by month, services chosen by season). Each stage is a\ncolumn; every category keeps its color and its place from top to bottom, so\nthe eye follows who moved where. Built on `SankeyChart`.","declarationFile":"charts/sankey-chart/alluvial-chart.tsx","props":[{"name":"stages","type":"readonly string[]","required":true,"default":null,"description":"Moments in time, left to right: \"Jun\", \"Jul\", ...","deprecated":false,"file":"charts/core/sankey.ts"},{"name":"categories","type":"readonly { id: string; name: string; color?: string; }[]","required":true,"default":null,"description":"The categories that flow; their order is the order top to bottom in every stage.","deprecated":false,"file":"charts/core/sankey.ts"},{"name":"flows","type":"readonly (readonly { from: string; to: string; value: number; }[])[]","required":true,"default":null,"description":"`flows[s]` moves people from stage `s` to stage `s + 1`:\n`{ from: categoryId, to: categoryId, value }`.","deprecated":false,"file":"charts/core/sankey.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio of the drawing; ignored with `\"fill\"`.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"labels","type":"Partial<SankeyLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"pathTracing","type":"boolean","required":false,"default":null,"description":"Hover or click traces a whole path: a link lights everything upstream of its source and downstream of its target; a click pins it.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"particles","type":"boolean","required":false,"default":null,"description":"Dots travel along the bands (off under `prefers-reduced-motion`).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"exportable","type":"boolean","required":false,"default":null,"description":"Show SVG and PNG export buttons above the drawing.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"nodeWidth","type":"number","required":false,"default":null,"description":"Thickness of the node bars (wider by default with inside labels).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"nodePadding","type":"number","required":false,"default":null,"description":"Vertical gap between nodes of a column.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"iterations","type":"number","required":false,"default":null,"description":"Relaxation sweeps of the layout; more untangles more, at a cost.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"linkColor","type":"\"source\" | \"target\" | \"neutral\" | \"gradient\"","required":false,"default":null,"description":"`gradient` blends source into target; `source`/`target` use one end; `neutral` is grey.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"linkOpacity","type":"number","required":false,"default":null,"description":"Resting opacity of the links (0-1).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"labelPosition","type":"\"outside\" | \"inside\"","required":false,"default":null,"description":"Node labels beside the bars (`outside`) or on wide bars (`inside`).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"showValues","type":"boolean","required":false,"default":null,"description":"Value after each node label.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onNodeClick","type":"((node: SankeyNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onLinkClick","type":"((link: SankeyLink) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onRemovedLinks","type":"((removed: SankeyGraph[\"removed\"]) => void)","required":false,"default":null,"description":"Links the layout left out (cycles, self links, unknown ids, invalid values).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-sankeychart--default","name":"Default"},{"id":"charts-sankeychart--source-colored","name":"Source Colored"},{"id":"charts-sankeychart--inside-labels","name":"Inside Labels"},{"id":"charts-sankeychart--revenue","name":"Revenue"},{"id":"charts-sankeychart--with-cycle","name":"With Cycle"},{"id":"charts-sankeychart--loading","name":"Loading"},{"id":"charts-sankeychart--empty","name":"Empty"},{"id":"charts-sankeychart--narrow","name":"Narrow"},{"id":"charts-sankeychart--fill-parent","name":"Fill Parent"},{"id":"charts-sankeychart--alluvial","name":"Alluvial"},{"id":"charts-sankeychart--diff","name":"Diff"},{"id":"charts-sankeychart--path-tracing","name":"Path Tracing"},{"id":"charts-sankeychart--particles","name":"Particles"},{"id":"charts-sankeychart--export","name":"Export"},{"id":"charts-sankeychart--chord","name":"Chord"}],"example":{"file":"charts/sankey-chart/sankey-chart.stories.tsx","story":"Default"}},{"name":"AreaChart","slug":"area-chart","category":"charts","subpath":"charts","page":"/docs/components/area-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/area-chart"],"summary":"Volume over time with a soft gradient fill. `stack=\"normal\"` piles series\ninto a total; `stack=\"percent\"` shows each one's share of 100%.","declarationFile":"charts/area-chart/area-chart.tsx","props":[{"name":"series","type":"readonly ChartSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/area-chart/area-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"gradient","type":"boolean","required":false,"default":null,"description":"Gradient fill under areas (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"One entry per data point: strings, numbers or dates.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"stack","type":"\"normal\" | \"none\" | \"percent\"","required":false,"default":null,"description":"Stacks every area and column series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"smooth\"","description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"markers","type":"boolean","required":false,"default":null,"description":"Dots on every line point. Hovered points are always marked.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"lineGradient","type":"boolean","required":false,"default":null,"description":"Strokes lines with a gradient from each series color to the next palette color.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xScale","type":"\"time\" | \"auto\" | \"band\"","required":false,"default":null,"description":"\"time\" spaces dates by real elapsed time; \"auto\" picks it when every category is a Date and no series is a column.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"brush","type":"boolean","required":false,"default":null,"description":"Drag-to-zoom on the plot plus an overview brush with a reset button.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-areachart--default","name":"Default"},{"id":"charts-areachart--multiple-series","name":"Multiple Series"},{"id":"charts-areachart--stacked","name":"Stacked"},{"id":"charts-areachart--stacked-percent","name":"Stacked 100%"},{"id":"charts-areachart--without-gradient","name":"Without Gradient"},{"id":"charts-areachart--brush-zoom","name":"Brush and zoom (120 days)"},{"id":"charts-areachart--step","name":"Step"},{"id":"charts-areachart--negative-values","name":"Negative Values"},{"id":"charts-areachart--with-gaps","name":"With Gaps"},{"id":"charts-areachart--narrow","name":"Narrow"},{"id":"charts-areachart--loading","name":"Loading"}],"example":{"file":"charts/area-chart/area-chart.stories.tsx","story":"Default"}},{"name":"AxisBottom","slug":"axis-bottom","category":"charts","subpath":"charts","page":"/docs/components/axis-bottom","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Category or time labels under the plot.","declarationFile":"charts/core/axes.tsx","props":[{"name":"ticks","type":"readonly AxisTick[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"offset","type":"number","required":true,"default":null,"description":"Offset of the axis line: `y` for bottom, `x` for left/right.","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"title","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"Overrides the label color (a value axis matched to its series).","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"rotate","type":"number","required":false,"default":null,"description":"Tilts the labels by this many degrees (negative reads up and to the right), e.g. -45.","deprecated":false,"file":"charts/core/axes.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-axes--default","name":"Default"},{"id":"charts-primitives-axes--dual-axis","name":"Dual Axis"},{"id":"charts-primitives-axes--without-grid","name":"Without Grid"}],"example":{"file":"charts/core/axes.stories.tsx","story":"Default"}},{"name":"AxisLeft","slug":"axis-left","category":"charts","subpath":"charts","page":"/docs/components/axis-left","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Value labels on the left, right-aligned against the plot.","declarationFile":"charts/core/axes.tsx","props":[{"name":"ticks","type":"readonly AxisTick[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"offset","type":"number","required":true,"default":null,"description":"Offset of the axis line: `y` for bottom, `x` for left/right.","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"title","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"Overrides the label color (a value axis matched to its series).","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"rotate","type":"number","required":false,"default":null,"description":"Tilts the labels by this many degrees (negative reads up and to the right), e.g. -45.","deprecated":false,"file":"charts/core/axes.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-axes--default","name":"Default"},{"id":"charts-primitives-axes--dual-axis","name":"Dual Axis"},{"id":"charts-primitives-axes--without-grid","name":"Without Grid"},{"id":"charts-primitives-cartesianchart--default","name":"Default"},{"id":"charts-primitives-cartesianchart--stacked","name":"Stacked"},{"id":"charts-primitives-cartesianchart--horizontal","name":"Horizontal"},{"id":"charts-primitives-cartesianchart--columns-and-line-on-right-axis","name":"Columns And Line On Right Axis"},{"id":"charts-primitives-cartesianchart--area-with-goal","name":"Area With Goal"},{"id":"charts-primitives-cartesianchart--with-brush","name":"With Brush"},{"id":"charts-primitives-cartesianchart--loading","name":"Loading"},{"id":"charts-primitives-cartesianchart--empty","name":"Empty"},{"id":"charts-primitives-categoryslider--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--root-only","name":"Root Only"},{"id":"charts-primitives-chartbreadcrumb--interactive","name":"Interactive"},{"id":"charts-primitives-chartbrush--default","name":"Default"},{"id":"charts-primitives-chartbrush--full-range","name":"Full Range"},{"id":"charts-primitives-chartdatatable--default","name":"Default"},{"id":"charts-primitives-chartdatatable--missing-values","name":"Missing Values"},{"id":"charts-primitives-chartframe--default","name":"Default"},{"id":"charts-primitives-chartframe--fills-parent","name":"Fills Parent"},{"id":"charts-primitives-chartframe--aspect-ratio","name":"Aspect Ratio"},{"id":"charts-primitives-chartframe--with-legend-and-table","name":"With Legend And Table"},{"id":"charts-primitives-chartframe--loading","name":"Loading"},{"id":"charts-primitives-chartframe--loading-ring","name":"Loading Ring"},{"id":"charts-primitives-chartframe--empty","name":"Empty"},{"id":"charts-primitives-chartlegend--read-only","name":"Read Only"},{"id":"charts-primitives-chartlegend--toggleable","name":"Toggleable"},{"id":"charts-primitives-chartlegend--centered","name":"Centered"},{"id":"charts-primitives-chartskeleton--bars","name":"Bars"},{"id":"charts-primitives-chartskeleton--line","name":"Line"},{"id":"charts-primitives-chartskeleton--ring","name":"Ring"},{"id":"charts-primitives-chartskeleton--empty","name":"Empty"},{"id":"charts-primitives-charttooltip--default","name":"Default"},{"id":"charts-primitives-charttooltip--flips-near-the-right-edge","name":"Flips Near The Right Edge"},{"id":"charts-primitives-charttooltip--without-title","name":"Without Title"},{"id":"charts-primitives-exportmenu--default","name":"Default"},{"id":"charts-primitives-exportmenu--spanish","name":"Spanish"},{"id":"charts-primitives-hierarchyheader--default","name":"Default"},{"id":"charts-primitives-hierarchyheader--at-root","name":"At Root"},{"id":"charts-primitives-hierarchylegend--default","name":"Default"},{"id":"charts-primitives-hierarchylegend--drilled-in","name":"Drilled In"},{"id":"charts-primitives-hierarchylegend--limited","name":"Limited"},{"id":"charts-primitives-hierarchylegend--leaf","name":"Leaf"},{"id":"charts-primitives-hierarchytable--default","name":"Default"},{"id":"charts-primitives-hierarchytable--from-branch","name":"From Branch"},{"id":"charts-primitives-chartpatterndefs--gallery","name":"Gallery"},{"id":"charts-primitives-chartpatterndefs--custom-tile","name":"Custom Tile"},{"id":"charts-primitives-plotoverlay--default","name":"Default"},{"id":"charts-primitives-plotoverlay--vertical-keys","name":"Vertical Keys"},{"id":"charts-primitives-plotoverlay--both-axes-keys","name":"Both Axes Keys"},{"id":"charts-primitives-unitglyph--default","name":"Default"},{"id":"charts-primitives-unitglyph--fills-up","name":"Fills Up"},{"id":"charts-primitives-unitglyph--scissors","name":"Scissors"},{"id":"charts-primitives-unitglyph--without-track","name":"Without Track"}],"example":{"file":"charts/core/axes.stories.tsx","story":"Default"}},{"name":"AxisRight","slug":"axis-right","category":"charts","subpath":"charts","page":"/docs/components/axis-right","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Value labels on the right, for a secondary axis.","declarationFile":"charts/core/axes.tsx","props":[{"name":"ticks","type":"readonly AxisTick[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"offset","type":"number","required":true,"default":null,"description":"Offset of the axis line: `y` for bottom, `x` for left/right.","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"title","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"Overrides the label color (a value axis matched to its series).","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"rotate","type":"number","required":false,"default":null,"description":"Tilts the labels by this many degrees (negative reads up and to the right), e.g. -45.","deprecated":false,"file":"charts/core/axes.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-axes--default","name":"Default"},{"id":"charts-primitives-axes--dual-axis","name":"Dual Axis"},{"id":"charts-primitives-axes--without-grid","name":"Without Grid"},{"id":"charts-primitives-cartesianchart--default","name":"Default"},{"id":"charts-primitives-cartesianchart--stacked","name":"Stacked"},{"id":"charts-primitives-cartesianchart--horizontal","name":"Horizontal"},{"id":"charts-primitives-cartesianchart--columns-and-line-on-right-axis","name":"Columns And Line On Right Axis"},{"id":"charts-primitives-cartesianchart--area-with-goal","name":"Area With Goal"},{"id":"charts-primitives-cartesianchart--with-brush","name":"With Brush"},{"id":"charts-primitives-cartesianchart--loading","name":"Loading"},{"id":"charts-primitives-cartesianchart--empty","name":"Empty"},{"id":"charts-primitives-categoryslider--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--root-only","name":"Root Only"},{"id":"charts-primitives-chartbreadcrumb--interactive","name":"Interactive"},{"id":"charts-primitives-chartbrush--default","name":"Default"},{"id":"charts-primitives-chartbrush--full-range","name":"Full Range"},{"id":"charts-primitives-chartdatatable--default","name":"Default"},{"id":"charts-primitives-chartdatatable--missing-values","name":"Missing Values"},{"id":"charts-primitives-chartframe--default","name":"Default"},{"id":"charts-primitives-chartframe--fills-parent","name":"Fills Parent"},{"id":"charts-primitives-chartframe--aspect-ratio","name":"Aspect Ratio"},{"id":"charts-primitives-chartframe--with-legend-and-table","name":"With Legend And Table"},{"id":"charts-primitives-chartframe--loading","name":"Loading"},{"id":"charts-primitives-chartframe--loading-ring","name":"Loading Ring"},{"id":"charts-primitives-chartframe--empty","name":"Empty"},{"id":"charts-primitives-chartlegend--read-only","name":"Read Only"},{"id":"charts-primitives-chartlegend--toggleable","name":"Toggleable"},{"id":"charts-primitives-chartlegend--centered","name":"Centered"},{"id":"charts-primitives-chartskeleton--bars","name":"Bars"},{"id":"charts-primitives-chartskeleton--line","name":"Line"},{"id":"charts-primitives-chartskeleton--ring","name":"Ring"},{"id":"charts-primitives-chartskeleton--empty","name":"Empty"},{"id":"charts-primitives-charttooltip--default","name":"Default"},{"id":"charts-primitives-charttooltip--flips-near-the-right-edge","name":"Flips Near The Right Edge"},{"id":"charts-primitives-charttooltip--without-title","name":"Without Title"},{"id":"charts-primitives-exportmenu--default","name":"Default"},{"id":"charts-primitives-exportmenu--spanish","name":"Spanish"},{"id":"charts-primitives-hierarchyheader--default","name":"Default"},{"id":"charts-primitives-hierarchyheader--at-root","name":"At Root"},{"id":"charts-primitives-hierarchylegend--default","name":"Default"},{"id":"charts-primitives-hierarchylegend--drilled-in","name":"Drilled In"},{"id":"charts-primitives-hierarchylegend--limited","name":"Limited"},{"id":"charts-primitives-hierarchylegend--leaf","name":"Leaf"},{"id":"charts-primitives-hierarchytable--default","name":"Default"},{"id":"charts-primitives-hierarchytable--from-branch","name":"From Branch"},{"id":"charts-primitives-chartpatterndefs--gallery","name":"Gallery"},{"id":"charts-primitives-chartpatterndefs--custom-tile","name":"Custom Tile"},{"id":"charts-primitives-plotoverlay--default","name":"Default"},{"id":"charts-primitives-plotoverlay--vertical-keys","name":"Vertical Keys"},{"id":"charts-primitives-plotoverlay--both-axes-keys","name":"Both Axes Keys"},{"id":"charts-primitives-unitglyph--default","name":"Default"},{"id":"charts-primitives-unitglyph--fills-up","name":"Fills Up"},{"id":"charts-primitives-unitglyph--scissors","name":"Scissors"},{"id":"charts-primitives-unitglyph--without-track","name":"Without Track"}],"example":{"file":"charts/core/axes.stories.tsx","story":"Default"}},{"name":"BarChart","slug":"bar-chart","category":"charts","subpath":"charts","page":"/docs/components/bar-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/bar-chart"],"summary":"Columns (`orientation=\"vertical\"`, default) or horizontal bars. Several\nseries are grouped side by side, or piled with `stack`. Bars are rounded at\ntheir value end only, negative values grow downwards (or to the left).\n\nAlso: floating `ranges`, `stackGroup` piles side by side, `categoryGroups`\nlabels under the axis, a `reversed` value axis (`yAxis.reversed`), SVG\n`pattern` fills per series, per-bar `colors` / `distributed`, and\n`onCategoryClick` for drill-down.","declarationFile":"charts/bar-chart/bar-chart.tsx","props":[{"name":"series","type":"readonly BarSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-chart.tsx"},{"name":"distributed","type":"boolean","required":false,"default":"false","description":"One palette color per bar instead of one per series (single-series charts).","deprecated":false,"file":"charts/bar-chart/bar-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":null,"description":"\"horizontal\" lays categories top to bottom (bar charts).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"barRadius","type":"number","required":false,"default":null,"description":"Corner radius at the value end of bars, 6 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"One entry per data point: strings, numbers or dates.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"stack","type":"\"normal\" | \"none\" | \"percent\"","required":false,"default":null,"description":"Stacks every area and column series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"lineGradient","type":"boolean","required":false,"default":null,"description":"Strokes lines with a gradient from each series color to the next palette color.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-barchart--default","name":"Default"},{"id":"charts-barchart--grouped","name":"Grouped"},{"id":"charts-barchart--stacked","name":"Stacked"},{"id":"charts-barchart--stacked-percent","name":"Stacked 100%"},{"id":"charts-barchart--horizontal","name":"Horizontal (top services)"},{"id":"charts-barchart--horizontal-stacked","name":"Horizontal Stacked"},{"id":"charts-barchart--negative-values","name":"Negative Values"},{"id":"charts-barchart--with-goal","name":"Annotation (weekly goal)"},{"id":"charts-barchart--data-labels","name":"Data Labels"},{"id":"charts-barchart--custom-data-labels","name":"Custom Data Labels"},{"id":"charts-barchart--distributed","name":"Distributed (a color per bar)"},{"id":"charts-barchart--rotated-labels","name":"Rotated Labels"},{"id":"charts-barchart--range-column","name":"Range column (shifts)"},{"id":"charts-barchart--range-bar","name":"Range bar (service duration)"},{"id":"charts-barchart--grouped-stacked","name":"Grouped stacked (income vs costs)"},{"id":"charts-barchart--group-labels","name":"Group labels (quarters)"},{"id":"charts-barchart--reversed","name":"Reversed value axis"},{"id":"charts-barchart--patterned","name":"Patterns (color-blind friendly)"},{"id":"charts-barchart--patterned-stacked","name":"Patterned Stacked"},{"id":"charts-barchart--drilldown","name":"Drilldown"},{"id":"charts-barchart--race","name":"Race (animated re-sort)"},{"id":"charts-barchart--loading","name":"Loading"},{"id":"charts-barchart--empty","name":"Empty"},{"id":"charts-barchart--fill-parent","name":"Fill Parent"},{"id":"charts-barchart--narrow","name":"Narrow"}],"example":{"file":"charts/bar-chart/bar-chart.stories.tsx","story":"Default"}},{"name":"BarRaceChart","slug":"bar-race-chart","category":"charts","subpath":"charts","page":"/docs/components/bar-race-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/bar-chart"],"summary":"Bar race: horizontal bars that grow, shrink and swap places as time moves\nthrough `frames`. Play/pause, scrub with the slider, `topN` limits the rows.\nUnder `prefers-reduced-motion` the bars step from frame to frame.","declarationFile":"charts/bar-chart/bar-race-chart.tsx","props":[{"name":"entities","type":"readonly BarRaceEntity[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"frames","type":"readonly RaceFrame[]","required":true,"default":null,"description":"One entry per moment; `values[i]` belongs to `entities[i]`.","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"topN","type":"number","required":false,"default":"6","description":"How many bars race at once (default 6).","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"frameDuration","type":"number","required":false,"default":"1400","description":"Milliseconds between two frames (default 1400).","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"defaultPlaying","type":"boolean","required":false,"default":"true","description":"Starts playing (default true; reduced motion starts paused).","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"loop","type":"boolean","required":false,"default":"true","description":"Starts over after the last frame (default true).","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"playLabel","type":"string","required":false,"default":"\"Play\"","description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"pauseLabel","type":"string","required":false,"default":"\"Pause\"","description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"momentLabel","type":"string","required":false,"default":"\"Moment\"","description":"Accessible name of the moment slider.","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bar-chart/bar-race-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-barchart--default","name":"Default"},{"id":"charts-barchart--grouped","name":"Grouped"},{"id":"charts-barchart--stacked","name":"Stacked"},{"id":"charts-barchart--stacked-percent","name":"Stacked 100%"},{"id":"charts-barchart--horizontal","name":"Horizontal (top services)"},{"id":"charts-barchart--horizontal-stacked","name":"Horizontal Stacked"},{"id":"charts-barchart--negative-values","name":"Negative Values"},{"id":"charts-barchart--with-goal","name":"Annotation (weekly goal)"},{"id":"charts-barchart--data-labels","name":"Data Labels"},{"id":"charts-barchart--custom-data-labels","name":"Custom Data Labels"},{"id":"charts-barchart--distributed","name":"Distributed (a color per bar)"},{"id":"charts-barchart--rotated-labels","name":"Rotated Labels"},{"id":"charts-barchart--range-column","name":"Range column (shifts)"},{"id":"charts-barchart--range-bar","name":"Range bar (service duration)"},{"id":"charts-barchart--grouped-stacked","name":"Grouped stacked (income vs costs)"},{"id":"charts-barchart--group-labels","name":"Group labels (quarters)"},{"id":"charts-barchart--reversed","name":"Reversed value axis"},{"id":"charts-barchart--patterned","name":"Patterns (color-blind friendly)"},{"id":"charts-barchart--patterned-stacked","name":"Patterned Stacked"},{"id":"charts-barchart--drilldown","name":"Drilldown"},{"id":"charts-barchart--race","name":"Race (animated re-sort)"},{"id":"charts-barchart--loading","name":"Loading"},{"id":"charts-barchart--empty","name":"Empty"},{"id":"charts-barchart--fill-parent","name":"Fill Parent"},{"id":"charts-barchart--narrow","name":"Narrow"}],"example":{"file":"charts/bar-chart/bar-chart.stories.tsx","story":"Default"}},{"name":"BeeswarmChart","slug":"beeswarm-chart","category":"charts","subpath":"charts","page":"/docs/components/beeswarm-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/beeswarm-chart"],"summary":"Beeswarm: every observation is a dot on the value axis, nudged sideways\njust enough that no two overlap, so clusters read as density while each\npoint stays individually explorable.","declarationFile":"charts/beeswarm-chart/beeswarm-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"series","type":"readonly BeeswarmSeries[]","required":true,"default":null,"description":"Colors and legend; points of every series share the rows.","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"categories","type":"readonly string[]","required":false,"default":null,"description":"Row order; derived from the points (first seen first) when omitted.","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"horizontal\"","description":"\"horizontal\": values along x, one row per category. \"vertical\": one column per category.","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"valueAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"radius","type":"number","required":false,"default":"4.5","description":"Radius of every point when there are no sizes (pixels).","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"sizeRange","type":"readonly [number, number]","required":false,"default":"[3, 14]","description":"Radius range for sized points: the largest size gets `max`, area-proportional.","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"sizeFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"1.25","description":"Space between points (pixels).","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing; grows with the number of rows by default.","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/beeswarm-chart/beeswarm-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-beeswarmchart--default","name":"Default"},{"id":"charts-beeswarmchart--vertical","name":"Vertical"},{"id":"charts-beeswarmchart--sized-by-ticket","name":"Sized By Ticket"},{"id":"charts-beeswarmchart--colored-by-series","name":"Colored By Series"},{"id":"charts-beeswarmchart--narrow","name":"Narrow"},{"id":"charts-beeswarmchart--loading","name":"Loading"},{"id":"charts-beeswarmchart--empty","name":"Empty"}],"example":{"file":"charts/beeswarm-chart/beeswarm-chart.stories.tsx","story":"Default"}},{"name":"BoxGlyph","slug":"box-glyph","category":"charts","subpath":"charts","page":"/docs/components/box-glyph","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"One box-and-whisker: IQR box, median line, whiskers with caps, optional\nmean diamond and outlier dots. Pure SVG, memoised.","declarationFile":"charts/core/distribution/marks.tsx","props":[{"name":"stats","type":"BoxStats","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"map","type":"(value: number) => number","required":true,"default":null,"description":"Value to pixel along the value axis.","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"center","type":"number","required":true,"default":null,"description":"Pixel of the box axis on the cross axis.","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"size","type":"number","required":true,"default":null,"description":"Box thickness in pixels.","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"horizontal","type":"boolean","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"color","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"variant","type":"\"box\" | \"inner\"","required":false,"default":"\"box\"","description":"\"box\": soft fill and colored outline. \"inner\": slim dark box for violins and rainclouds.","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"showMean","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"showOutliers","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"activeOutlier","type":"number | null","required":false,"default":null,"description":"Highlighted outlier value (keyboard or pointer).","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"dimmed","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"active","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-boxglyph--default","name":"Default"},{"id":"charts-primitives-boxglyph--horizontal","name":"Horizontal"},{"id":"charts-primitives-boxglyph--inner-variant","name":"Inner Variant"},{"id":"charts-primitives-boxglyph--without-mean-and-outliers","name":"Without Mean And Outliers"},{"id":"charts-primitives-boxglyph--active","name":"Active"},{"id":"charts-primitives-boxglyph--dimmed","name":"Dimmed"}],"example":{"file":"charts/core/distribution/box-glyph.stories.tsx","story":"Default"}},{"name":"BoxPlot","slug":"box-plot","category":"charts","subpath":"charts","page":"/docs/components/box-plot","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/box-plot"],"summary":"Box-and-whisker plot: median, quartiles, Tukey whiskers, outliers and the\nmean for every category, optionally grouped by series.","declarationFile":"charts/box-plot/box-plot.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart and caption of its data table.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"categories","type":"readonly string[]","required":true,"default":null,"description":"One box (per series) for each category, e.g. the barbers.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"series","type":"readonly DistributionSeries[]","required":true,"default":null,"description":"`data[i]` holds the raw samples of `categories[i]`. Several series are drawn side by side.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"\"vertical\": boxes stand on the x axis. \"horizontal\": one row per category.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"valueAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"whisker","type":"number","required":false,"default":"1.5","description":"Tukey fence multiplier; `Infinity` stretches the whiskers to min and max.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"showMean","type":"boolean","required":false,"default":"true","description":"Diamond on the mean.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"showOutliers","type":"boolean","required":false,"default":"true","description":"Dots for values outside the whiskers.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"showPoints","type":"boolean","required":false,"default":"false","description":"Every raw observation as a dot over the box, with deterministic jitter.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"jitter","type":"number","required":false,"default":"0.7","description":"Share (0-1) of the box width the dots spread over.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"pointColor","type":"\"value\" | \"series\"","required":false,"default":"\"series\"","description":"\"value\" grades each dot from pale to full colour across the value range.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"seed","type":"number","required":false,"default":"11","description":"Seed of the jitter, so the dots are stable between renders.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"320","description":"Height of the drawing in pixels.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Shown automatically with more than one series.","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/box-plot/box-plot.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-boxplot--default","name":"Default"},{"id":"charts-boxplot--horizontal","name":"Horizontal"},{"id":"charts-boxplot--grouped-by-series","name":"Grouped By Series"},{"id":"charts-boxplot--with-points","name":"With Points"},{"id":"charts-boxplot--jitter","name":"Jitter"},{"id":"charts-boxplot--average-ticket","name":"Average Ticket"},{"id":"charts-boxplot--whiskers-to-extremes","name":"Whiskers To Extremes"},{"id":"charts-boxplot--narrow","name":"Narrow"},{"id":"charts-boxplot--loading","name":"Loading"},{"id":"charts-boxplot--empty","name":"Empty"}],"example":{"file":"charts/box-plot/box-plot.stories.tsx","story":"Default"}},{"name":"BoxStatsTable","slug":"box-stats-table","category":"charts","subpath":"charts","page":"/docs/components/box-stats-table","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Hidden data table with the summary of every box, violin or cloud.","declarationFile":"charts/core/distribution/marks.tsx","props":[{"name":"caption","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"labels","type":"DistributionLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"rows","type":"readonly { name: string; stats: BoxStats | null; format: ValueFormatter; }[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-boxstatstable--default","name":"Default"},{"id":"charts-primitives-boxstatstable--single-row","name":"Single Row"}],"example":{"file":"charts/core/distribution/box-stats-table.stories.tsx","story":"Default"}},{"name":"BubbleChart","slug":"bubble-chart","category":"charts","subpath":"charts","page":"/docs/components/bubble-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/bubble-chart"],"summary":"Bubble chart: x, y and a third value as the bubble's area (radius grows\nwith the square root, so twice the value is twice the ink). Labels sit\ninside large bubbles and next to small ones; a size key explains the scale.","declarationFile":"charts/bubble-chart/bubble-chart.tsx","props":[{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"series","type":"readonly XYSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"brush","type":"XYBrush","required":false,"default":null,"description":"Rectangular brush over the plot (pointer drag plus keyboard).","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"trendLine","type":"boolean","required":false,"default":null,"description":"Least-squares line per series, drawn over its x range.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"quadrants","type":"QuadrantOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeRange","type":"readonly [number, number]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xType","type":"\"time\" | \"linear\"","required":false,"default":null,"description":"\"time\": `x` is epoch milliseconds and the axis shows calendar ticks.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"jitter","type":"number | { x?: number; y?: number; }","required":false,"default":null,"description":"Deterministic displacement in pixels that separates overlapping points\n(a number applies to both axes). Tooltips still show the true values.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"seed","type":"number","required":false,"default":null,"description":"Seed of the jitter, so points are stable between renders.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"renderer","type":"\"canvas\" | \"svg\"","required":false,"default":null,"description":"\"canvas\" paints the marks on a canvas for tens of thousands of points;\naxes, tooltip and keyboard stay SVG/HTML. Falls back to SVG when points\ncarry images or `shading` is \"shaded\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"shading","type":"\"flat\" | \"shaded\"","required":false,"default":null,"description":"\"shaded\" fills bubbles with an off-centre radial gradient so they read as spheres.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"showLabels","type":"boolean","required":false,"default":"true","description":"Text labels next to (or inside) the points that have a `label`.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeLegend","type":"boolean","required":false,"default":null,"description":"Reference circles explaining the bubble sizes, under the plot.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-bubblechart--default","name":"Default"},{"id":"charts-bubblechart--barbers-by-branch","name":"Barbers By Branch"},{"id":"charts-bubblechart--with-quadrants","name":"With Quadrants"},{"id":"charts-bubblechart--shaded-3-d","name":"Shaded 3 D"},{"id":"charts-bubblechart--without-labels","name":"Without Labels"},{"id":"charts-bubblechart--narrow","name":"Narrow"},{"id":"charts-bubblechart--loading","name":"Loading"},{"id":"charts-bubblechart--empty","name":"Empty"}],"example":{"file":"charts/bubble-chart/bubble-chart.stories.tsx","story":"Default"}},{"name":"BubbleMap","slug":"bubble-map","category":"charts","subpath":"charts","page":"/docs/components/bubble-map","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/bubble-map"],"summary":"Markers on a map by longitude and latitude, sized by value (area\nproportional) and colored by category, with optional clustering. Sizes stay\nin screen pixels while you zoom. Hover or arrow keys select a marker (keyboard\norder follows the visible bubbles), click or Enter calls `onPointClick`\n(a cluster zooms in instead), `+` / `-` zoom, `0` fits.","declarationFile":"charts/bubble-map/bubble-map.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"map","type":"GeoMap","required":true,"default":null,"description":"Base map under the markers, e.g. `peruMap`.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"points","type":"readonly MapPoint[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"categories","type":"readonly BubbleMapCategory[]","required":false,"default":null,"description":"Legend entries and colors; derived from the points' `category` by order when omitted.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"valueName","type":"string","required":false,"default":null,"description":"Name of the value in the tooltip and the data table, e.g. \"Citas\".","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"projection","type":"\"equirectangular\" | \"mercator\" | \"equalEarth\" | \"fitted\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"minRadius","type":"number","required":false,"default":"6","description":"Area-proportional bubbles between these radii (px). Points without `value` use `minRadius`.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"maxRadius","type":"number","required":false,"default":"28","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"cluster","type":"boolean","required":false,"default":"false","description":"Merge markers closer than `clusterDistance` px into one bubble (count inside, click to zoom in).","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"clusterDistance","type":"number","required":false,"default":"36","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"regionLabels","type":"boolean","required":false,"default":"false","description":"Write the region names on the base map where they fit.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"routes","type":"readonly MapRoute[]","required":false,"default":"[]","description":"Flows between places, drawn as arcs under the bubbles with animated dashes.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"routeStyle","type":"\"curve\" | \"great-circle\"","required":false,"default":"\"curve\"","description":"\"curve\": a soft arch in screen space (regions); \"great-circle\": the shortest path on the globe (world).","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"routeBend","type":"number","required":false,"default":"0.25","description":"Arch height of a \"curve\" as a fraction of the distance (0 straight, default 0.25).","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"animateRoutes","type":"boolean","required":false,"default":"true","description":"Marching dashes along the routes; off under `prefers-reduced-motion`.","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"zoomable","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"wheelZoom","type":"\"always\" | \"modifier\"","required":false,"default":"\"modifier\"","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"maxZoom","type":"number","required":false,"default":"16","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"labels","type":"Partial<MapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"onPointClick","type":"((point: MapPoint) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/bubble-map/bubble-map.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-bubblemap--default","name":"Default"},{"id":"charts-bubblemap--with-region-names","name":"With Region Names"},{"id":"charts-bubblemap--clustered","name":"Clustered"},{"id":"charts-bubblemap--clustering-off","name":"Clustering Off"},{"id":"charts-bubblemap--world","name":"World"},{"id":"charts-bubblemap--routes","name":"Routes"},{"id":"charts-bubblemap--routes-world","name":"Routes World"},{"id":"charts-bubblemap--routes-narrow","name":"Routes Narrow"},{"id":"charts-bubblemap--loading","name":"Loading"},{"id":"charts-bubblemap--empty","name":"Empty"},{"id":"charts-bubblemap--narrow","name":"Narrow"},{"id":"charts-bubblemap--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/bubble-map/bubble-map.stories.tsx","story":"Default"}},{"name":"CalendarHeatmap","slug":"calendar-heatmap","category":"charts","subpath":"charts","page":"/docs/components/calendar-heatmap","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/heatmap-chart"],"summary":"Contribution-style calendar: one square per day, weeks as columns (Monday\nfirst), months labelled on top. Same color scales, ranges, crosshair and\nkeyboard model as `HeatmapChart`.","declarationFile":"charts/heatmap-chart/calendar-heatmap.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"days","type":"readonly CalendarDay[]","required":true,"default":null,"description":"One entry per day; missing days inside the range are drawn empty.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"from","type":"Date","required":false,"default":null,"description":"First day shown; the earliest entry by default.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"to","type":"Date","required":false,"default":null,"description":"Last day shown; the latest entry by default.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":"\"sequential\"","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped coloring, e.g. \"Sin citas\", \"1-5\", \"6-10\", \"Más de 10\".","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"minCellSize","type":"number","required":false,"default":"11","description":"Smallest cell in pixels; narrow containers show only the most recent weeks that fit.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing in px or \"fill\". By default it follows the width:\ncells are square, so the height is the month header plus seven cell sides.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; overrides the width-derived default height.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"gap","type":"number","required":false,"default":"3","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"radius","type":"number","required":false,"default":"3","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"weekdays","type":"readonly string[]","required":false,"default":"WEEKDAYS","description":"Weekday names Monday to Sunday; only Monday, Wednesday and Friday are drawn.","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"labels","type":"Partial<HeatmapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"onDayClick","type":"((day: CalendarDay) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/calendar-heatmap.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-heatmapchart--default","name":"Default"},{"id":"charts-heatmapchart--cell-labels","name":"Cell Labels"},{"id":"charts-heatmapchart--diverging","name":"Diverging"},{"id":"charts-heatmapchart--ranges","name":"Ranges"},{"id":"charts-heatmapchart--missing-data","name":"Missing Data"},{"id":"charts-heatmapchart--calendar","name":"Calendar"},{"id":"charts-heatmapchart--calendar-ranges","name":"Calendar Ranges"},{"id":"charts-heatmapchart--rounded","name":"Rounded"},{"id":"charts-heatmapchart--honeycomb","name":"Honeycomb"},{"id":"charts-heatmapchart--continuous-datetime","name":"Continuous Datetime"},{"id":"charts-heatmapchart--canvas-dense","name":"Canvas Dense"},{"id":"charts-heatmapchart--drilldown","name":"Drilldown"},{"id":"charts-heatmapchart--narrow-drilldown","name":"Narrow Drilldown"},{"id":"charts-heatmapchart--loading","name":"Loading"},{"id":"charts-heatmapchart--empty","name":"Empty"},{"id":"charts-heatmapchart--narrow","name":"Narrow"},{"id":"charts-heatmapchart--narrow-calendar","name":"Narrow Calendar"}],"example":{"file":"charts/heatmap-chart/heatmap-chart.stories.tsx","story":"Default"}},{"name":"CandlestickChart","slug":"candlestick-chart","category":"charts","subpath":"charts","page":"/docs/components/candlestick-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/candlestick-chart"],"summary":"Open-high-low-close candles with up and down tokens, optional volume bars\non the same x axis, a last-price line and a brush to zoom. Arrow keys walk\nthe candles; the tooltip reads open, high, low, close, change and volume.","declarationFile":"charts/candlestick-chart/candlestick-chart.tsx","props":[{"name":"data","type":"readonly Candle[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"360","description":"Height of the plot (price and volume), 360 by default.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the chart from the container width.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"volume","type":"boolean","required":false,"default":null,"description":"Volume bars below the price, sharing the x axis. Default: shown when any candle has a volume.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"candleStyle","type":"\"filled\" | \"hollow\"","required":false,"default":"\"filled\"","description":"\"filled\" paints every body; \"hollow\" leaves rising candles empty.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"brush","type":"boolean","required":false,"default":"false","description":"Overview with a draggable view to zoom the x axis.","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"lastPrice","type":"boolean","required":false,"default":"true","description":"Dashed line and tag at the last close (default true).","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"volumeFormat","type":"ValueFormat","required":false,"default":"\"compact\"","description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"upColor","type":"string","required":false,"default":"DIRECTION_COLORS.up","description":"Overrides the rising color (default the `chart-up` token).","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"downColor","type":"string","required":false,"default":"DIRECTION_COLORS.down","description":"Overrides the falling color (default the `chart-down` token).","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"texts","type":"Partial<CandlestickTexts>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/candlestick-chart/candlestick-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-candlestickchart--default","name":"Default"},{"id":"charts-candlestickchart--brush-zoom","name":"Brush Zoom"},{"id":"charts-candlestickchart--hollow","name":"Hollow"},{"id":"charts-candlestickchart--with-volume","name":"With Volume"},{"id":"charts-candlestickchart--price-only","name":"Price Only"},{"id":"charts-candlestickchart--daily-cash","name":"Daily Cash"},{"id":"charts-candlestickchart--loading","name":"Loading"},{"id":"charts-candlestickchart--empty","name":"Empty"},{"id":"charts-candlestickchart--narrow","name":"Narrow"}],"example":{"file":"charts/candlestick-chart/candlestick-chart.stories.tsx","story":"Default"}},{"name":"CartesianChart","slug":"cartesian-chart","category":"charts","subpath":"charts","page":"/docs/components/cartesian-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"The cartesian engine. Line, area and column series share one plot, one\nvalue axis (plus an optional right axis), the legend, tooltip, keyboard\nexploration, annotations, entry animation and the zoom brush.\n`LineChart`, `AreaChart`, `BarChart` and `ComboChart` are presets of it.","declarationFile":"charts/core/cartesian/cartesian-chart.tsx","props":[{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"One entry per data point: strings, numbers or dates.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"series","type":"readonly CartesianSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":"300","description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"\"horizontal\" lays categories top to bottom (bar charts).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"stack","type":"\"normal\" | \"none\" | \"percent\"","required":false,"default":"\"none\"","description":"Stacks every area and column series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"linear\"","description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"markers","type":"boolean","required":false,"default":"false","description":"Dots on every line point. Hovered points are always marked.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":"false","description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"lineGradient","type":"boolean","required":false,"default":"false","description":"Strokes lines with a gradient from each series color to the next palette color.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":"false","description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":"DEFAULT_MAX_POINTS","description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"gradient","type":"boolean","required":false,"default":"true","description":"Gradient fill under areas (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"barRadius","type":"number","required":false,"default":"6","description":"Corner radius at the value end of bars, 6 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xScale","type":"\"time\" | \"auto\" | \"band\"","required":false,"default":"\"auto\"","description":"\"time\" spaces dates by real elapsed time; \"auto\" picks it when every category is a Date and no series is a column.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rightAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"Secondary axis for series with `axis: \"right\"`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"brush","type":"boolean","required":false,"default":"false","description":"Drag-to-zoom on the plot plus an overview brush with a reset button.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-cartesianchart--default","name":"Default"},{"id":"charts-primitives-cartesianchart--stacked","name":"Stacked"},{"id":"charts-primitives-cartesianchart--horizontal","name":"Horizontal"},{"id":"charts-primitives-cartesianchart--columns-and-line-on-right-axis","name":"Columns And Line On Right Axis"},{"id":"charts-primitives-cartesianchart--area-with-goal","name":"Area With Goal"},{"id":"charts-primitives-cartesianchart--with-brush","name":"With Brush"},{"id":"charts-primitives-cartesianchart--loading","name":"Loading"},{"id":"charts-primitives-cartesianchart--empty","name":"Empty"}],"example":{"file":"charts/core/cartesian-chart.stories.tsx","story":"Default"}},{"name":"CategoryAxes","slug":"category-axes","category":"charts","subpath":"charts","page":"/docs/components/category-axes","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Gridlines along the value axis plus both axes of a `categoryLayout`.","declarationFile":"charts/core/distribution/marks.tsx","props":[{"name":"layout","type":"CategoryLayout","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"title","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-categoryaxes--default","name":"Default"},{"id":"charts-primitives-categoryaxes--horizontal","name":"Horizontal"},{"id":"charts-primitives-categoryaxes--without-grid","name":"Without Grid"}],"example":{"file":"charts/core/distribution/category-axes.stories.tsx","story":"Default"}},{"name":"CategoryGroupAxis","slug":"category-group-axis","category":"charts","subpath":"charts","page":"/docs/components/category-group-axis","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Brackets and labels of category groups, placed `offset` pixels below the plot.","declarationFile":"charts/core/cartesian/category-group-axis.tsx","props":[{"name":"spans","type":"readonly CategoryGroupSpan[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/category-group-axis.tsx"},{"name":"offset","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/category-group-axis.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-categorygroupaxis--default","name":"Default"},{"id":"charts-primitives-categorygroupaxis--narrow","name":"Narrow"}],"example":{"file":"charts/core/cartesian/category-group-axis.stories.tsx","story":"Default"}},{"name":"CategorySlider","slug":"category-slider","category":"charts","subpath":"charts","page":"/docs/components/category-slider","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Focusable keyboard layer laid over the drawing. It ignores the pointer\n(`pointer-events: none`), so hovering still reaches the marks underneath.","declarationFile":"charts/core/category-explorer.tsx","props":[{"name":"explorer","type":"CategoryExplorer","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/category-explorer.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/category-explorer.tsx"},{"name":"count","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/category-explorer.tsx"},{"name":"valueText","type":"string","required":true,"default":null,"description":"What a screen reader hears for the current category.","deprecated":false,"file":"charts/core/category-explorer.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/category-explorer.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-categoryslider--default","name":"Default"}],"example":{"file":"charts/core/category-slider.stories.tsx","story":"Default"}},{"name":"ChartBreadcrumb","slug":"chart-breadcrumb","category":"charts","subpath":"charts","page":"/docs/components/chart-breadcrumb","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Drill-down path of a hierarchy chart. Every ancestor is a button that\nzooms back out to it; the current node is marked with `aria-current`.","declarationFile":"charts/core/breadcrumb.tsx","props":[{"name":"items","type":"readonly ChartBreadcrumbItem[]","required":true,"default":null,"description":"Root first, current node last.","deprecated":false,"file":"charts/core/breadcrumb.tsx"},{"name":"onSelect","type":"(id: string) => void","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/breadcrumb.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name of the navigation landmark.","deprecated":false,"file":"charts/core/breadcrumb.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/breadcrumb.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartbreadcrumb--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--root-only","name":"Root Only"},{"id":"charts-primitives-chartbreadcrumb--interactive","name":"Interactive"}],"example":{"file":"charts/core/chart-breadcrumb.stories.tsx","story":"Default"}},{"name":"ChartBrush","slug":"chart-brush","category":"charts","subpath":"charts","page":"/docs/components/chart-brush","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Overview of the whole series with a draggable window. Drag the window to\npan, its handles to resize, or anywhere outside to draw a new window.\nKeyboard: arrows pan, Shift+arrows resize the end, Home/End jump.","declarationFile":"charts/core/cartesian/brush.tsx","props":[{"name":"count","type":"number","required":true,"default":null,"description":"Total number of categories (the full, un-zoomed data).","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"series","type":"readonly { id: string; color: string; data: ReadonlyArray<number | null>; }[]","required":true,"default":null,"description":"Full-length series drawn as the overview.","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"indices","type":"readonly number[]","required":false,"default":null,"description":"Original category index of each entry of `series` when the series were downsampled.","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"range","type":"IndexRange","required":true,"default":null,"description":"Selected window, inclusive indices.","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"onChange","type":"(range: IndexRange) => void","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"width","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"left","type":"number","required":true,"default":null,"description":"Align with the plot above.","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"right","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"height","type":"number","required":false,"default":"52","description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"valueText","type":"string","required":true,"default":null,"description":"Text for screen readers describing the window, e.g. \"6 oct – 20 oct\".","deprecated":false,"file":"charts/core/cartesian/brush.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/brush.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartbrush--default","name":"Default"},{"id":"charts-primitives-chartbrush--full-range","name":"Full Range"}],"example":{"file":"charts/core/chart-brush.stories.tsx","story":"Default"}},{"name":"ChartDataTable","slug":"chart-data-table","category":"charts","subpath":"charts","page":"/docs/components/chart-data-table","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Visually hidden table with the same numbers as the chart, so the data is\nreachable by screen readers (and by copy/paste) without relying on color.","declarationFile":"charts/core/data-table.tsx","props":[{"name":"caption","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/data-table.tsx"},{"name":"categoryHeader","type":"string","required":true,"default":null,"description":"Header of the first column.","deprecated":false,"file":"charts/core/data-table.tsx"},{"name":"categories","type":"readonly string[]","required":true,"default":null,"description":"Row headers, already formatted.","deprecated":false,"file":"charts/core/data-table.tsx"},{"name":"columns","type":"readonly { id: string; name: string; values: ReadonlyArray<string>; }[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/data-table.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartdatatable--default","name":"Default"},{"id":"charts-primitives-chartdatatable--missing-values","name":"Missing Values"}],"example":{"file":"charts/core/chart-data-table.stories.tsx","story":"Default"}},{"name":"ChartEmpty","slug":"chart-empty","category":"charts","subpath":"charts","page":"/docs/components/chart-empty","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Shown when there is nothing to plot: keeps the chart's footprint, says why.","declarationFile":"charts/core/chart-states.tsx","props":[{"name":"height","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-axes--default","name":"Default"},{"id":"charts-primitives-axes--dual-axis","name":"Dual Axis"},{"id":"charts-primitives-axes--without-grid","name":"Without Grid"},{"id":"charts-primitives-cartesianchart--default","name":"Default"},{"id":"charts-primitives-cartesianchart--stacked","name":"Stacked"},{"id":"charts-primitives-cartesianchart--horizontal","name":"Horizontal"},{"id":"charts-primitives-cartesianchart--columns-and-line-on-right-axis","name":"Columns And Line On Right Axis"},{"id":"charts-primitives-cartesianchart--area-with-goal","name":"Area With Goal"},{"id":"charts-primitives-cartesianchart--with-brush","name":"With Brush"},{"id":"charts-primitives-cartesianchart--loading","name":"Loading"},{"id":"charts-primitives-cartesianchart--empty","name":"Empty"},{"id":"charts-primitives-categoryslider--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--root-only","name":"Root Only"},{"id":"charts-primitives-chartbreadcrumb--interactive","name":"Interactive"},{"id":"charts-primitives-chartbrush--default","name":"Default"},{"id":"charts-primitives-chartbrush--full-range","name":"Full Range"},{"id":"charts-primitives-chartdatatable--default","name":"Default"},{"id":"charts-primitives-chartdatatable--missing-values","name":"Missing Values"},{"id":"charts-primitives-chartframe--default","name":"Default"},{"id":"charts-primitives-chartframe--fills-parent","name":"Fills Parent"},{"id":"charts-primitives-chartframe--aspect-ratio","name":"Aspect Ratio"},{"id":"charts-primitives-chartframe--with-legend-and-table","name":"With Legend And Table"},{"id":"charts-primitives-chartframe--loading","name":"Loading"},{"id":"charts-primitives-chartframe--loading-ring","name":"Loading Ring"},{"id":"charts-primitives-chartframe--empty","name":"Empty"},{"id":"charts-primitives-chartlegend--read-only","name":"Read Only"},{"id":"charts-primitives-chartlegend--toggleable","name":"Toggleable"},{"id":"charts-primitives-chartlegend--centered","name":"Centered"},{"id":"charts-primitives-chartskeleton--bars","name":"Bars"},{"id":"charts-primitives-chartskeleton--line","name":"Line"},{"id":"charts-primitives-chartskeleton--ring","name":"Ring"},{"id":"charts-primitives-chartskeleton--empty","name":"Empty"},{"id":"charts-primitives-charttooltip--default","name":"Default"},{"id":"charts-primitives-charttooltip--flips-near-the-right-edge","name":"Flips Near The Right Edge"},{"id":"charts-primitives-charttooltip--without-title","name":"Without Title"},{"id":"charts-primitives-exportmenu--default","name":"Default"},{"id":"charts-primitives-exportmenu--spanish","name":"Spanish"},{"id":"charts-primitives-hierarchyheader--default","name":"Default"},{"id":"charts-primitives-hierarchyheader--at-root","name":"At Root"},{"id":"charts-primitives-hierarchylegend--default","name":"Default"},{"id":"charts-primitives-hierarchylegend--drilled-in","name":"Drilled In"},{"id":"charts-primitives-hierarchylegend--limited","name":"Limited"},{"id":"charts-primitives-hierarchylegend--leaf","name":"Leaf"},{"id":"charts-primitives-hierarchytable--default","name":"Default"},{"id":"charts-primitives-hierarchytable--from-branch","name":"From Branch"},{"id":"charts-primitives-chartpatterndefs--gallery","name":"Gallery"},{"id":"charts-primitives-chartpatterndefs--custom-tile","name":"Custom Tile"},{"id":"charts-primitives-plotoverlay--default","name":"Default"},{"id":"charts-primitives-plotoverlay--vertical-keys","name":"Vertical Keys"},{"id":"charts-primitives-plotoverlay--both-axes-keys","name":"Both Axes Keys"},{"id":"charts-primitives-unitglyph--default","name":"Default"},{"id":"charts-primitives-unitglyph--fills-up","name":"Fills Up"},{"id":"charts-primitives-unitglyph--scissors","name":"Scissors"},{"id":"charts-primitives-unitglyph--without-track","name":"Without Track"}],"example":{"file":"charts/core/axes.stories.tsx","story":"Default"}},{"name":"ChartFrame","slug":"chart-frame","category":"charts","subpath":"charts","page":"/docs/components/chart-frame","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Shared outer shell for every chart: measures its slot (width and, when\nfilling, height), swaps in the loading or empty state, and places the\nlegend, drawing, footer and the hidden data table in a consistent order.\nThe root has no padding or margin: the drawing touches the container edges.","declarationFile":"charts/core/chart-frame.tsx","props":[{"name":"height","type":"number | \"fill\" | ((width: number) => number)","required":true,"default":null,"description":"Height of the drawing area in pixels (legend and brush are extra), or\n`\"fill\"` to take whatever height the parent leaves after the legend and\nfooter. The parent needs a definite height (fixed, flex or grid sized).\nA function derives the height from the measured width.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio of the drawing. Wins over a pixel `height`; ignored with `\"fill\"`.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"labels","type":"ChartLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"empty","type":"boolean","required":false,"default":null,"description":"Nothing to plot: renders the empty state instead of `children`.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"skeleton","type":"\"line\" | \"bars\" | \"ring\"","required":false,"default":"\"bars\"","description":"Skeleton silhouette while loading.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"legend","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"legendPosition","type":"\"top\" | \"bottom\"","required":false,"default":"\"top\"","description":"","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"legendAside","type":"boolean","required":false,"default":"false","description":"Polar charts: when the container is wide (`@lg/chart`) the legend moves\nto a column beside the drawing instead of stacking above or below it.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"table","type":"ReactNode","required":false,"default":null,"description":"Accessible data table (usually `ChartDataTable`), rendered after the drawing.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"footer","type":"ReactNode","required":false,"default":null,"description":"Content under the drawing, e.g. the brush. Hidden while loading or empty.","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-frame.tsx"},{"name":"children","type":"(width: number, height: number) => ReactNode","required":true,"default":null,"description":"Receives the measured width and the drawing height (a fallback on the server).","deprecated":false,"file":"charts/core/chart-frame.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartframe--default","name":"Default"},{"id":"charts-primitives-chartframe--fills-parent","name":"Fills Parent"},{"id":"charts-primitives-chartframe--aspect-ratio","name":"Aspect Ratio"},{"id":"charts-primitives-chartframe--with-legend-and-table","name":"With Legend And Table"},{"id":"charts-primitives-chartframe--loading","name":"Loading"},{"id":"charts-primitives-chartframe--loading-ring","name":"Loading Ring"},{"id":"charts-primitives-chartframe--empty","name":"Empty"}],"example":{"file":"charts/core/chart-frame.stories.tsx","story":"Default"}},{"name":"ChartGrid","slug":"chart-grid","category":"charts","subpath":"charts","page":"/docs/components/chart-grid","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/chart-grid"],"summary":"Small multiples (trellis): the same chart repeated per category over shared\nscales, so panels compare at a glance. Columns follow the width of the\ncontainer, never the viewport.","declarationFile":"charts/chart-grid/chart-grid.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the whole grid.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"panels","type":"readonly ChartGridPanel[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"children","type":"(panel: ChartGridPanel, context: ChartGridContext) => ReactNode","required":true,"default":null,"description":"Renders the chart of one panel. Fill the panel: pass `ctx.height` and the shared domain on.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"minPanelWidth","type":"number","required":false,"default":"220","description":"Narrowest a panel may get before the grid drops a column (container-based).","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"maxColumns","type":"number","required":false,"default":"6","description":"","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"gap","type":"number","required":false,"default":"16","description":"","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"panelHeight","type":"number","required":false,"default":null,"description":"Height of every chart in pixels. Default: derived from the panel width (about 1.4:1), at least 180.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio for the charts; wins over `panelHeight`.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"sharedValueDomain","type":"boolean","required":false,"default":"true","description":"One value domain for every panel (default true).","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"sharedXDomain","type":"boolean","required":false,"default":"false","description":"One x domain for every panel.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"includeZero","type":"boolean","required":false,"default":"false","description":"Bars: keep zero inside the shared domain.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"legend","type":"readonly LegendItem[]","required":false,"default":null,"description":"One legend for all panels (their own legends should be off).","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"syncHover","type":"boolean","required":false,"default":"false","description":"Hovering a panel shows the real crosshair and tooltip in every other panel.\nThe charts must receive `context.syncId` as their `syncId`; panels only\nreact when the hovered category exists in them.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"bordered","type":"boolean","required":false,"default":"false","description":"Draw a border around every panel.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"emptyLabel","type":"string","required":false,"default":"\"No data\"","description":"Text when there are no panels.","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chart-grid/chart-grid.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-chartgrid--trellis","name":"Trellis"},{"id":"charts-chartgrid--trellis-sync-hover","name":"Trellis Sync Hover"},{"id":"charts-chartgrid--trellis-bars","name":"Trellis Bars"},{"id":"charts-chartgrid--narrow","name":"Narrow"},{"id":"charts-chartgrid--empty","name":"Empty"}],"example":{"file":"charts/chart-grid/chart-grid.stories.tsx","story":"Trellis"}},{"name":"ChartInkToolbar","slug":"chart-ink-toolbar","category":"charts","subpath":"charts","page":"/docs/components/chart-ink-toolbar","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Buttons for the ruler and pen tools plus undo, redo and clear. Place it next to the chart.","declarationFile":"charts/core/cartesian/ink-layer.tsx","props":[{"name":"ink","type":"ChartInk","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/ink-layer.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/ink-layer.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-inkannotations--default","name":"Default"},{"id":"charts-inkannotations--on-bars","name":"On Bars"},{"id":"charts-inkannotations--on-horizontal-bars","name":"On Horizontal Bars"},{"id":"charts-inkannotations--narrow","name":"Narrow"},{"id":"charts-inkannotations--brutal-preset","name":"Brutal Preset"},{"id":"charts-inkannotations--keyboard","name":"Keyboard"},{"id":"charts-inkannotations--downsampled","name":"Downsampled"}],"example":{"file":"charts/core/cartesian/ink-layer.stories.tsx","story":"Default"}},{"name":"ChartLegend","slug":"chart-legend","category":"charts","subpath":"charts","page":"/docs/components/chart-legend","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Series legend. Each item is a toggle button (`aria-pressed`), so hiding a\nseries works with mouse, touch and keyboard; hovering or focusing one dims\nthe rest of the chart.","declarationFile":"charts/core/legend.tsx","props":[{"name":"items","type":"readonly LegendItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/legend.tsx"},{"name":"onToggle","type":"((id: string) => void)","required":false,"default":null,"description":"Click toggles a series. Omit for a read-only legend.","deprecated":false,"file":"charts/core/legend.tsx"},{"name":"onHighlight","type":"((id: string | null) => void)","required":false,"default":null,"description":"Hover or focus of an item, `null` when leaving: used to dim the other series.","deprecated":false,"file":"charts/core/legend.tsx"},{"name":"align","type":"\"center\" | \"start\" | \"end\"","required":false,"default":"\"start\"","description":"","deprecated":false,"file":"charts/core/legend.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/legend.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartlegend--read-only","name":"Read Only"},{"id":"charts-primitives-chartlegend--toggleable","name":"Toggleable"},{"id":"charts-primitives-chartlegend--centered","name":"Centered"}],"example":{"file":"charts/core/chart-legend.stories.tsx","story":"ReadOnly"}},{"name":"ChartPatternDefs","slug":"chart-pattern-defs","category":"charts","subpath":"charts","page":"/docs/components/chart-pattern-defs","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"`<pattern>` definitions to place inside an `<svg><defs>`. Strokes and fills\nuse the item colour through `style`, so tokens resolve per theme.","declarationFile":"charts/core/pattern-defs.tsx","props":[{"name":"items","type":"readonly PatternDefItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/pattern-defs.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartpatterndefs--gallery","name":"Gallery"},{"id":"charts-primitives-chartpatterndefs--custom-tile","name":"Custom Tile"}],"example":{"file":"charts/core/pattern-defs.stories.tsx","story":"Gallery"}},{"name":"ChartSkeleton","slug":"chart-skeleton","category":"charts","subpath":"charts","page":"/docs/components/chart-skeleton","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Loading placeholder with the rough shape of the chart that is coming.","declarationFile":"charts/core/chart-states.tsx","props":[{"name":"height","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"},{"name":"shape","type":"\"line\" | \"bars\" | \"ring\"","required":false,"default":"\"bars\"","description":"\"bars\" mimics columns, \"line\" a soft wave, \"ring\" a donut (for polar charts).","deprecated":false,"file":"charts/core/chart-states.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/chart-states.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-chartskeleton--bars","name":"Bars"},{"id":"charts-primitives-chartskeleton--line","name":"Line"},{"id":"charts-primitives-chartskeleton--ring","name":"Ring"},{"id":"charts-primitives-chartskeleton--empty","name":"Empty"}],"example":{"file":"charts/core/chart-states.stories.tsx","story":"Bars"}},{"name":"ChartSyncProvider","slug":"chart-sync-provider","category":"charts","subpath":"charts","page":"/docs/components/chart-sync-provider","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Scopes chart sync to its children, so two groups that happen to use the same\n`syncId` never talk to each other. Optional: charts with the same `syncId`\nalready sync through a shared default store.","declarationFile":"charts/core/cartesian/sync.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/sync.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-categorygroupaxis--default","name":"Default"},{"id":"charts-primitives-categorygroupaxis--narrow","name":"Narrow"},{"id":"charts-inkannotations--default","name":"Default"},{"id":"charts-inkannotations--on-bars","name":"On Bars"},{"id":"charts-inkannotations--on-horizontal-bars","name":"On Horizontal Bars"},{"id":"charts-inkannotations--narrow","name":"Narrow"},{"id":"charts-inkannotations--brutal-preset","name":"Brutal Preset"},{"id":"charts-inkannotations--keyboard","name":"Keyboard"},{"id":"charts-inkannotations--downsampled","name":"Downsampled"}],"example":{"file":"charts/core/cartesian/category-group-axis.stories.tsx","story":"Default"}},{"name":"ChartTooltip","slug":"chart-tooltip","category":"charts","subpath":"charts","page":"/docs/components/chart-tooltip","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Floating card that lists every series at the hovered position. Purely\nvisual (`aria-hidden`): screen readers get the same numbers from the live\nregion and the hidden data table. Moves with a GPU transform, so following\nthe pointer never triggers layout. Its own width is measured so the card\nalways stays inside the container: it takes the side of the anchor with\nroom, and is clamped to the edges when neither side fits (narrow charts).","declarationFile":"charts/core/tooltip.tsx","props":[{"name":"x","type":"number","required":true,"default":null,"description":"Anchor in pixels, relative to the positioned chart container.","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"y","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"containerWidth","type":"number","required":true,"default":null,"description":"Width of the container; the tooltip prefers the left of the anchor past 60% and never leaves it.","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"title","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"rows","type":"readonly TooltipRow[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"body","type":"string","required":false,"default":null,"description":"Wrapped sentence under the title, for notes that are not series values.","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"side","type":"\"left\" | \"right\"","required":false,"default":null,"description":"Forces the side of the anchor the card opens on (when it fits); by default it follows the anchor.","deprecated":false,"file":"charts/core/tooltip.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/tooltip.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-charttooltip--default","name":"Default"},{"id":"charts-primitives-charttooltip--flips-near-the-right-edge","name":"Flips Near The Right Edge"},{"id":"charts-primitives-charttooltip--without-title","name":"Without Title"}],"example":{"file":"charts/core/chart-tooltip.stories.tsx","story":"Default"}},{"name":"ChordChart","slug":"chord-chart","category":"charts","subpath":"charts","page":"/docs/components/chord-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/chord-chart"],"summary":"Chord diagram: groups share a circle, ribbons between them are the flows\n(who switches to whom, which service goes with which). Hover a group to\nlight its ribbons, a ribbon to isolate it; arrows walk the groups.","declarationFile":"charts/chord-chart/chord-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"groups","type":"readonly ChordGroupInput[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"matrix","type":"readonly (readonly number[])[]","required":true,"default":null,"description":"`matrix[i][j]`: flow from group `i` to group `j`. A group's arc spans its row sum.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"padAngle","type":"number","required":false,"default":"3","description":"Gap between groups, in degrees.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":"0","description":"Where the first group starts, degrees from twelve o'clock.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"ringWidth","type":"number","required":false,"default":"0.09","description":"Thickness of the group ring as a fraction of the radius.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"sortGroups","type":"\"input\" | \"ascending\" | \"descending\"","required":false,"default":"\"input\"","description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"sortSubgroups","type":"\"input\" | \"ascending\" | \"descending\"","required":false,"default":"\"descending\"","description":"Order of the ribbon ends inside a group.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"showLabels","type":"boolean","required":false,"default":"true","description":"Group names around the ring (hidden automatically in narrow containers).","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"420","description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio of the drawing; ignored with `\"fill\"`.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"exportable","type":"boolean","required":false,"default":"false","description":"SVG and PNG export buttons.","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"labels","type":"Partial<ChordLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"onGroupClick","type":"((group: ChordGroupInput, index: number) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/chord-chart/chord-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-chordchart--default","name":"Default"},{"id":"charts-chordchart--sorted","name":"Sorted"},{"id":"charts-chordchart--services","name":"Services"},{"id":"charts-chordchart--loading","name":"Loading"},{"id":"charts-chordchart--empty","name":"Empty"},{"id":"charts-chordchart--export","name":"Export"},{"id":"charts-chordchart--dark","name":"Dark"},{"id":"charts-chordchart--narrow","name":"Narrow"},{"id":"charts-chordchart--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/chord-chart/chord-chart.stories.tsx","story":"Default"}},{"name":"ChoroplethDrilldown","slug":"choropleth-drilldown","category":"charts","subpath":"charts","page":"/docs/components/choropleth-drilldown","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/choropleth-map"],"summary":"`ChoroplethMap` that opens a region into a finer map (world to country, country to\ndepartments) with a breadcrumb back up. The map of each level only needs its own geometry, so\nonly levels the user opens are ever drawn. The path is announced politely to screen readers.","declarationFile":"charts/choropleth-map/choropleth-drilldown.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name; the current level is appended: \"Clientes: Perú\".","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"root","type":"DrilldownLevel","required":true,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"resolve","type":"(region: ChoroplethRegionInfo, path: readonly DrilldownLevel[]) => DrilldownLevel | null | undefined","required":true,"default":null,"description":"Level to open when a region is clicked, given the path so far (root first), or nothing when\nthat region has no detail (the click goes to `onRegionClick`).","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":"\"Map level\"","description":"Accessible name of the breadcrumb navigation.","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"onNavigate","type":"((path: readonly DrilldownLevel[]) => void)","required":false,"default":null,"description":"Called after every change of level with the new path (root first).","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"onRegionClick","type":"((region: ChoroplethRegionInfo, path: readonly DrilldownLevel[]) => void)","required":false,"default":null,"description":"Click on a region without detail.","deprecated":false,"file":"charts/choropleth-map/choropleth-drilldown.tsx"},{"name":"center","type":"number","required":false,"default":null,"description":"Neutral value of a diverging scale.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"legend","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height in px, \"fill\" or the default (half of the width, at least 220).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"labels","type":"Partial<MapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":null,"description":"\"sequential\" (empty to brand) or \"diverging\" (low hue, neutral at `center`, brand).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"Fixed [min, max] of the color scale; the data extent by default.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped (threshold) coloring; replaces the continuous scale.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"valueName","type":"string","required":false,"default":null,"description":"Name of the value in the tooltip and the data table, e.g. \"Clientes\".","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"projection","type":"\"equirectangular\" | \"mercator\" | \"equalEarth\" | \"fitted\"","required":false,"default":null,"description":"Overrides the projection of the map.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"regionLabels","type":"\"name\" | \"value\" | \"none\"","required":false,"default":null,"description":"Text drawn on each region where it fits: its name or its value.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"dataTable","type":"\"hidden\" | \"toggle\" | \"visible\"","required":false,"default":null,"description":"The numbers as a real table, the accessible alternative to color: \"hidden\" (default, for\nscreen readers only), \"visible\" (replaces the map) or \"toggle\" (a button switches between\nthe map and the table).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"zoomable","type":"boolean","required":false,"default":null,"description":"Zoom buttons, wheel, drag and pinch.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"wheelZoom","type":"\"always\" | \"modifier\"","required":false,"default":null,"description":"\"modifier\": the wheel only zooms with Ctrl or Cmd held, so page scrolling is never trapped.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"maxZoom","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-choroplethmap--default","name":"Default"},{"id":"charts-choroplethmap--region-labels","name":"Region Labels"},{"id":"charts-choroplethmap--diverging","name":"Diverging"},{"id":"charts-choroplethmap--thresholds","name":"Thresholds"},{"id":"charts-choroplethmap--missing-data","name":"Missing Data"},{"id":"charts-choroplethmap--world","name":"World"},{"id":"charts-choroplethmap--world-mercator","name":"World Mercator"},{"id":"charts-choroplethmap--drilldown","name":"Drilldown"},{"id":"charts-choroplethmap--data-table","name":"Data Table"},{"id":"charts-choroplethmap--data-table-toggle","name":"Data Table Toggle"},{"id":"charts-choroplethmap--data-table-narrow","name":"Data Table Narrow"},{"id":"charts-choroplethmap--loading","name":"Loading"},{"id":"charts-choroplethmap--empty","name":"Empty"},{"id":"charts-choroplethmap--narrow","name":"Narrow"},{"id":"charts-choroplethmap--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/choropleth-map/choropleth-map.stories.tsx","story":"Default"}},{"name":"ChoroplethMap","slug":"choropleth-map","category":"charts","subpath":"charts","page":"/docs/components/choropleth-map","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/choropleth-map"],"summary":"Regions colored by value: customers by department, sales by country.\nSequential, diverging or threshold scales come from tokens, so the map\nfollows the theme and accent. Hover or arrow keys highlight a region and\nshow its value; click or Enter calls `onRegionClick`; zoom with the\nbuttons, wheel, pinch or `+` / `-`, drag to pan, `0` to fit.","declarationFile":"charts/choropleth-map/choropleth-map.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"map","type":"GeoMap","required":true,"default":null,"description":"Geometry to draw, e.g. `peruMap` from `@jcsoftdev/ui/charts/maps/data/peru`.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"data","type":"readonly ChoroplethDatum[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":"\"sequential\"","description":"\"sequential\" (empty to brand) or \"diverging\" (low hue, neutral at `center`, brand).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"Fixed [min, max] of the color scale; the data extent by default.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"Neutral value of a diverging scale.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped (threshold) coloring; replaces the continuous scale.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"valueName","type":"string","required":false,"default":null,"description":"Name of the value in the tooltip and the data table, e.g. \"Clientes\".","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"projection","type":"\"equirectangular\" | \"mercator\" | \"equalEarth\" | \"fitted\"","required":false,"default":null,"description":"Overrides the projection of the map.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"regionLabels","type":"\"name\" | \"value\" | \"none\"","required":false,"default":"\"none\"","description":"Text drawn on each region where it fits: its name or its value.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height in px, \"fill\" or the default (half of the width, at least 220).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"dataTable","type":"\"hidden\" | \"toggle\" | \"visible\"","required":false,"default":"\"hidden\"","description":"The numbers as a real table, the accessible alternative to color: \"hidden\" (default, for\nscreen readers only), \"visible\" (replaces the map) or \"toggle\" (a button switches between\nthe map and the table).","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"zoomable","type":"boolean","required":false,"default":"true","description":"Zoom buttons, wheel, drag and pinch.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"wheelZoom","type":"\"always\" | \"modifier\"","required":false,"default":"\"modifier\"","description":"\"modifier\": the wheel only zooms with Ctrl or Cmd held, so page scrolling is never trapped.","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"maxZoom","type":"number","required":false,"default":"16","description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"labels","type":"Partial<MapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"onRegionClick","type":"((region: ChoroplethRegionInfo) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/choropleth-map/choropleth-map.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-choroplethmap--default","name":"Default"},{"id":"charts-choroplethmap--region-labels","name":"Region Labels"},{"id":"charts-choroplethmap--diverging","name":"Diverging"},{"id":"charts-choroplethmap--thresholds","name":"Thresholds"},{"id":"charts-choroplethmap--missing-data","name":"Missing Data"},{"id":"charts-choroplethmap--world","name":"World"},{"id":"charts-choroplethmap--world-mercator","name":"World Mercator"},{"id":"charts-choroplethmap--drilldown","name":"Drilldown"},{"id":"charts-choroplethmap--data-table","name":"Data Table"},{"id":"charts-choroplethmap--data-table-toggle","name":"Data Table Toggle"},{"id":"charts-choroplethmap--data-table-narrow","name":"Data Table Narrow"},{"id":"charts-choroplethmap--loading","name":"Loading"},{"id":"charts-choroplethmap--empty","name":"Empty"},{"id":"charts-choroplethmap--narrow","name":"Narrow"},{"id":"charts-choroplethmap--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/choropleth-map/choropleth-map.stories.tsx","story":"Default"}},{"name":"ComboChart","slug":"combo-chart","category":"charts","subpath":"charts","page":"/docs/components/combo-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/combo-chart"],"summary":"Columns and lines on one plot, e.g. revenue as columns with appointments\nas a line on a second axis. `stack` applies to the columns only.","declarationFile":"charts/combo-chart/combo-chart.tsx","props":[{"name":"series","type":"readonly ComboSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/combo-chart/combo-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"gradient","type":"boolean","required":false,"default":null,"description":"Gradient fill under areas (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"barRadius","type":"number","required":false,"default":null,"description":"Corner radius at the value end of bars, 6 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rightAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"Secondary axis for series with `axis: \"right\"`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"One entry per data point: strings, numbers or dates.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"stack","type":"\"normal\" | \"none\" | \"percent\"","required":false,"default":null,"description":"Stacks every area and column series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"smooth\"","description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"markers","type":"boolean","required":false,"default":null,"description":"Dots on every line point. Hovered points are always marked.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"lineGradient","type":"boolean","required":false,"default":null,"description":"Strokes lines with a gradient from each series color to the next palette color.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-combochart--default","name":"Default"},{"id":"charts-combochart--columns-and-area","name":"Columns And Area"},{"id":"charts-combochart--stacked-columns-with-total-line","name":"Stacked Columns With Total Line"},{"id":"charts-combochart--multi-axis","name":"Multi Axis"},{"id":"charts-combochart--multi-axis-narrow","name":"Multi Axis Narrow"},{"id":"charts-combochart--loading","name":"Loading"}],"example":{"file":"charts/combo-chart/combo-chart.stories.tsx","story":"Default"}},{"name":"CrossfilterBarChart","slug":"crossfilter-bar-chart","category":"charts","subpath":"charts","page":"/docs/components/crossfilter-bar-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/crossfilter"],"summary":"Bars per category of one dimension. Click a bar to filter by it (click again to undo, several\nbars add up). The light bars are the totals, the accent ones what the OTHER charts leave in;\ncategories outside this chart's own filter are dimmed.","declarationFile":"charts/crossfilter/crossfilter.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"dimension","type":"string","required":true,"default":null,"description":"Dimension id (a key of the provider's `dimensions`).","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"keys","type":"readonly DimensionValue[]","required":false,"default":null,"description":"Categories in display order; otherwise the order of first appearance.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"keyLabel","type":"((key: DimensionValue) => string)","required":false,"default":"String","description":"Text of a category on the axis.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"measure","type":"((record: never) => number)","required":false,"default":null,"description":"Add this instead of counting records, e.g. `(sale) => sale.total` for revenue.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"labels","type":"Partial<CrossfilterLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-crossfilter--ventas-cruzadas","name":"Ventas Cruzadas"},{"id":"charts-crossfilter--filtro-inicial","name":"Filtro Inicial"},{"id":"charts-crossfilter--narrow","name":"Narrow"},{"id":"charts-crossfilter--brutal-preset","name":"Brutal Preset"},{"id":"charts-crossfilter--pincel-rectangular","name":"Pincel Rectangular"},{"id":"charts-crossfilter--pincel-inicial","name":"Pincel Inicial"},{"id":"charts-crossfilter--pincel-narrow","name":"Pincel Narrow"},{"id":"charts-crossfilter--pincel-tactil","name":"Pincel Tactil"}],"example":{"file":"charts/crossfilter/crossfilter.stories.tsx","story":"VentasCruzadas"}},{"name":"CrossfilterHistogram","slug":"crossfilter-histogram","category":"charts","subpath":"charts","page":"/docs/components/crossfilter-histogram","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/crossfilter"],"summary":"Distribution of a numeric dimension. Drag across the bars to filter by that interval, or click a\nbin; the band stays drawn until you click it again or press Clear.","declarationFile":"charts/crossfilter/crossfilter.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"dimension","type":"string","required":true,"default":null,"description":"Numeric dimension to bin.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"edges","type":"readonly number[]","required":false,"default":null,"description":"Bin edges; or give `domain` and `bins` to split evenly.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":"[0, 100]","description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"bins","type":"number","required":false,"default":"10","description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"edgeFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of the bin edges in the axis and tooltip.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"labels","type":"Partial<CrossfilterLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-crossfilter--ventas-cruzadas","name":"Ventas Cruzadas"},{"id":"charts-crossfilter--filtro-inicial","name":"Filtro Inicial"},{"id":"charts-crossfilter--narrow","name":"Narrow"},{"id":"charts-crossfilter--brutal-preset","name":"Brutal Preset"},{"id":"charts-crossfilter--pincel-rectangular","name":"Pincel Rectangular"},{"id":"charts-crossfilter--pincel-inicial","name":"Pincel Inicial"},{"id":"charts-crossfilter--pincel-narrow","name":"Pincel Narrow"},{"id":"charts-crossfilter--pincel-tactil","name":"Pincel Tactil"}],"example":{"file":"charts/crossfilter/crossfilter.stories.tsx","story":"VentasCruzadas"}},{"name":"CrossfilterProvider","slug":"crossfilter-provider","category":"charts","subpath":"charts","page":"/docs/components/crossfilter-provider","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/crossfilter"],"summary":"Shares one dataset and its filters with every chart inside: each chart filters by brushing or\nclicking, and every other chart (and any table fed from `useCrossfilter().filtered`) follows.","declarationFile":"charts/crossfilter/crossfilter.tsx","props":[{"name":"data","type":"readonly T[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"dimensions","type":"Readonly<Record<string, Accessor<T>>>","required":true,"default":null,"description":"How to read each dimension from a record. Keep the object stable (module level or memoized).","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"initialFilters","type":"Readonly<Record<string, CrossfilterFilter>>","required":false,"default":"NO_FILTERS","description":"Filters when the page loads.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-crossfilter--ventas-cruzadas","name":"Ventas Cruzadas"},{"id":"charts-crossfilter--filtro-inicial","name":"Filtro Inicial"},{"id":"charts-crossfilter--narrow","name":"Narrow"},{"id":"charts-crossfilter--brutal-preset","name":"Brutal Preset"},{"id":"charts-crossfilter--pincel-rectangular","name":"Pincel Rectangular"},{"id":"charts-crossfilter--pincel-inicial","name":"Pincel Inicial"},{"id":"charts-crossfilter--pincel-narrow","name":"Pincel Narrow"},{"id":"charts-crossfilter--pincel-tactil","name":"Pincel Tactil"}],"example":{"file":"charts/crossfilter/crossfilter.stories.tsx","story":"VentasCruzadas"}},{"name":"CrossfilterScatter","slug":"crossfilter-scatter","category":"charts","subpath":"charts","page":"/docs/components/crossfilter-scatter","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/crossfilter"],"summary":"One dot per record: accent for the records every filter leaves in, faint for the rest, so the\ndots you filtered out stay visible as context. Drag a rectangle to filter both dimensions at\nonce (a click clears it). From the keyboard, focus the brush after the plot: arrows move the\nrectangle, Shift and arrows resize it, Enter applies it and Escape clears it. On touch the page\nkeeps scrolling: rest a finger on the plot for about 350 ms (`touchDelay`) and then drag to draw.","declarationFile":"charts/crossfilter/crossfilter.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"x","type":"string","required":true,"default":null,"description":"Numeric dimensions on each axis.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"y","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"xFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"yFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"pointLabel","type":"((record: never) => string)","required":false,"default":null,"description":"Name of the point in tooltips, e.g. the client.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"xLabel","type":"string","required":false,"default":null,"description":"Names of the axes in the spoken brush range; the dimension ids by default.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"yLabel","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"brush","type":"boolean","required":false,"default":"true","description":"Rectangular brush on both dimensions (drag, or focus the plot and use the keys). On by default.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"touchDelay","type":"number","required":false,"default":null,"description":"Touch: milliseconds a finger must rest before a drag draws the rectangle (350 by default), so a\nswipe over the plot still scrolls the page. `0` brushes at once and blocks scrolling on the plot.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"jitter","type":"number","required":false,"default":null,"description":"Pixels of deterministic spread for dimensions with few distinct values.","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"labels","type":"Partial<CrossfilterLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-crossfilter--ventas-cruzadas","name":"Ventas Cruzadas"},{"id":"charts-crossfilter--filtro-inicial","name":"Filtro Inicial"},{"id":"charts-crossfilter--narrow","name":"Narrow"},{"id":"charts-crossfilter--brutal-preset","name":"Brutal Preset"},{"id":"charts-crossfilter--pincel-rectangular","name":"Pincel Rectangular"},{"id":"charts-crossfilter--pincel-inicial","name":"Pincel Inicial"},{"id":"charts-crossfilter--pincel-narrow","name":"Pincel Narrow"},{"id":"charts-crossfilter--pincel-tactil","name":"Pincel Tactil"}],"example":{"file":"charts/crossfilter/crossfilter.stories.tsx","story":"VentasCruzadas"}},{"name":"CrossfilterSummary","slug":"crossfilter-summary","category":"charts","subpath":"charts","page":"/docs/components/crossfilter-summary","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/crossfilter"],"summary":"\"128 of 480\" plus a button that clears every filter.","declarationFile":"charts/crossfilter/crossfilter.tsx","props":[{"name":"noun","type":"string","required":true,"default":null,"description":"What the records are, e.g. \"ventas\".","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"labels","type":"Partial<CrossfilterLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/crossfilter/crossfilter.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-crossfilter--ventas-cruzadas","name":"Ventas Cruzadas"},{"id":"charts-crossfilter--filtro-inicial","name":"Filtro Inicial"},{"id":"charts-crossfilter--narrow","name":"Narrow"},{"id":"charts-crossfilter--brutal-preset","name":"Brutal Preset"},{"id":"charts-crossfilter--pincel-rectangular","name":"Pincel Rectangular"},{"id":"charts-crossfilter--pincel-inicial","name":"Pincel Inicial"},{"id":"charts-crossfilter--pincel-narrow","name":"Pincel Narrow"},{"id":"charts-crossfilter--pincel-tactil","name":"Pincel Tactil"}],"example":{"file":"charts/crossfilter/crossfilter.stories.tsx","story":"VentasCruzadas"}},{"name":"DonutChart","slug":"donut-chart","category":"charts","subpath":"charts","page":"/docs/components/donut-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/donut-chart"],"summary":"Donut, pie and semi-donut. Rounded slice corners and a pixel gap between\nslices, a centre total that follows the hovered slice, slices that step out\non hover or keyboard focus, optional outside labels on leader lines (with\ncollision avoidance) and a legend that toggles slices.","declarationFile":"charts/donut-chart/donut-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"data","type":"readonly DonutDatum[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"variant","type":"\"donut\" | \"pie\"","required":false,"default":"\"donut\"","description":"`pie` fills the centre (no centre label).","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"semi","type":"boolean","required":false,"default":"false","description":"Half circle opening upwards, like a gauge.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"innerRadius","type":"number","required":false,"default":"0.62","description":"Hole size as a fraction of the outer radius (donut only).","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"cornerRadius","type":"number","required":false,"default":"6","description":"Radius of the rounded slice corners, in pixels. 0 = sharp.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"3","description":"Visible gap between slices, in pixels.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"explode","type":"number","required":false,"default":"8","description":"Pixels a hovered or focused slice moves outwards.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":"0","description":"Where the first slice starts, in degrees from 12 o'clock (full circle only).","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"monochrome","type":"string | boolean","required":false,"default":"false","description":"One hue in shades, darkest on the largest slice. `true` uses the accent; a string sets the base color.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"fill","type":"\"pattern\" | \"solid\" | \"gradient\"","required":false,"default":"\"solid\"","description":"`gradient` fades each slice towards the hole; `pattern` adds a texture per slice, so color is not the only cue.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"drilldown","type":"boolean","required":false,"default":"true","description":"Slices with `children` open on click (or Enter) with a breadcrumb to go back.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"rootLabel","type":"string","required":false,"default":null,"description":"First breadcrumb item; defaults to the chart title.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":"\"Drill-down path\"","description":"Accessible name of the breadcrumb.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"300","description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"centerLabel","type":"string","required":false,"default":null,"description":"Caption under the centre value when nothing is hovered. Defaults to the \"Total\" label.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"centerValue","type":"string","required":false,"default":null,"description":"Replaces the total shown in the centre while nothing is hovered.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"outsideLabels","type":"boolean | \"name\" | \"percent\" | \"both\"","required":false,"default":"false","description":"Names / percentages on leader lines around the ring. `true` shows both.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Ids hidden at first.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"onSliceClick","type":"((datum: DonutDatum) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-donutchart--default","name":"Default"},{"id":"charts-donutchart--outside-labels","name":"Outside Labels"},{"id":"charts-donutchart--outside-percent-only","name":"Outside Percent Only"},{"id":"charts-donutchart--semi-donut","name":"Semi Donut"},{"id":"charts-donutchart--semi-with-outside-labels","name":"Semi With Outside Labels"},{"id":"charts-donutchart--sharp-thin-ring","name":"Sharp Thin Ring"},{"id":"charts-donutchart--custom-center","name":"Custom Center"},{"id":"charts-donutchart--monochrome","name":"Monochrome"},{"id":"charts-donutchart--gradient","name":"Gradient"},{"id":"charts-donutchart--textured","name":"Textured"},{"id":"charts-donutchart--update","name":"Update"},{"id":"charts-donutchart--drilldown","name":"Drilldown"},{"id":"charts-donutchart--hidden-slices","name":"Hidden Slices"},{"id":"charts-donutchart--loading","name":"Loading"},{"id":"charts-donutchart--empty","name":"Empty"},{"id":"charts-donutchart--narrow","name":"Narrow"},{"id":"charts-donutchart--fill-parent","name":"Fill Parent"},{"id":"charts-donutchart--small-ring-long-value","name":"Small Ring Long Value"}],"example":{"file":"charts/donut-chart/donut-chart.stories.tsx","story":"Default"}},{"name":"DrilldownBarChart","slug":"drilldown-bar-chart","category":"charts","subpath":"charts","page":"/docs/components/drilldown-bar-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/bar-chart"],"summary":"Bars of one level of a hierarchy. Click (or Enter on) a bar that has\nchildren to drill into it; the breadcrumb above brings you back out.\nBars that can be opened carry a `›` after their label.","declarationFile":"charts/bar-chart/drilldown-bar-chart.tsx","props":[{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Tree to explore: the chart shows the children of the focused node.","deprecated":false,"file":"charts/bar-chart/drilldown-bar-chart.tsx"},{"name":"seriesName","type":"string","required":false,"default":"\"Value\"","description":"Name of the single series (tooltip and data table).","deprecated":false,"file":"charts/bar-chart/drilldown-bar-chart.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":"\"Drill-down path\"","description":"Accessible name of the breadcrumb navigation.","deprecated":false,"file":"charts/bar-chart/drilldown-bar-chart.tsx"},{"name":"sort","type":"boolean","required":false,"default":"true","description":"Largest first (default) or in data order.","deprecated":false,"file":"charts/bar-chart/drilldown-bar-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":null,"description":"\"horizontal\" lays categories top to bottom (bar charts).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"barRadius","type":"number","required":false,"default":null,"description":"Corner radius at the value end of bars, 6 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"stack","type":"\"normal\" | \"none\" | \"percent\"","required":false,"default":null,"description":"Stacks every area and column series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"lineGradient","type":"boolean","required":false,"default":null,"description":"Strokes lines with a gradient from each series color to the next palette color.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-barchart--default","name":"Default"},{"id":"charts-barchart--grouped","name":"Grouped"},{"id":"charts-barchart--stacked","name":"Stacked"},{"id":"charts-barchart--stacked-percent","name":"Stacked 100%"},{"id":"charts-barchart--horizontal","name":"Horizontal (top services)"},{"id":"charts-barchart--horizontal-stacked","name":"Horizontal Stacked"},{"id":"charts-barchart--negative-values","name":"Negative Values"},{"id":"charts-barchart--with-goal","name":"Annotation (weekly goal)"},{"id":"charts-barchart--data-labels","name":"Data Labels"},{"id":"charts-barchart--custom-data-labels","name":"Custom Data Labels"},{"id":"charts-barchart--distributed","name":"Distributed (a color per bar)"},{"id":"charts-barchart--rotated-labels","name":"Rotated Labels"},{"id":"charts-barchart--range-column","name":"Range column (shifts)"},{"id":"charts-barchart--range-bar","name":"Range bar (service duration)"},{"id":"charts-barchart--grouped-stacked","name":"Grouped stacked (income vs costs)"},{"id":"charts-barchart--group-labels","name":"Group labels (quarters)"},{"id":"charts-barchart--reversed","name":"Reversed value axis"},{"id":"charts-barchart--patterned","name":"Patterns (color-blind friendly)"},{"id":"charts-barchart--patterned-stacked","name":"Patterned Stacked"},{"id":"charts-barchart--drilldown","name":"Drilldown"},{"id":"charts-barchart--race","name":"Race (animated re-sort)"},{"id":"charts-barchart--loading","name":"Loading"},{"id":"charts-barchart--empty","name":"Empty"},{"id":"charts-barchart--fill-parent","name":"Fill Parent"},{"id":"charts-barchart--narrow","name":"Narrow"}],"example":{"file":"charts/bar-chart/bar-chart.stories.tsx","story":"Default"}},{"name":"DrilldownHeatmap","slug":"drilldown-heatmap","category":"charts","subpath":"charts","page":"/docs/components/drilldown-heatmap","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/heatmap-chart"],"summary":"Heatmap you can dive into: click (or press Enter on) a cell to open the\nmatrix behind it. The breadcrumb above climbs back to any earlier level.","declarationFile":"charts/heatmap-chart/drilldown-heatmap.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name when a level has no `title`.","deprecated":false,"file":"charts/heatmap-chart/drilldown-heatmap.tsx"},{"name":"root","type":"HeatmapLevel","required":true,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/drilldown-heatmap.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":"\"Path\"","description":"Accessible name of the breadcrumb landmark.","deprecated":false,"file":"charts/heatmap-chart/drilldown-heatmap.tsx"},{"name":"onLevelChange","type":"((path: readonly HeatmapLevel[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/drilldown-heatmap.tsx"},{"name":"center","type":"number","required":false,"default":null,"description":"Neutral value of a diverging scale.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":null,"description":"Color key (gradient bar or range swatches).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing in px or \"fill\"; 34 px per row plus the column header by default.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"labels","type":"Partial<HeatmapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"radius","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"renderer","type":"\"canvas\" | \"svg\"","required":false,"default":null,"description":"\"canvas\" paints the cells on a canvas, for matrices with tens of thousands\nof cells. Labels, tooltip, focus ring and keyboard stay SVG/HTML.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":null,"description":"\"sequential\" (empty to brand) or \"diverging\" (low hue, neutral at `center`, brand).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"Override the scale colors (CSS colors or tokens).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped coloring by ranges or thresholds; replaces the continuous scale.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"shape","type":"\"rect\" | \"hex\"","required":false,"default":null,"description":"\"hex\" draws a honeycomb: pointy-top hexagons with odd rows shifted half a cell.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"cellLabels","type":"boolean","required":false,"default":null,"description":"Values inside the cells (only where they fit).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"gap","type":"number","required":false,"default":null,"description":"Gap between cells in pixels.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-heatmapchart--default","name":"Default"},{"id":"charts-heatmapchart--cell-labels","name":"Cell Labels"},{"id":"charts-heatmapchart--diverging","name":"Diverging"},{"id":"charts-heatmapchart--ranges","name":"Ranges"},{"id":"charts-heatmapchart--missing-data","name":"Missing Data"},{"id":"charts-heatmapchart--calendar","name":"Calendar"},{"id":"charts-heatmapchart--calendar-ranges","name":"Calendar Ranges"},{"id":"charts-heatmapchart--rounded","name":"Rounded"},{"id":"charts-heatmapchart--honeycomb","name":"Honeycomb"},{"id":"charts-heatmapchart--continuous-datetime","name":"Continuous Datetime"},{"id":"charts-heatmapchart--canvas-dense","name":"Canvas Dense"},{"id":"charts-heatmapchart--drilldown","name":"Drilldown"},{"id":"charts-heatmapchart--narrow-drilldown","name":"Narrow Drilldown"},{"id":"charts-heatmapchart--loading","name":"Loading"},{"id":"charts-heatmapchart--empty","name":"Empty"},{"id":"charts-heatmapchart--narrow","name":"Narrow"},{"id":"charts-heatmapchart--narrow-calendar","name":"Narrow Calendar"}],"example":{"file":"charts/heatmap-chart/heatmap-chart.stories.tsx","story":"Default"}},{"name":"DumbbellChart","slug":"dumbbell-chart","category":"charts","subpath":"charts","page":"/docs/components/dumbbell-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/dumbbell-chart"],"summary":"Two or more values per category joined by a bar: the length of the line is\nthe spread, the change is last minus first. Rows run top to bottom, or\ncolumns left to right with `orientation=\"vertical\"`; use `sort` to rank by change.","declarationFile":"charts/dumbbell-chart/dumbbell-chart.tsx","props":[{"name":"items","type":"readonly DumbbellItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"fromLabel","type":"string","required":false,"default":"\"Before\"","description":"Name of the first value (the left dot), e.g. \"Mes pasado\".","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"toLabel","type":"string","required":false,"default":"\"After\"","description":"Name of the second value (the right dot), e.g. \"Este mes\".","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"fromColor","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"toColor","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"measures","type":"readonly DumbbellMeasure[]","required":false,"default":null,"description":"Names and colors of the dots when rows have `values`; the first and last are compared by the change.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"horizontal\"","description":"\"vertical\" draws a column per category with the dots stacked on the value axis.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"sort","type":"\"none\" | \"delta\" | \"abs-delta\" | \"to\"","required":false,"default":"\"none\"","description":"Order of the rows; \"delta\" puts the biggest increase first.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"rowHeight","type":"number","required":false,"default":"38","description":"Height of every row in pixels (default 38), horizontal only.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing in pixels, or `\"fill\"` to take the height of the\nparent. Horizontal rows stretch to it; by default they size themselves.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; stretches the rows to fit it.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"delta","type":"false | \"percent\" | \"absolute\"","required":false,"default":"\"absolute\"","description":"Change (last minus first value) printed next to each row. `false` hides it.","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"valueLabels","type":"boolean","required":false,"default":"true","description":"Writes the values next to the dots (default true).","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"lowerIsBetter","type":"boolean","required":false,"default":"false","description":"Colors the change green when it goes down (e.g. cancellations or waiting time).","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"xAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"Axis of the values (bottom axis, or left axis when vertical).","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"deltaLabel","type":"string","required":false,"default":"\"Change\"","description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/dumbbell-chart/dumbbell-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-dumbbellchart--default","name":"Default"},{"id":"charts-dumbbellchart--ranked-by-change","name":"Ranked By Change"},{"id":"charts-dumbbellchart--revenue","name":"Revenue"},{"id":"charts-dumbbellchart--lower-is-better","name":"Lower Is Better"},{"id":"charts-dumbbellchart--columns","name":"Columns"},{"id":"charts-dumbbellchart--three-measures","name":"Three Measures"},{"id":"charts-dumbbellchart--three-measures-columns","name":"Three Measures Columns"},{"id":"charts-dumbbellchart--loading","name":"Loading"},{"id":"charts-dumbbellchart--empty","name":"Empty"},{"id":"charts-dumbbellchart--narrow","name":"Narrow"}],"example":{"file":"charts/dumbbell-chart/dumbbell-chart.stories.tsx","story":"Default"}},{"name":"ExportMenu","slug":"export-menu","category":"charts","subpath":"charts","page":"/docs/components/export-menu","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Two compact buttons that download the chart drawing as SVG or PNG.\n`getSvgs` runs on click, so it can read the live DOM.","declarationFile":"charts/core/export-menu.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/export-menu.tsx"},{"name":"getSvgs","type":"(root: HTMLElement) => SVGSVGElement[]","required":true,"default":null,"description":"Receives the menu's own element, to find the chart around it.","deprecated":false,"file":"charts/core/export-menu.tsx"},{"name":"getLeading","type":"((root: HTMLElement) => SVGSVGElement | null)","required":false,"default":null,"description":"A mounted drawing placed left of the others; removed from the page once exported.","deprecated":false,"file":"charts/core/export-menu.tsx"},{"name":"texts","type":"ExportTexts","required":false,"default":"DEFAULT_EXPORT_TEXTS","description":"","deprecated":false,"file":"charts/core/export-menu.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/export-menu.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-exportmenu--default","name":"Default"},{"id":"charts-primitives-exportmenu--spanish","name":"Spanish"}],"example":{"file":"charts/core/export-menu.stories.tsx","story":"Default"}},{"name":"FillGaugeChart","slug":"fill-gauge-chart","category":"charts","subpath":"charts","page":"/docs/components/fill-gauge-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/fill-gauge-chart"],"summary":"Silhouettes filled to a level: stock left in a bottle, a battery of\ncapacity, a droplet of water, a target reached. Several gauges sit side by\nside for comparisons and wrap to new rows in narrow containers. The value\ninside switches color where the liquid crosses it, so it reads on both.","declarationFile":"charts/fill-gauge-chart/fill-gauge-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"data","type":"readonly FillGaugeItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"shape","type":"UnitIcon","required":false,"default":"\"droplet\"","description":"Built-in shape (\"battery\", \"droplet\", \"bottle\", \"person\", \"target\", \"shield\", ...) or your own.","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"max","type":"number","required":false,"default":"1","description":"Value of a full shape (1 for fractions, 100 for percentages, 24 for a box of 24 bottles).","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"level","type":"\"flat\" | \"wave\"","required":false,"default":"\"wave\"","description":"\"wave\": a moving liquid surface; \"flat\": a still level. Shapes that fill sideways are always flat.","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of the label inside the shape. By default the fill share (\"75%\").","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"minItemWidth","type":"number","required":false,"default":"104","description":"Smallest width of one gauge; more gauges than fit wrap to new rows.","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"200","description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the gauges from the container width.","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/fill-gauge-chart/fill-gauge-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-fillgaugechart--default","name":"Default"},{"id":"charts-fillgaugechart--droplet","name":"Droplet"},{"id":"charts-fillgaugechart--battery","name":"Battery (fills sideways)"},{"id":"charts-fillgaugechart--mixed-shapes","name":"Mixed shapes (person, target, shield)"},{"id":"charts-fillgaugechart--raw-values","name":"Raw value labels, flat level"},{"id":"charts-fillgaugechart--custom-shape","name":"Custom SVG shape"},{"id":"charts-fillgaugechart--loading","name":"Loading"},{"id":"charts-fillgaugechart--empty","name":"Empty"},{"id":"charts-fillgaugechart--narrow","name":"Narrow"}],"example":{"file":"charts/fill-gauge-chart/fill-gauge-chart.stories.tsx","story":"Default"}},{"name":"FunnelChart","slug":"funnel-chart","category":"charts","subpath":"charts","page":"/docs/components/funnel-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/funnel-chart"],"summary":"Funnel and pyramid: stage widths follow the value, the outline stays\ncontinuous between stages, and the conversion rate between consecutive\nstages sits on the joint. Vertical or horizontal, adapts to narrow\ncontainers (labels shrink and truncate, tooltip carries the detail).","declarationFile":"charts/funnel-chart/funnel-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"stages","type":"readonly FunnelDatum[]","required":true,"default":null,"description":"Stages in order: widest first.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"variant","type":"\"funnel\" | \"pyramid\"","required":false,"default":"\"funnel\"","description":"`funnel` narrows towards the last stage; `pyramid` tapers it to a point with the first stage as the base.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"tapered","type":"boolean","required":false,"default":"true","description":"Trapezoid stages that narrow into the next one (default); `false` draws straight bars of each stage's own width.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"neck","type":"number","required":false,"default":"0.72","description":"How far the last stage narrows, as a fraction of its width (funnel, tapered).","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"showConversion","type":"boolean","required":false,"default":"true","description":"Conversion % between consecutive stages.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"tone","type":"\"accent\" | \"categorical\"","required":false,"default":"\"categorical\"","description":"`categorical` colors each stage; `accent` fades one brand color.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"4","description":"Space between stages, in pixels.","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"labels","type":"Partial<FunnelLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/funnel-chart/funnel-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-funnelchart--default","name":"Default"},{"id":"charts-funnelchart--tapered","name":"Tapered"},{"id":"charts-funnelchart--stepped","name":"Stepped"},{"id":"charts-funnelchart--horizontal-tapered","name":"Horizontal Tapered"},{"id":"charts-funnelchart--horizontal","name":"Horizontal"},{"id":"charts-funnelchart--accent-ramp","name":"Accent Ramp"},{"id":"charts-funnelchart--pyramid","name":"Pyramid"},{"id":"charts-funnelchart--horizontal-pyramid","name":"Horizontal Pyramid"},{"id":"charts-funnelchart--without-conversion","name":"Without Conversion"},{"id":"charts-funnelchart--loading","name":"Loading"},{"id":"charts-funnelchart--empty","name":"Empty"},{"id":"charts-funnelchart--narrow","name":"Narrow"},{"id":"charts-funnelchart--narrow-horizontal","name":"Narrow Horizontal"},{"id":"charts-funnelchart--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/funnel-chart/funnel-chart.stories.tsx","story":"Default"}},{"name":"GanttChart","slug":"gantt-chart","category":"charts","subpath":"charts","page":"/docs/components/gantt-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/gantt-chart"],"summary":"Project plan: a task list (name, start, end, progress; collapsible parents\nwith summary bars) beside a zoomable timeline (hours to quarters) with\nprogress bars, milestones, finish-to-start dependency arrows, a today line\nand shaded non-working days. Both panes share one scroller, so they scroll\ntogether; the header and the list stay pinned. Optional editing by drag or\nkeyboard reports changes through `onTaskChange`.","declarationFile":"charts/gantt-chart/gantt-chart.tsx","props":[{"name":"tasks","type":"readonly GanttTask[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"zoom","type":"\"week\" | \"month\" | \"hour\" | \"day\" | \"quarter\" | \"year\"","required":false,"default":null,"description":"Controlled zoom level.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"defaultZoom","type":"\"week\" | \"month\" | \"hour\" | \"day\" | \"quarter\" | \"year\"","required":false,"default":"\"day\"","description":"Initial zoom when uncontrolled, \"day\" by default.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"onZoomChange","type":"((zoom: GanttZoom) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"zoomLevels","type":"readonly GanttZoom[]","required":false,"default":"GANTT_ZOOM_ORDER","description":"Zoom buttons offered in the toolbar; all five by default.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"today","type":"number | false | Date | \"auto\"","required":false,"default":"\"auto\"","description":"Today line. \"auto\" uses the current date (default); false hides it.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Pixels, or `\"fill\"` to take the parent's height (rows scroll inside).\nBy default the chart is as tall as its rows, between 220 and 560 px.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the chart from the container width.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"rowHeight","type":"number","required":false,"default":"36","description":"Height of one task row, 36 by default.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"gridWidth","type":"number","required":false,"default":null,"description":"Initial width of the task list; by default about 40% of the chart, 120-380 px.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"columns","type":"readonly (\"progress\" | \"start\" | \"end\")[]","required":false,"default":"[\"start\", \"end\", \"progress\"]","description":"Optional columns of the task list, shown while they fit.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"editable","type":"boolean","required":false,"default":"false","description":"Drag bars to move or resize them and drag the progress handle; keyboard alternatives too.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"onTaskChange","type":"((change: GanttTaskChange) => void)","required":false,"default":null,"description":"Receives every committed edit; update `tasks` to apply it (controlled).","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"workingDays","type":"readonly number[]","required":false,"default":"[1, 2, 3, 4, 5]","description":"Weekdays that are worked, 0 = Sunday. Monday to Friday by default.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"holidays","type":"readonly (number | Date)[]","required":false,"default":null,"description":"Extra non-working days (holidays), shaded like weekends.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"defaultCollapsed","type":"readonly string[]","required":false,"default":null,"description":"Parent ids collapsed at first render.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"dependencies","type":"boolean","required":false,"default":"true","description":"Finish-to-start arrows (default true).","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"showCriticalPath","type":"boolean","required":false,"default":"false","description":"Highlight the critical path: the chain of tasks and links with no slack,\ncomputed from the dependencies (`criticalPath`). Others show their slack in the tooltip.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"showBaselines","type":"boolean","required":false,"default":"false","description":"Draw each task's `baseline` as a thin bar under the actual one, with the variance in the tooltip.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"annotations","type":"readonly GanttAnnotation[]","required":false,"default":null,"description":"Dated lines and bands (releases, deadlines, closures) over the timeline.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"exportable","type":"boolean","required":false,"default":"false","description":"Show SVG and PNG export buttons in the toolbar.","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"texts","type":"Partial<Omit<GanttTexts, \"zoomLevels\" | \"zoomShort\"> & { zoomLevels: Partial<GanttTexts[\"zoomLevels\"]>; zoomShort: Partial<GanttTexts[\"zoomShort\"]>; }>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gantt-chart/gantt-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-ganttchart--default","name":"Default"},{"id":"charts-ganttchart--editable","name":"Editable"},{"id":"charts-ganttchart--weeks","name":"Weeks"},{"id":"charts-ganttchart--quarters","name":"Quarters"},{"id":"charts-ganttchart--collapsed","name":"Collapsed"},{"id":"charts-ganttchart--opening-day-hours","name":"Opening Day Hours"},{"id":"charts-ganttchart--without-dependencies","name":"Without Dependencies"},{"id":"charts-ganttchart--loading","name":"Loading"},{"id":"charts-ganttchart--empty","name":"Empty"},{"id":"charts-ganttchart--narrow","name":"Narrow"},{"id":"charts-ganttchart--fill-parent","name":"Fill Parent"},{"id":"charts-ganttchart--critical-path","name":"Critical Path"},{"id":"charts-ganttchart--baselines","name":"Baselines"},{"id":"charts-ganttchart--annotations","name":"Annotations"},{"id":"charts-ganttchart--year-view","name":"Year View"},{"id":"charts-ganttchart--milestones","name":"Milestones"},{"id":"charts-ganttchart--progress","name":"Progress"},{"id":"charts-ganttchart--export","name":"Export"}],"example":{"file":"charts/gantt-chart/gantt-chart.stories.tsx","story":"Default"}},{"name":"GaugeChart","slug":"gauge-chart","category":"charts","subpath":"charts","page":"/docs/components/gauge-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/gauge-chart"],"summary":"Gauge (semi or three-quarter arc). Colored range bands, a filled progress\narc or a needle, min/max labels, optional ticks and an animated value.\nBands are explorable with the keyboard and show a tooltip.","declarationFile":"charts/gauge-chart/gauge-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"value","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"min","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"max","type":"number","required":false,"default":"100","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"variant","type":"\"semi\" | \"three-quarter\"","required":false,"default":"\"semi\"","description":"`semi` is a half circle, `three-quarter` a 270 degree arc.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"mode","type":"\"progress\" | \"needle\"","required":false,"default":"\"progress\"","description":"Filled arc (`progress`) or a pointer over the bands (`needle`).","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"ranges","type":"readonly GaugeRange[]","required":false,"default":null,"description":"Colored bands. With `progress` they sit behind the arc and the arc takes the color of the band it is in.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"thickness","type":"number","required":false,"default":"18","description":"Arc thickness in pixels.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"roundedCaps","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"ticks","type":"number","required":false,"default":"0","description":"Value labels along the inside of the arc (count of divisions, 0 = none).","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"tickMarks","type":"boolean","required":false,"default":"false","description":"Draws a tick line at every division (and at each minor step), like a dial.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"minorTicks","type":"number","required":false,"default":"4","description":"Minor tick lines between two divisions; only with `tickMarks`.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"centerContent","type":"((context: GaugeCenterContext) => ReactNode)","required":false,"default":null,"description":"Replaces the value and caption in the middle with your own content (HTML, sized to the arc).","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"minMaxLabels","type":"boolean","required":false,"default":"true","description":"Min and max under the ends of the arc.","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"label","type":"string","required":false,"default":null,"description":"Caption under the value, e.g. \"Ocupación de sillas\".","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/gauge-chart/gauge-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-gaugechart--default","name":"Default"},{"id":"charts-gaugechart--needle","name":"Needle"},{"id":"charts-gaugechart--three-quarter","name":"Three Quarter"},{"id":"charts-gaugechart--three-quarter-needle","name":"Three Quarter Needle"},{"id":"charts-gaugechart--no-bands","name":"No Bands"},{"id":"charts-gaugechart--ticks","name":"Ticks"},{"id":"charts-gaugechart--ticks-three-quarter","name":"Ticks Three Quarter"},{"id":"charts-gaugechart--custom-label","name":"Custom Label"},{"id":"charts-gaugechart--live-needle","name":"Live Needle"},{"id":"charts-gaugechart--loading","name":"Loading"},{"id":"charts-gaugechart--empty","name":"Empty"},{"id":"charts-gaugechart--narrow","name":"Narrow"},{"id":"charts-gaugechart--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/gauge-chart/gauge-chart.stories.tsx","story":"Default"}},{"name":"GlobeChart","slug":"globe-chart","category":"charts","subpath":"charts","page":"/docs/components/globe-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/globe-chart"],"summary":"The world as a globe (orthographic projection) you turn with the pointer or the arrow keys.\nRegions can be colored by value, markers sized by value and great-circle routes drawn over the\nsurface. It fills its container as a disc, adapts to any width and keeps every interaction\navailable without a pointer.","declarationFile":"charts/globe-chart/globe-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"map","type":"GeoMap","required":true,"default":null,"description":"Land to draw, e.g. `worldMap` from `@jcsoftdev/ui/charts/maps/data/world`.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"data","type":"readonly ChoroplethDatum[]","required":false,"default":"[]","description":"Value per region (id or name); fills the land with a color scale.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":"\"sequential\"","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"valueName","type":"string","required":false,"default":null,"description":"Name of the value in the tooltip and the data table.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"points","type":"readonly MapPoint[]","required":false,"default":"[]","description":"Markers on the surface, area-proportional when they carry a `value`.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"routes","type":"readonly MapRoute[]","required":false,"default":"[]","description":"Great-circle arcs between places, lifted a little over the surface.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"minRadius","type":"number","required":false,"default":"4","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"maxRadius","type":"number","required":false,"default":"16","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"graticule","type":"boolean","required":false,"default":"true","description":"Meridians and parallels.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"graticuleStep","type":"number","required":false,"default":"30","description":"Degrees between graticule lines (30 by default).","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"initialRotation","type":"GlobeRotation","required":false,"default":"ROTATION_DEFAULT","description":"View center when the user has not turned the globe yet. Lima by default.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"rotation","type":"GlobeRotation","required":false,"default":null,"description":"Controlled view center; combine with `onRotationChange`.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"onRotationChange","type":"((rotation: GlobeRotation) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"autoRotate","type":"boolean","required":false,"default":"false","description":"Slow idle spin that pauses while the pointer or focus is on the globe. Off under reduced motion.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"autoRotateSpeed","type":"number","required":false,"default":"8","description":"Degrees per second of the idle spin.","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"dataTable","type":"\"hidden\"","required":false,"default":null,"description":"The numbers as a screen-reader table (always hidden visually).","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"labels","type":"Partial<GlobeLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"onRegionClick","type":"((region: { id: string; name: string; value: number | null; }) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"onPointClick","type":"((point: MapPoint) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/globe-chart/globe-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-globechart--default","name":"Default"},{"id":"charts-globechart--markers-and-routes","name":"Markers And Routes"},{"id":"charts-globechart--auto-rotate","name":"Auto Rotate"},{"id":"charts-globechart--narrow","name":"Narrow"},{"id":"charts-globechart--fill-parent","name":"Fill Parent"},{"id":"charts-globechart--brutal-preset","name":"Brutal Preset"},{"id":"charts-globechart--controlled","name":"Controlled"},{"id":"charts-globechart--loading","name":"Loading"},{"id":"charts-globechart--empty","name":"Empty"}],"example":{"file":"charts/globe-chart/globe-chart.stories.tsx","story":"Default"}},{"name":"GridLines","slug":"grid-lines","category":"charts","subpath":"charts","page":"/docs/components/grid-lines","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Soft background lines; the zero line, when visible, is a little stronger.","declarationFile":"charts/core/axes.tsx","props":[{"name":"ticks","type":"readonly AxisTick[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"direction","type":"\"horizontal\" | \"vertical\"","required":true,"default":null,"description":"Lines across the plot: horizontal for a vertical value axis.","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"length","type":"number","required":true,"default":null,"description":"Plot width (horizontal lines) or height (vertical lines).","deprecated":false,"file":"charts/core/axes.tsx"},{"name":"zero","type":"number","required":false,"default":null,"description":"Position of the zero line, drawn stronger.","deprecated":false,"file":"charts/core/axes.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-axes--default","name":"Default"},{"id":"charts-primitives-axes--dual-axis","name":"Dual Axis"},{"id":"charts-primitives-axes--without-grid","name":"Without Grid"},{"id":"charts-primitives-cartesianchart--default","name":"Default"},{"id":"charts-primitives-cartesianchart--stacked","name":"Stacked"},{"id":"charts-primitives-cartesianchart--horizontal","name":"Horizontal"},{"id":"charts-primitives-cartesianchart--columns-and-line-on-right-axis","name":"Columns And Line On Right Axis"},{"id":"charts-primitives-cartesianchart--area-with-goal","name":"Area With Goal"},{"id":"charts-primitives-cartesianchart--with-brush","name":"With Brush"},{"id":"charts-primitives-cartesianchart--loading","name":"Loading"},{"id":"charts-primitives-cartesianchart--empty","name":"Empty"},{"id":"charts-primitives-categoryslider--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--default","name":"Default"},{"id":"charts-primitives-chartbreadcrumb--root-only","name":"Root Only"},{"id":"charts-primitives-chartbreadcrumb--interactive","name":"Interactive"},{"id":"charts-primitives-chartbrush--default","name":"Default"},{"id":"charts-primitives-chartbrush--full-range","name":"Full Range"},{"id":"charts-primitives-chartdatatable--default","name":"Default"},{"id":"charts-primitives-chartdatatable--missing-values","name":"Missing Values"},{"id":"charts-primitives-chartframe--default","name":"Default"},{"id":"charts-primitives-chartframe--fills-parent","name":"Fills Parent"},{"id":"charts-primitives-chartframe--aspect-ratio","name":"Aspect Ratio"},{"id":"charts-primitives-chartframe--with-legend-and-table","name":"With Legend And Table"},{"id":"charts-primitives-chartframe--loading","name":"Loading"},{"id":"charts-primitives-chartframe--loading-ring","name":"Loading Ring"},{"id":"charts-primitives-chartframe--empty","name":"Empty"},{"id":"charts-primitives-chartlegend--read-only","name":"Read Only"},{"id":"charts-primitives-chartlegend--toggleable","name":"Toggleable"},{"id":"charts-primitives-chartlegend--centered","name":"Centered"},{"id":"charts-primitives-chartskeleton--bars","name":"Bars"},{"id":"charts-primitives-chartskeleton--line","name":"Line"},{"id":"charts-primitives-chartskeleton--ring","name":"Ring"},{"id":"charts-primitives-chartskeleton--empty","name":"Empty"},{"id":"charts-primitives-charttooltip--default","name":"Default"},{"id":"charts-primitives-charttooltip--flips-near-the-right-edge","name":"Flips Near The Right Edge"},{"id":"charts-primitives-charttooltip--without-title","name":"Without Title"},{"id":"charts-primitives-exportmenu--default","name":"Default"},{"id":"charts-primitives-exportmenu--spanish","name":"Spanish"},{"id":"charts-primitives-hierarchyheader--default","name":"Default"},{"id":"charts-primitives-hierarchyheader--at-root","name":"At Root"},{"id":"charts-primitives-hierarchylegend--default","name":"Default"},{"id":"charts-primitives-hierarchylegend--drilled-in","name":"Drilled In"},{"id":"charts-primitives-hierarchylegend--limited","name":"Limited"},{"id":"charts-primitives-hierarchylegend--leaf","name":"Leaf"},{"id":"charts-primitives-hierarchytable--default","name":"Default"},{"id":"charts-primitives-hierarchytable--from-branch","name":"From Branch"},{"id":"charts-primitives-chartpatterndefs--gallery","name":"Gallery"},{"id":"charts-primitives-chartpatterndefs--custom-tile","name":"Custom Tile"},{"id":"charts-primitives-plotoverlay--default","name":"Default"},{"id":"charts-primitives-plotoverlay--vertical-keys","name":"Vertical Keys"},{"id":"charts-primitives-plotoverlay--both-axes-keys","name":"Both Axes Keys"},{"id":"charts-primitives-unitglyph--default","name":"Default"},{"id":"charts-primitives-unitglyph--fills-up","name":"Fills Up"},{"id":"charts-primitives-unitglyph--scissors","name":"Scissors"},{"id":"charts-primitives-unitglyph--without-track","name":"Without Track"}],"example":{"file":"charts/core/axes.stories.tsx","story":"Default"}},{"name":"HeatmapChart","slug":"heatmap-chart","category":"charts","subpath":"charts","page":"/docs/components/heatmap-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/heatmap-chart"],"summary":"Matrix heatmap: one colored cell per row × column, e.g. occupancy by hour\nand weekday. Continuous sequential or diverging scales come from tokens;\n`ranges` switches to stepped colors. Hover and keyboard focus light the\nrow and column of the cell.","declarationFile":"charts/heatmap-chart/heatmap-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"rows","type":"readonly string[]","required":true,"default":null,"description":"Row names, top to bottom.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"columns","type":"readonly (string | Date)[]","required":true,"default":null,"description":"Column names, left to right. When every column is a `Date` the columns are\nconsecutive points in time: the header is labelled only at calendar\nboundaries (weeks, months, years), like a continuous time axis.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"values","type":"readonly (readonly (number | null)[])[]","required":true,"default":null,"description":"`values[row][column]`; `null` is a cell without data.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":"\"sequential\"","description":"\"sequential\" (empty to brand) or \"diverging\" (low hue, neutral at `center`, brand).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"Fixed [min, max] of the color scale; the data extent by default.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"Neutral value of a diverging scale.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"Override the scale colors (CSS colors or tokens).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped coloring by ranges or thresholds; replaces the continuous scale.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"cellLabels","type":"boolean","required":false,"default":"false","description":"Values inside the cells (only where they fit).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"3","description":"Gap between cells in pixels.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"radius","type":"number","required":false,"default":"4","description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"shape","type":"\"rect\" | \"hex\"","required":false,"default":"\"rect\"","description":"\"hex\" draws a honeycomb: pointy-top hexagons with odd rows shifted half a cell.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"renderer","type":"\"canvas\" | \"svg\"","required":false,"default":"\"svg\"","description":"\"canvas\" paints the cells on a canvas, for matrices with tens of thousands\nof cells. Labels, tooltip, focus ring and keyboard stay SVG/HTML.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing in px or \"fill\"; 34 px per row plus the column header by default.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width.","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"Color key (gradient bar or range swatches).","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"labels","type":"Partial<HeatmapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"onCellClick","type":"((cell: HeatmapCellInfo) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/heatmap-chart/heatmap-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-heatmapchart--default","name":"Default"},{"id":"charts-heatmapchart--cell-labels","name":"Cell Labels"},{"id":"charts-heatmapchart--diverging","name":"Diverging"},{"id":"charts-heatmapchart--ranges","name":"Ranges"},{"id":"charts-heatmapchart--missing-data","name":"Missing Data"},{"id":"charts-heatmapchart--calendar","name":"Calendar"},{"id":"charts-heatmapchart--calendar-ranges","name":"Calendar Ranges"},{"id":"charts-heatmapchart--rounded","name":"Rounded"},{"id":"charts-heatmapchart--honeycomb","name":"Honeycomb"},{"id":"charts-heatmapchart--continuous-datetime","name":"Continuous Datetime"},{"id":"charts-heatmapchart--canvas-dense","name":"Canvas Dense"},{"id":"charts-heatmapchart--drilldown","name":"Drilldown"},{"id":"charts-heatmapchart--narrow-drilldown","name":"Narrow Drilldown"},{"id":"charts-heatmapchart--loading","name":"Loading"},{"id":"charts-heatmapchart--empty","name":"Empty"},{"id":"charts-heatmapchart--narrow","name":"Narrow"},{"id":"charts-heatmapchart--narrow-calendar","name":"Narrow Calendar"}],"example":{"file":"charts/heatmap-chart/heatmap-chart.stories.tsx","story":"Default"}},{"name":"HexTileMap","slug":"hex-tile-map","category":"charts","subpath":"charts","page":"/docs/components/hex-tile-map","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/hex-tile-map"],"summary":"Tile map: every region is one hexagon of the same size, so small regions (Callao, Tumbes)\nweigh as much as large ones and nothing hides behind Loreto. Colored by value like\n`ChoroplethMap`, with the same legend, tooltip, keyboard model and data table. The default\nlayout is Peru's 25 regions; pass `tiles` for any other territory.","declarationFile":"charts/hex-tile-map/hex-tile-map.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"data","type":"readonly ChoroplethDatum[]","required":true,"default":null,"description":"One value per tile, matched by `id` (or the tile name; accents and case are ignored).","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"tiles","type":"readonly HexTile[]","required":false,"default":"PERU_HEX_TILES","description":"The tiles and their grid cells; Peru's 25 regions by default.","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"scale","type":"\"sequential\" | \"diverging\"","required":false,"default":"\"sequential\"","description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped (threshold) coloring; replaces the continuous scale.","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"valueName","type":"string","required":false,"default":null,"description":"Name of the value in the tooltip and the data table, e.g. \"Clientes\".","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"tileLabels","type":"\"code\" | \"value\" | \"none\" | \"both\"","required":false,"default":"\"both\"","description":"What is written on a tile where it fits: the code, the value, both or nothing.","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height in px, \"fill\" or a default that follows the grid's proportions.","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"labels","type":"Partial<MapLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"onTileClick","type":"((tile: ChoroplethRegionInfo) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hex-tile-map/hex-tile-map.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-hextilemap--default","name":"Default"},{"id":"charts-hextilemap--diverging","name":"Diverging"},{"id":"charts-hextilemap--thresholds","name":"Thresholds"},{"id":"charts-hextilemap--loading","name":"Loading"},{"id":"charts-hextilemap--empty","name":"Empty"},{"id":"charts-hextilemap--narrow","name":"Narrow"},{"id":"charts-hextilemap--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/hex-tile-map/hex-tile-map.stories.tsx","story":"Default"}},{"name":"HierarchyHeader","slug":"hierarchy-header","category":"charts","subpath":"charts","page":"/docs/components/hierarchy-header","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Drill-down path, pass it as the frame `legend`. Always first in the frame,\neven when the legend moves above the drawing.","declarationFile":"charts/core/hierarchy-chart.tsx","props":[{"name":"path","type":"readonly HierarchyNode[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"onSelect","type":"(id: string) => void","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"labels","type":"HierarchyLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-hierarchyheader--default","name":"Default"},{"id":"charts-primitives-hierarchyheader--at-root","name":"At Root"}],"example":{"file":"charts/core/hierarchy-header.stories.tsx","story":"Default"}},{"name":"HierarchyLegend","slug":"hierarchy-legend","category":"charts","subpath":"charts","page":"/docs/components/hierarchy-legend","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Read-only legend of the open level's branches, pass it as the frame\n`footer`: below the drawing in narrow containers, above it from `@md`.","declarationFile":"charts/core/hierarchy-chart.tsx","props":[{"name":"focus","type":"HierarchyNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"limit","type":"number","required":false,"default":"8","description":"Most items listed.","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-hierarchylegend--default","name":"Default"},{"id":"charts-primitives-hierarchylegend--drilled-in","name":"Drilled In"},{"id":"charts-primitives-hierarchylegend--limited","name":"Limited"},{"id":"charts-primitives-hierarchylegend--leaf","name":"Leaf"}],"example":{"file":"charts/core/hierarchy-legend.stories.tsx","story":"Default"}},{"name":"HierarchyMorph","slug":"hierarchy-morph","category":"charts","subpath":"charts","page":"/docs/components/hierarchy-morph","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/hierarchy-morph"],"summary":"One hierarchy, two views. Switching between treemap rectangles and\nsunburst rings morphs every shape: each is sampled as a polygon in both\nlayouts and the points glide from one to the other, so the eye follows a\nbranch instead of re-reading the chart.","declarationFile":"charts/hierarchy-morph/hierarchy-morph.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Root of the tree; its total is shown in the tooltip share.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"mode","type":"\"treemap\" | \"sunburst\"","required":false,"default":null,"description":"Controlled view.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"defaultMode","type":"\"treemap\" | \"sunburst\"","required":false,"default":"\"treemap\"","description":"Initial view when uncontrolled.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"onModeChange","type":"((mode: HierarchyMorphMode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"levels","type":"1 | 2","required":false,"default":"2","description":"Levels drawn below the root (1 or 2).","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"showSwitch","type":"boolean","required":false,"default":"true","description":"Hide the built-in switch (drive `mode` from outside).","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"380","description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"gap","type":"number","required":false,"default":"2","description":"Gap between shapes in pixels.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"sort","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"Morph duration in ms; 0 or `false` swaps instantly.","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"labels","type":"Partial<HierarchyMorphLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/hierarchy-morph/hierarchy-morph.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-hierarchymorph--default","name":"Default"},{"id":"charts-hierarchymorph--starts-as-sunburst","name":"Starts As Sunburst"},{"id":"charts-hierarchymorph--one-level","name":"One Level"},{"id":"charts-hierarchymorph--controlled","name":"Controlled"},{"id":"charts-hierarchymorph--loading","name":"Loading"},{"id":"charts-hierarchymorph--empty","name":"Empty"},{"id":"charts-hierarchymorph--narrow","name":"Narrow"}],"example":{"file":"charts/hierarchy-morph/hierarchy-morph.stories.tsx","story":"Default"}},{"name":"HierarchyTable","slug":"hierarchy-table","category":"charts","subpath":"charts","page":"/docs/components/hierarchy-table","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Hidden table: every node below the root with its value and share of the total.","declarationFile":"charts/core/hierarchy-chart.tsx","props":[{"name":"root","type":"HierarchyNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"caption","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"format","type":"ValueFormatter","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"},{"name":"labels","type":"HierarchyLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/hierarchy-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-hierarchytable--default","name":"Default"},{"id":"charts-primitives-hierarchytable--from-branch","name":"From Branch"}],"example":{"file":"charts/core/hierarchy-table.stories.tsx","story":"Default"}},{"name":"Histogram","slug":"histogram","category":"charts","subpath":"charts","page":"/docs/components/histogram","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/histogram"],"summary":"Histogram with automatic (Freedman–Diaconis / Sturges) or fixed bins,\ncounts or densities, and an optional fitted normal curve. Hovering or\narrowing through the bins shows their range and counts.","declarationFile":"charts/histogram/histogram.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"series","type":"readonly HistogramSeries[]","required":true,"default":null,"description":"One or more samples binned on the same edges; several series overlap.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"bins","type":"number | BinRule","required":false,"default":"\"auto\"","description":"Bin rule or approximate count. `auto` = Freedman–Diaconis (Sturges when the IQR is 0).","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"binWidth","type":"number","required":false,"default":null,"description":"Exact bin width in data units; wins over `bins`.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"domain","type":"readonly [number, number]","required":false,"default":null,"description":"Range to bin; the data range by default.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"mode","type":"\"count\" | \"density\"","required":false,"default":"\"count\"","description":"\"count\": observations per bin. \"density\": count / (n · width), area 1.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"normalCurve","type":"boolean","required":false,"default":"false","description":"Overlay the normal curve fitted to each series (same mean and standard deviation).","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of the binned values (x axis, tooltip ranges).","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"xAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"yAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"exploded","type":"boolean","required":false,"default":null,"description":"Explode every bin into one dot per observation (a dot plot on the same\nbins). Controlled when set; otherwise `defaultExploded` starts it.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"defaultExploded","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"onExplodedChange","type":"((exploded: boolean) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"explodeToggle","type":"boolean","required":false,"default":"false","description":"Shows the toggle button under the plot.","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"300","description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/histogram/histogram.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-histogram--default","name":"Default"},{"id":"charts-histogram--fixed-bin-width","name":"Fixed Bin Width"},{"id":"charts-histogram--density-with-normal-curve","name":"Density With Normal Curve"},{"id":"charts-histogram--sturges","name":"Sturges"},{"id":"charts-histogram--overlaid-series","name":"Overlaid Series"},{"id":"charts-histogram--explode","name":"Explode"},{"id":"charts-histogram--narrow","name":"Narrow"},{"id":"charts-histogram--loading","name":"Loading"},{"id":"charts-histogram--empty","name":"Empty"}],"example":{"file":"charts/histogram/histogram.stories.tsx","story":"Default"}},{"name":"IcicleChart","slug":"icicle-chart","category":"charts","subpath":"charts","page":"/docs/components/icicle-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/icicle-chart"],"summary":"Rectangular partition: the open node fills the first band and each band\nafter it splits its parent by value. Drill-down zooms the clicked cell to the\nfull extent with an animated transition, like the sunburst.","declarationFile":"charts/icicle-chart/icicle-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Root of the tree; it fills the first band.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"Height of the drawing in pixels.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"horizontal\"","description":"\"horizontal\": levels run left to right; \"vertical\": top to bottom.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"levels","type":"number","required":false,"default":"3","description":"Bands shown after the open node.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"drillDown","type":"boolean","required":false,"default":"true","description":"Click a cell to zoom into it, the first band (or Escape) to zoom out.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"breadcrumb","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"Read-only legend of the open level's branches.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"2","description":"Gap between cells in pixels.","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"radius","type":"number","required":false,"default":"4","description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"sort","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"labels","type":"Partial<HierarchyLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"onFocusChange","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"onNodeClick","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"Click on a cell that cannot be opened (a leaf).","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/icicle-chart/icicle-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-iciclechart--default","name":"Default"},{"id":"charts-iciclechart--vertical","name":"Vertical"},{"id":"charts-iciclechart--two-levels","name":"Two Levels"},{"id":"charts-iciclechart--drilldown","name":"Drilldown"},{"id":"charts-iciclechart--loading","name":"Loading"},{"id":"charts-iciclechart--empty","name":"Empty"},{"id":"charts-iciclechart--narrow","name":"Narrow"}],"example":{"file":"charts/icicle-chart/icicle-chart.stories.tsx","story":"Default"}},{"name":"IsotypeRows","slug":"isotype-rows","category":"charts","subpath":"charts","page":"/docs/components/isotype-rows","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/isotype-rows"],"summary":"Classic isotype rows: a name, then the same icon repeated in proportion to\nthe value, then the value. Every row shares one icon size, so lengths are\ncomparable; icons shrink together when the container is narrow.","declarationFile":"charts/isotype-rows/isotype-rows.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"data","type":"readonly UnitCategory[]","required":true,"default":null,"description":"One row per entry.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"perIcon","type":"number","required":false,"default":"1","description":"Value one icon stands for; the last icon of a row is cut to its remainder.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"icon","type":"UnitIcon","required":false,"default":"\"scissors\"","description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"colorMode","type":"\"category\" | \"single\"","required":false,"default":"\"single\"","description":"\"single\": every row in one color (classic isotype); \"category\": palette color per row.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"Color in \"single\" mode; the brand tone by default.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"track","type":"boolean","required":false,"default":"false","description":"Pads every row with empty icons up to the longest one.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"height","type":"\"fill\"","required":false,"default":null,"description":"`\"fill\"` spreads the rows over the height of the parent instead of using `rowHeight`.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"rowHeight","type":"number","required":false,"default":"34","description":"Height of one row in pixels; the chart height follows the number of rows.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"gap","type":"number","required":false,"default":"0.18","description":"Gap between icons, as a fraction of the icon size.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":"\"integer\"","description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"showValues","type":"boolean","required":false,"default":"true","description":"Value at the end of each row.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"unitLabel","type":"string","required":false,"default":"\"units\"","description":"What the values count, for the key and the tooltip (\"servicios\").","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"showKey","type":"boolean","required":false,"default":null,"description":"Shows \"icon = N unitLabel\" under the rows. Defaults to on when `perIcon` is not 1.","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/isotype-rows/isotype-rows.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-isotyperows--default","name":"Default"},{"id":"charts-isotyperows--color-per-row","name":"Color Per Row"},{"id":"charts-isotyperows--with-track","name":"Track to the longest row"},{"id":"charts-isotyperows--icon-per-row","name":"Icon per row"},{"id":"charts-isotyperows--review-ratings","name":"Review Ratings"},{"id":"charts-isotyperows--response-times","name":"Response Times"},{"id":"charts-isotyperows--store-locations","name":"Store Locations"},{"id":"charts-isotyperows--loading","name":"Loading"},{"id":"charts-isotyperows--empty","name":"Empty"},{"id":"charts-isotyperows--narrow","name":"Narrow"}],"example":{"file":"charts/isotype-rows/isotype-rows.stories.tsx","story":"Default"}},{"name":"LineChart","slug":"line-chart","category":"charts","subpath":"charts","page":"/docs/components/line-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/line-chart"],"summary":"Trends over categories or time. Smooth monotone curves by default (they\nnever overshoot the data), straight with `curve=\"linear\"`; `dashed` series\nfor forecasts or comparisons; `brush` for zooming long date ranges. Other\ncurves: `\"step\"`, `\"step-before\"`, `\"step-after\"` for values that hold until\nthey change (stock levels, prices).","declarationFile":"charts/line-chart/line-chart.tsx","props":[{"name":"series","type":"readonly ChartSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/line-chart/line-chart.tsx"},{"name":"gradient","type":"boolean","required":false,"default":"false","description":"Strokes each line with a gradient from its color towards the next palette color.","deprecated":false,"file":"charts/line-chart/line-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"One entry per data point: strings, numbers or dates.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"smooth\"","description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"markers","type":"boolean","required":false,"default":null,"description":"Dots on every line point. Hovered points are always marked.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onPointClick","type":"((point: CartesianPointEvent) => void)","required":false,"default":null,"description":"Called with the category (and nearest series) under the pointer when the plot is clicked or Enter is pressed.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xScale","type":"\"time\" | \"auto\" | \"band\"","required":false,"default":null,"description":"\"time\" spaces dates by real elapsed time; \"auto\" picks it when every category is a Date and no series is a column.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"brush","type":"boolean","required":false,"default":null,"description":"Drag-to-zoom on the plot plus an overview brush with a reset button.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-linechart--default","name":"Default"},{"id":"charts-linechart--straight","name":"Straight"},{"id":"charts-linechart--compared-with-last-period","name":"Compared with last period (dashed)"},{"id":"charts-linechart--data-labels","name":"Data Labels"},{"id":"charts-linechart--goal-and-holiday","name":"Annotations (goal and holiday)"},{"id":"charts-linechart--brush-zoom","name":"Brush and zoom (92 days)"},{"id":"charts-linechart--with-gaps","name":"With Gaps"},{"id":"charts-linechart--step","name":"Step"},{"id":"charts-linechart--annotated","name":"Annotated (lines, bands, markers, text)"},{"id":"charts-linechart--gradient","name":"Gradient"},{"id":"charts-linechart--synced-charts","name":"Synced Charts"},{"id":"charts-linechart--live-append","name":"Live Append"},{"id":"charts-linechart--downsampled-100-k","name":"Downsampled (100k points)"},{"id":"charts-linechart--drilldown","name":"Drilldown"},{"id":"charts-linechart--drilldown-narrow","name":"Drilldown Narrow"},{"id":"charts-linechart--loading","name":"Loading"},{"id":"charts-linechart--empty","name":"Empty"},{"id":"charts-linechart--fill-parent","name":"Fill Parent"},{"id":"charts-linechart--narrow","name":"Narrow"}],"example":{"file":"charts/line-chart/line-chart.stories.tsx","story":"Default"}},{"name":"LineDrilldown","slug":"line-drilldown","category":"charts","subpath":"charts","page":"/docs/components/line-drilldown","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/line-chart"],"summary":"A line chart you can drill into: click (or press Enter on) a point that has\nchildren to zoom into it, and use the breadcrumb to climb back out.","declarationFile":"charts/line-chart/line-drilldown.tsx","props":[{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Hierarchy to walk. The children of the focused node are the points of the\nline, in the order given; a node's value is its own or the sum of its children.","deprecated":false,"file":"charts/line-chart/line-drilldown.tsx"},{"name":"seriesName","type":"string","required":false,"default":null,"description":"Name of the line in legend and tooltip.","deprecated":false,"file":"charts/line-chart/line-drilldown.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":"\"Drilldown path\"","description":"Accessible name of the breadcrumb landmark.","deprecated":false,"file":"charts/line-chart/line-drilldown.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"Legend placement, or false to hide it. Defaults to \"top\" with two or more series.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart (`aria-label` of the drawing).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"Entry animation (default true; always off with prefers-reduced-motion).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"Background gridlines (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"Shared tooltip (default true).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"gradient","type":"boolean","required":false,"default":null,"description":"Strokes each line with a gradient from its color towards the next palette color.","deprecated":false,"file":"charts/line-chart/line-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"Extra sentence for the hidden data table caption.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot in pixels, 300 by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the plot from the container width (wins over a pixel `height`).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"markers","type":"boolean","required":false,"default":null,"description":"Dots on every line point. Hovered points are always marked.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"dataLabels","type":"boolean","required":false,"default":null,"description":"Values printed on the marks.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"transition","type":"boolean","required":false,"default":null,"description":"Eases lines and areas between data updates (live data); off by default.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"maxPoints","type":"number | false","required":false,"default":null,"description":"Series with more points than this are reduced with LTTB, 2000 by default; `false` draws every point.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"syncId","type":"string","required":false,"default":null,"description":"Charts with the same id share hover (crosshair and tooltip) and the zoom window.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of values in tooltips, labels and the data table.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"Label of a category on the axis and in the tooltip (dates get Spanish defaults).","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"xScale","type":"\"time\" | \"auto\" | \"band\"","required":false,"default":null,"description":"\"time\" spaces dates by real elapsed time; \"auto\" picks it when every category is a Date and no series is a column.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"axes","type":"readonly CartesianAxisSpec[]","required":false,"default":null,"description":"Any number of value axes. `yAxis` and `rightAxis` are shorthand for the ids \"left\" and \"right\";\nmore entries stack outward on their `side` (right by default) and series pick one with `axis`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"annotations","type":"readonly ChartAnnotation[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryLabelRotation","type":"number","required":false,"default":null,"description":"Tilts the category labels (degrees, e.g. -45) so long names fit; vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"categoryGroups","type":"readonly CategoryGroup[]","required":false,"default":null,"description":"Second tier of labels under the category axis (vertical charts); counts must add up to the categories.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"onCategoryClick","type":"((index: number) => void)","required":false,"default":null,"description":"Click (or Enter on the focused plot) on a category; receives its index in `categories`.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"brush","type":"boolean","required":false,"default":null,"description":"Drag-to-zoom on the plot plus an overview brush with a reset button.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"overlay","type":"CartesianOverlay","required":false,"default":null,"description":"Extra layers over the plot, e.g. the ruler and ink tools of `useChartInk`. Vertical charts only.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"rangeSelect","type":"{ value: readonly [number, number] | null; onChange: (range: readonly [number, number] | null) => void; }","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Series hidden at first; the legend can show them.","deprecated":false,"file":"charts/core/cartesian/types.ts"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/cartesian/types.ts"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-linechart--default","name":"Default"},{"id":"charts-linechart--straight","name":"Straight"},{"id":"charts-linechart--compared-with-last-period","name":"Compared with last period (dashed)"},{"id":"charts-linechart--data-labels","name":"Data Labels"},{"id":"charts-linechart--goal-and-holiday","name":"Annotations (goal and holiday)"},{"id":"charts-linechart--brush-zoom","name":"Brush and zoom (92 days)"},{"id":"charts-linechart--with-gaps","name":"With Gaps"},{"id":"charts-linechart--step","name":"Step"},{"id":"charts-linechart--annotated","name":"Annotated (lines, bands, markers, text)"},{"id":"charts-linechart--gradient","name":"Gradient"},{"id":"charts-linechart--synced-charts","name":"Synced Charts"},{"id":"charts-linechart--live-append","name":"Live Append"},{"id":"charts-linechart--downsampled-100-k","name":"Downsampled (100k points)"},{"id":"charts-linechart--drilldown","name":"Drilldown"},{"id":"charts-linechart--drilldown-narrow","name":"Drilldown Narrow"},{"id":"charts-linechart--loading","name":"Loading"},{"id":"charts-linechart--empty","name":"Empty"},{"id":"charts-linechart--fill-parent","name":"Fill Parent"},{"id":"charts-linechart--narrow","name":"Narrow"}],"example":{"file":"charts/line-chart/line-chart.stories.tsx","story":"Default"}},{"name":"MapDataTable","slug":"map-data-table","category":"charts","subpath":"charts","page":"/docs/components/map-data-table","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/maps"],"summary":"Visible, sortable table with the same numbers as a choropleth: the accessible alternative to\nthe colors. A bar next to each value repeats the magnitude without relying on hue. Rows\nwithout data always sort last.","declarationFile":"charts/maps/geo/map-data-table.tsx","props":[{"name":"caption","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"},{"name":"rows","type":"readonly MapDataRow[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"},{"name":"valueName","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"},{"name":"labels","type":"MapLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"},{"name":"height","type":"number","required":true,"default":null,"description":"Height in px of the scrolling area.","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"},{"name":"onRowClick","type":"((row: MapDataRow) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-data-table.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-mapdatatable--default","name":"Default"},{"id":"charts-primitives-mapdatatable--narrow","name":"Narrow"}],"example":{"file":"charts/maps/geo/map-data-table.stories.tsx","story":"Default"}},{"name":"MapLegend","slug":"map-legend","category":"charts","subpath":"charts","page":"/docs/components/map-legend","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/maps"],"summary":"Color key of a choropleth: a gradient bar with its extremes (and centre when\ndiverging), or one swatch per range. It sits under the map in narrow\ncontainers and above it, aligned to the end, from `@md/chart`.","declarationFile":"charts/maps/geo/map-legend.tsx","props":[{"name":"kind","type":"\"sequential\" | \"diverging\"","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"domain","type":"readonly [number, number]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"center","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"colors","type":"ScaleColors","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"ranges","type":"readonly ColorRange[]","required":false,"default":null,"description":"Stepped scale: one swatch per range instead of a gradient bar.","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"format","type":"ValueFormatter","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"},{"name":"noData","type":"string","required":false,"default":null,"description":"Swatch for regions without data, with its label.","deprecated":false,"file":"charts/maps/geo/map-legend.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-maplegend--sequential","name":"Sequential"},{"id":"charts-primitives-maplegend--diverging","name":"Diverging"},{"id":"charts-primitives-maplegend--stepped-ranges","name":"Stepped Ranges"}],"example":{"file":"charts/maps/geo/map-legend.stories.tsx","story":"Sequential"}},{"name":"MapViewport","slug":"map-viewport","category":"charts","subpath":"charts","page":"/docs/components/map-viewport","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/maps"],"summary":"The shared stage of the maps: draws the regions of a fitted geometry, owns\nzoom and pan (wheel, drag, pinch, buttons, keys), the region labels, the\nzoom buttons and the focusable keyboard layer. Charts supply fills,\nhover/click semantics, an SVG overlay (markers) and HTML (tooltip).","declarationFile":"charts/maps/geo/map-viewport.tsx","props":[{"name":"width","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"height","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"geometry","type":"MapGeometry","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"labels","type":"MapLabels","required":true,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"fills","type":"readonly string[]","required":true,"default":null,"description":"CSS fill of each region.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"interactive","type":"boolean","required":true,"default":null,"description":"Regions react to hover, focus and click. Off for a plain base map.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"activeRegion","type":"number | null","required":false,"default":"null","description":"Region under the pointer or the keyboard, or null.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"onRegionHover","type":"((index: number, event: { clientX: number; clientY: number; }) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"onLeave","type":"(() => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"onRegionClick","type":"((index: number) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"regionLabels","type":"readonly (string | null)[]","required":false,"default":null,"description":"Text drawn on each region where it fits (null leaves it out).","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"controller","type":"{ ref: RefObject<SVGSVGElement | null>; view: MapView; dragging: boolean; wasDragged: () => boolean; zoomBy: (factor: number, cx?: number, cy?: number) => void; fit: () => void; panBy: (dx: number, dy: number) => void; focusBox: (box: Bounds) => void; animateTo: (target: MapView) => void; canZoomIn: boolean; canZoomOut: boolean; pointerProps: { onPointerDown: (event: PointerEvent<SVGSVGElement>) => void; onPointerMove: (event: PointerEvent<SVGSVGElement>) => void; onPointerUp: (event: PointerEvent<SVGSVGElement>) => void; onPointerCancel: (event: PointerEvent<SVGSVGElement>) => void; }; }","required":true,"default":null,"description":"Zoom and pan state, from `useMapView`; the parent owns it so markers can depend on the zoom.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"zoomable","type":"boolean","required":true,"default":null,"description":"Shows the zoom buttons and enables the zoom keys (gestures are configured in `useMapView`).","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"containerRef","type":"RefObject<HTMLDivElement | null>","required":false,"default":null,"description":"Ref of the positioned container, for pointer-relative tooltips.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"keyboard","type":"{ count: number; active: number | null; valueText: string; onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void; onFocus?: () => void; onBlur?: () => void; onActivate?: () => void; }","required":false,"default":null,"description":"Keyboard model, usually from `useIndexNavigation(...).sliderProps`.","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"reveal","type":"readonly [number, number] | null","required":false,"default":null,"description":"Zoom 1 pixel position to keep in view while the keyboard moves (null: no panning).","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"overlay","type":"((context: MapViewportContext) => ReactNode)","required":false,"default":null,"description":"SVG drawn in screen space over the regions (markers, bubbles).","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"floating","type":"((context: MapViewportContext) => ReactNode)","required":false,"default":null,"description":"HTML positioned over the map (tooltips).","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/maps/geo/map-viewport.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-mapdatatable--default","name":"Default"},{"id":"charts-primitives-mapdatatable--narrow","name":"Narrow"},{"id":"charts-primitives-maplegend--sequential","name":"Sequential"},{"id":"charts-primitives-maplegend--diverging","name":"Diverging"},{"id":"charts-primitives-maplegend--stepped-ranges","name":"Stepped Ranges"},{"id":"charts-primitives-mapviewport--default","name":"Default"},{"id":"charts-primitives-mapviewport--with-region-names","name":"With Region Names"},{"id":"charts-primitives-mapviewport--static-base-map","name":"Static Base Map"}],"example":{"file":"charts/maps/geo/map-data-table.stories.tsx","story":"Default"}},{"name":"ObservationDots","slug":"observation-dots","category":"charts","subpath":"charts","page":"/docs/components/observation-dots","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Raw observations of a box or violin as small dots (jitter already applied).","declarationFile":"charts/core/distribution/observations.tsx","props":[{"name":"points","type":"readonly { value: number; offset: number; }[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"map","type":"(value: number) => number","required":true,"default":null,"description":"Value to pixel along the value axis.","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"center","type":"number","required":true,"default":null,"description":"Pixel of the group axis on the cross axis.","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"horizontal","type":"boolean","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"color","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"coloring","type":"\"value\" | \"series\"","required":false,"default":"\"series\"","description":"\"value\" grades the fill from a pale tint of `color` to `color` across `range`.","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"range","type":"readonly [number, number]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"radius","type":"number","required":false,"default":"2.6","description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"},{"name":"dimmed","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/observations.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-observationdots--default","name":"Default"},{"id":"charts-primitives-observationdots--graded-by-value","name":"Graded By Value"},{"id":"charts-primitives-observationdots--dimmed","name":"Dimmed"}],"example":{"file":"charts/core/distribution/observations.stories.tsx","story":"Default"}},{"name":"ParliamentChart","slug":"parliament-chart","category":"charts","subpath":"charts","page":"/docs/components/parliament-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/parliament-chart"],"summary":"Hemicycle of seats: the arcs are worked out for the total, every arc gets\nseats in proportion to its length, and groups are laid left to right so\neach one reads as a wedge. Optional majority mark and seat total.","declarationFile":"charts/parliament-chart/parliament-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"data","type":"readonly Omit<UnitCategory, \"icon\">[]","required":true,"default":null,"description":"One group per entry; `value` is its number of seats (whole numbers).","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"rows","type":"number","required":false,"default":null,"description":"Number of arcs; computed from the seat count by default.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"innerRatio","type":"number","required":false,"default":"0.4","description":"Radius of the innermost arc as a fraction of the outer one.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"seatShape","type":"\"circle\" | \"square\"","required":false,"default":"\"circle\"","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"majority","type":"number | boolean","required":false,"default":"false","description":"Draws the majority mark at the top of the arc: `true` for half the seats\nplus one, or an explicit number of seats.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"majorityLabel","type":"string","required":false,"default":"\"Majority\"","description":"Text before the majority figure.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"centerLabel","type":"string","required":false,"default":null,"description":"Word under the seat total in the middle (\"escaños\", \"sillas\"). Omit to hide the total.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"seatLabel","type":"string","required":false,"default":"\"Seats\"","description":"Name of the counted thing in the tooltip and data table.","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"260","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":"true","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/parliament-chart/parliament-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-parliamentchart--default","name":"Default"},{"id":"charts-parliamentchart--with-majority","name":"Majority line"},{"id":"charts-parliamentchart--square-seats","name":"Square Seats"},{"id":"charts-parliamentchart--many-seats","name":"Many seats (auto rows)"},{"id":"charts-parliamentchart--fixed-rows","name":"Fixed Rows"},{"id":"charts-parliamentchart--loading","name":"Loading"},{"id":"charts-parliamentchart--empty","name":"Empty"},{"id":"charts-parliamentchart--narrow","name":"Narrow"}],"example":{"file":"charts/parliament-chart/parliament-chart.stories.tsx","story":"Default"}},{"name":"PictogramChart","slug":"pictogram-chart","category":"charts","subpath":"charts","page":"/docs/components/pictogram-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/pictogram-chart"],"summary":"Isotype pictogram: every icon stands for `perUnit` of something (clients,\nservices, bottles) and the last icon of a category is cut to its remainder.\nIcons grow to the largest size that fits the box, up to `unitSize`.","declarationFile":"charts/pictogram-chart/pictogram-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"data","type":"readonly UnitCategory[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"perUnit","type":"number","required":false,"default":"1","description":"Value one icon stands for. The last icon of a category is clipped to its remainder.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"icon","type":"UnitIcon","required":false,"default":"\"person\"","description":"Built-in icon name, a 24 x 24 path, or a `UnitShape`.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"layout","type":"\"grid\" | \"rows\"","required":false,"default":"\"grid\"","description":"\"grid\": categories flow one after the other; \"rows\": each category starts a new row.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"columns","type":"number","required":false,"default":null,"description":"Fixed number of columns; by default the largest icons that fit the box decide.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"total","type":"number","required":false,"default":null,"description":"Capacity drawn as empty icons after the data (grid layout), e.g. 120 seats a day.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"unitSize","type":"number","required":false,"default":"32","description":"Largest icon side in pixels.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"0.25","description":"Gap between icons, as a fraction of the icon size.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"200","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":"\"integer\"","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"unitLabel","type":"string","required":false,"default":"\"units\"","description":"What the values count, for the key and the tooltip (\"clientes\").","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"showKey","type":"boolean","required":false,"default":null,"description":"Shows \"icon = N unitLabel\" under the chart. Defaults to on when `perUnit` is not 1.","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":"true","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/pictogram-chart/pictogram-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-pictogramchart--default","name":"Default"},{"id":"charts-pictogramchart--partial-units","name":"Partial units (1 icon = 5)"},{"id":"charts-pictogramchart--rows","name":"Rows layout, icon per category"},{"id":"charts-pictogramchart--capacity","name":"Capacity (empty units)"},{"id":"charts-pictogramchart--custom-shape","name":"Custom SVG shape"},{"id":"charts-pictogramchart--silhouettes","name":"Silhouettes"},{"id":"charts-pictogramchart--mixed-silhouettes","name":"Mixed Silhouettes"},{"id":"charts-pictogramchart--loading","name":"Loading"},{"id":"charts-pictogramchart--empty","name":"Empty"},{"id":"charts-pictogramchart--narrow","name":"Narrow"}],"example":{"file":"charts/pictogram-chart/pictogram-chart.stories.tsx","story":"Default"}},{"name":"PieChart","slug":"pie-chart","category":"charts","subpath":"charts","page":"/docs/components/pie-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/pie-chart"],"summary":"A donut without the hole: same slices, rounded corners, gaps, explode on\nhover, outside labels and legend toggling (see `DonutChart`).","declarationFile":"charts/pie-chart/pie-chart.tsx","props":[{"name":"data","type":"readonly DonutDatum[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"fill","type":"\"pattern\" | \"solid\" | \"gradient\"","required":false,"default":null,"description":"`gradient` fades each slice towards the hole; `pattern` adds a texture per slice, so color is not the only cue.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"Ids hidden at first.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"explode","type":"number","required":false,"default":null,"description":"Pixels a hovered or focused slice moves outwards.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"semi","type":"boolean","required":false,"default":null,"description":"Half circle opening upwards, like a gauge.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"gap","type":"number","required":false,"default":null,"description":"Visible gap between slices, in pixels.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"cornerRadius","type":"number","required":false,"default":"8","description":"Radius of the rounded slice corners, in pixels. 0 = sharp.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":null,"description":"Where the first slice starts, in degrees from 12 o'clock (full circle only).","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"monochrome","type":"string | boolean","required":false,"default":null,"description":"One hue in shades, darkest on the largest slice. `true` uses the accent; a string sets the base color.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"drilldown","type":"boolean","required":false,"default":null,"description":"Slices with `children` open on click (or Enter) with a breadcrumb to go back.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"rootLabel","type":"string","required":false,"default":null,"description":"First breadcrumb item; defaults to the chart title.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"breadcrumbLabel","type":"string","required":false,"default":null,"description":"Accessible name of the breadcrumb.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"outsideLabels","type":"boolean | \"name\" | \"percent\" | \"both\"","required":false,"default":null,"description":"Names / percentages on leader lines around the ring. `true` shows both.","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"},{"name":"onSliceClick","type":"((datum: DonutDatum) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/donut-chart/donut-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-piechart--default","name":"Default"},{"id":"charts-piechart--outside-labels","name":"Outside Labels"},{"id":"charts-piechart--semi-pie","name":"Semi Pie"},{"id":"charts-piechart--sharp-no-gap","name":"Sharp No Gap"},{"id":"charts-piechart--monochrome","name":"Monochrome"},{"id":"charts-piechart--loading","name":"Loading"},{"id":"charts-piechart--empty","name":"Empty"},{"id":"charts-piechart--narrow","name":"Narrow"}],"example":{"file":"charts/pie-chart/pie-chart.stories.tsx","story":"Default"}},{"name":"PlotExplorer","slug":"plot-explorer","category":"charts","subpath":"charts","page":"/docs/components/plot-explorer","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Transparent overlay that owns pointer and keyboard exploration of a plot:\na focusable `role=\"slider\"` (arrows move, Home/End jump, Escape clears),\nthe same contract as the cartesian charts.","declarationFile":"charts/core/distribution/explorer.tsx","props":[{"name":"count","type":"number","required":true,"default":null,"description":"Number of explorable items (boxes, bins, points), in reading order.","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"active","type":"number | null","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"onActiveChange","type":"(index: number | null) => void","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"pick","type":"(x: number, y: number) => number | null","required":true,"default":null,"description":"Item under a plot-relative pixel, or null.","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name, e.g. `labels.explore`.","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"valueText","type":"string","required":true,"default":null,"description":"What a screen reader announces for the active item.","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"margin","type":"PlotMargin","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"width","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"height","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/explorer.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-plotexplorer--default","name":"Default"},{"id":"charts-primitives-plotexplorer--empty","name":"Empty"}],"example":{"file":"charts/core/distribution/plot-explorer.stories.tsx","story":"Default"}},{"name":"PlotOverlay","slug":"plot-overlay","category":"charts","subpath":"charts","page":"/docs/components/plot-overlay","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Transparent, focusable layer over a plot: one place for pointer hover and\nkeyboard exploration, shared by the non-cartesian charts. It is a\n`role=\"slider\"` so assistive tech announces `valueText` as the arrows move.\nArrows step, Home/End jump, Escape clears.","declarationFile":"charts/core/plot-overlay.tsx","props":[{"name":"left","type":"number","required":true,"default":null,"description":"Position and size of the plot inside the chart container.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"top","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"width","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"height","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name (`labels.explore`).","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"count","type":"number","required":true,"default":null,"description":"Number of explorable points.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"active","type":"number | null","required":true,"default":null,"description":"Active point, or null.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"valueText","type":"string","required":true,"default":null,"description":"Reads the active point aloud: category and values.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"onActiveChange","type":"(index: number | null) => void","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"indexAt","type":"(pointer: PlotPointer) => number | null","required":true,"default":null,"description":"Maps a plot-relative pointer to a point; return null to clear (hit-testing charts).","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"keys","type":"\"horizontal\" | \"vertical\" | \"both\"","required":false,"default":"\"horizontal\"","description":"Which arrow keys step through the points. \"both\" maps Right/Down to next and Left/Up to previous.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"onKey","type":"((event: KeyboardEvent<HTMLDivElement>) => boolean)","required":false,"default":null,"description":"Extra key handling, e.g. switching streams with Up/Down. Return true when handled.","deprecated":false,"file":"charts/core/plot-overlay.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/plot-overlay.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-plotoverlay--default","name":"Default"},{"id":"charts-primitives-plotoverlay--vertical-keys","name":"Vertical Keys"},{"id":"charts-primitives-plotoverlay--both-axes-keys","name":"Both Axes Keys"}],"example":{"file":"charts/core/plot-overlay.stories.tsx","story":"Default"}},{"name":"PolarAreaChart","slug":"polar-area-chart","category":"charts","subpath":"charts","page":"/docs/components/polar-area-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/polar-area-chart"],"summary":"Polar area (Nightingale rose): equal-angle sectors whose radius, or area,\nfollows the value. Reference rings, rim labels, hover and keyboard focus\nwith a tooltip, legend toggling.","declarationFile":"charts/polar-area-chart/polar-area-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"data","type":"readonly PolarAreaDatum[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"scale","type":"\"area\" | \"radius\"","required":false,"default":"\"radius\"","description":"`radius`: length proportional to value. `area`: sector area proportional to value (Nightingale rose).","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"innerRadius","type":"number","required":false,"default":"0.1","description":"Hole in the middle as a fraction of the outer radius.","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"cornerRadius","type":"number","required":false,"default":"4","description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"3","description":"Gap between sectors, in pixels at the outer ring.","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"levels","type":"number","required":false,"default":"4","description":"Concentric reference rings.","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"showLabels","type":"boolean","required":false,"default":"true","description":"Names around the rim (hidden automatically in narrow containers).","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":"0","description":"Rotation of the first sector, in degrees from 12 o'clock.","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"monochrome","type":"string | boolean","required":false,"default":"false","description":"One hue in shades, darkest on the largest value. `true` uses the accent; a string sets the base color.","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/polar-area-chart/polar-area-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-polarareachart--default","name":"Default"},{"id":"charts-polarareachart--nightingale-area","name":"Nightingale Area"},{"id":"charts-polarareachart--with-hole","name":"With Hole"},{"id":"charts-polarareachart--monochrome","name":"Monochrome"},{"id":"charts-polarareachart--loading","name":"Loading"},{"id":"charts-polarareachart--empty","name":"Empty"},{"id":"charts-polarareachart--narrow","name":"Narrow"}],"example":{"file":"charts/polar-area-chart/polar-area-chart.stories.tsx","story":"Default"}},{"name":"ProgressUnits","slug":"progress-units","category":"charts","subpath":"charts","page":"/docs/components/progress-units","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/progress-units"],"summary":"Segmented progress: a rating of 4.5 of 5 stars with a half star, the steps\nof a booking, the cells of a battery. Partial units are clipped exactly;\nthe row shrinks to fit narrow containers.","declarationFile":"charts/progress-units/progress-units.tsx","props":[{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name and data table caption, e.g. \"Calificación de Kevin\".","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"value","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"max","type":"number","required":false,"default":"5","description":"Value of a full row of units (5 for a five star rating, 100 for a percentage).","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"count","type":"number","required":false,"default":"5","description":"Number of units drawn.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"step","type":"number","required":false,"default":null,"description":"Rounds the value before drawing, e.g. 0.5 for half stars. Exact partial units by default.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"variant","type":"\"icons\" | \"segments\"","required":false,"default":"\"icons\"","description":"\"icons\": repeated icons (stars, chairs...); \"segments\": rounded cells like a battery or steps.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"icon","type":"UnitIcon","required":false,"default":"\"star\"","description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"CSS color; overrides `tone`.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"tone","type":"\"danger\" | \"neutral\" | \"warning\" | \"success\" | \"accent\"","required":false,"default":null,"description":"Status color family; the brand tone by default.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"size","type":"number","required":false,"default":"24","description":"Largest unit side in pixels (the height of the component).","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"gap","type":"number","required":false,"default":"0.18","description":"Gap between units, as a fraction of the unit size.","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"showValue","type":"boolean","required":false,"default":"true","description":"Shows the value after the units (\"4.5 / 5\").","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/progress-units/progress-units.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-progressunits--default","name":"Default"},{"id":"charts-progressunits--exact-partial","name":"Exact partial (4.3)"},{"id":"charts-progressunits--half-steps","name":"Rounded to half stars"},{"id":"charts-progressunits--booking-steps","name":"Segments (booking steps)"},{"id":"charts-progressunits--capacity-cells","name":"Segments (capacity cells)"},{"id":"charts-progressunits--chairs","name":"Chair icons (chairs taken)"},{"id":"charts-progressunits--loading","name":"Loading"},{"id":"charts-progressunits--narrow","name":"Narrow"}],"example":{"file":"charts/progress-units/progress-units.stories.tsx","story":"Default"}},{"name":"RadarChart","slug":"radar-chart","category":"charts","subpath":"charts","page":"/docs/components/radar-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/radar-chart"],"summary":"Radar (spider) chart: several series over shared spokes, polygon or\ncircular grid, translucent areas, markers and a tooltip that lists every\nseries for the hovered or focused axis.","declarationFile":"charts/radar-chart/radar-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"axes","type":"readonly string[]","required":true,"default":null,"description":"One name per spoke (at least 3).","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"series","type":"readonly ChartSeries[]","required":true,"default":null,"description":"One value per axis in each series.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"max","type":"number","required":false,"default":null,"description":"Value at the outer ring. Rounded up from the data by default.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"min","type":"number","required":false,"default":"0","description":"Value at the centre.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"levels","type":"number","required":false,"default":"4","description":"Number of concentric grid rings.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"gridShape","type":"\"circle\" | \"polygon\"","required":false,"default":"\"polygon\"","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"fill","type":"boolean","required":false,"default":"true","description":"Translucent fill under each series.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"fillOpacity","type":"number","required":false,"default":"0.18","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"markers","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"showValues","type":"boolean","required":false,"default":"true","description":"Ring values along the first spoke.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":"0","description":"Rotation of the first spoke, in degrees from 12 o'clock.","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radar-chart/radar-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-radarchart--default","name":"Default"},{"id":"charts-radarchart--circular-grid","name":"Circular Grid"},{"id":"charts-radarchart--single-series","name":"Single Series"},{"id":"charts-radarchart--outline-only","name":"Outline Only"},{"id":"charts-radarchart--loading","name":"Loading"},{"id":"charts-radarchart--empty","name":"Empty"},{"id":"charts-radarchart--narrow","name":"Narrow"}],"example":{"file":"charts/radar-chart/radar-chart.stories.tsx","story":"Default"}},{"name":"RadialBarChart","slug":"radial-bar-chart","category":"charts","subpath":"charts","page":"/docs/components/radial-bar-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/radial-bar-chart"],"summary":"Concentric progress rings (\"actividad del día\"): one ring per series with\na track, rounded caps, optional gradient, labels at the start of each ring\nand a centre readout that follows the hovered or focused ring.","declarationFile":"charts/radial-bar-chart/radial-bar-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"data","type":"readonly RadialBarDatum[]","required":true,"default":null,"description":"Rings from the outside in.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"max","type":"number","required":false,"default":"100","description":"Default full-ring value, 100 unless set (a datum can bring its own).","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"320","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"startAngle","type":"number","required":false,"default":"0","description":"Where the rings start and stop, in degrees from 12 o'clock. 0 -> 270 leaves room for ring labels.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"endAngle","type":"number","required":false,"default":"270","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"thickness","type":"number","required":false,"default":null,"description":"Ring thickness in pixels; derived from the size and ring count by default.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"6","description":"Space between rings, in pixels.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"track","type":"boolean","required":false,"default":"true","description":"Faint full ring behind each progress ring.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"roundedCaps","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"gradient","type":"boolean","required":false,"default":"true","description":"Soft light-to-full gradient along each ring.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"ringLabels","type":"boolean","required":false,"default":null,"description":"Name and value at the start of each ring (needs the 12-to-9 o'clock quadrant free).","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"centerValue","type":"string","required":false,"default":null,"description":"Text in the centre while nothing is hovered.","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"centerLabel","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/radial-bar-chart/radial-bar-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-radialbarchart--default","name":"Default"},{"id":"charts-radialbarchart--full-circle","name":"Full Circle"},{"id":"charts-radialbarchart--solid-sharp","name":"Solid Sharp"},{"id":"charts-radialbarchart--single-ring","name":"Single Ring"},{"id":"charts-radialbarchart--loading","name":"Loading"},{"id":"charts-radialbarchart--empty","name":"Empty"},{"id":"charts-radialbarchart--narrow","name":"Narrow"}],"example":{"file":"charts/radial-bar-chart/radial-bar-chart.stories.tsx","story":"Default"}},{"name":"RaincloudChart","slug":"raincloud-chart","category":"charts","subpath":"charts","page":"/docs/components/raincloud-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/raincloud-chart"],"summary":"Raincloud plot (horizontal): a half violin \"cloud\" for the shape, a slim\nbox for the summary and the jittered raw observations falling below as\n\"rain\", so nothing about the distribution is hidden.","declarationFile":"charts/raincloud-chart/raincloud-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"categories","type":"readonly string[]","required":true,"default":null,"description":"One row per category, e.g. barbers or time slots.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"series","type":"readonly DistributionSeries[]","required":true,"default":null,"description":"`data[i]` holds the raw samples of `categories[i]`. Several series stack inside a row.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"valueAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"bandwidth","type":"number","required":false,"default":null,"description":"Kernel bandwidth in data units; Silverman's rule per cloud by default.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"rain","type":"boolean","required":false,"default":"true","description":"Draw the raw observations under the box.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"pointRadius","type":"number","required":false,"default":"2.5","description":"Radius of each raw point in pixels.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"showMean","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"seed","type":"number","required":false,"default":"7","description":"Seed of the vertical jitter, so the rain is stable between renders.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the drawing; grows with the number of rows by default.","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/raincloud-chart/raincloud-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-raincloudchart--default","name":"Default"},{"id":"charts-raincloudchart--without-rain","name":"Without Rain"},{"id":"charts-raincloudchart--weekday-vs-saturday","name":"Weekday Vs Saturday"},{"id":"charts-raincloudchart--average-ticket","name":"Average Ticket"},{"id":"charts-raincloudchart--narrow","name":"Narrow"},{"id":"charts-raincloudchart--loading","name":"Loading"},{"id":"charts-raincloudchart--empty","name":"Empty"}],"example":{"file":"charts/raincloud-chart/raincloud-chart.stories.tsx","story":"Default"}},{"name":"RangeAreaChart","slug":"range-area-chart","category":"charts","subpath":"charts","page":"/docs/components/range-area-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/range-area-chart"],"summary":"Min–max band over time (or categories) with an optional line for the\naverage. Several bands overlay each other; the legend toggles them.\nIdeal for ranges such as waiting time per day or price floor and ceiling.","declarationFile":"charts/range-area-chart/range-area-chart.tsx","props":[{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"bands","type":"readonly RangeBand[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"300","description":"Height of the plot in pixels.","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"smooth\"","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"showMean","type":"boolean","required":false,"default":"true","description":"Draw the central line of bands that provide `mean` (default true).","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"xScale","type":"\"time\" | \"auto\" | \"point\"","required":false,"default":"\"auto\"","description":"\"auto\" uses a real time axis when every category is a Date.","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"minLabel","type":"string","required":false,"default":"\"Min\"","description":"Words used in the tooltip and the data table.","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"maxLabel","type":"string","required":false,"default":"\"Max\"","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"meanLabel","type":"string","required":false,"default":"\"Mean\"","description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/range-area-chart/range-area-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-rangeareachart--default","name":"Default"},{"id":"charts-rangeareachart--multiple-bands","name":"Multiple Bands"},{"id":"charts-rangeareachart--without-mean","name":"Without Mean"},{"id":"charts-rangeareachart--fixed-axis","name":"Fixed Axis"},{"id":"charts-rangeareachart--by-category","name":"By Category"},{"id":"charts-rangeareachart--loading","name":"Loading"},{"id":"charts-rangeareachart--empty","name":"Empty"},{"id":"charts-rangeareachart--narrow","name":"Narrow"}],"example":{"file":"charts/range-area-chart/range-area-chart.stories.tsx","story":"Default"}},{"name":"SankeyChart","slug":"sankey-chart","category":"charts","subpath":"charts","page":"/docs/components/sankey-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/sankey-chart"],"summary":"Sankey diagram: flows between columns of nodes, band widths proportional to\nthe value. Hover (or keyboard) a node to follow its flows upstream and\ndownstream, or a link to isolate it; the tooltip gives value and share.","declarationFile":"charts/sankey-chart/sankey-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"nodes","type":"readonly SankeyNodeInput[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"links","type":"readonly SankeyLinkInput[]","required":true,"default":null,"description":"Flows between node ids. Links that close a cycle are left out (with a dev warning).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"compare","type":"readonly SankeyLinkInput[]","required":false,"default":null,"description":"Diff view: the flows of a previous period. `links` is then the current period; every band is\ncolored by its change (`--chart-up` / `--chart-down`) with the previous width as a ghost behind it.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"pathTracing","type":"boolean","required":false,"default":null,"description":"Hover or click traces a whole path: a link lights everything upstream of its source and downstream of its target; a click pins it.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"particles","type":"boolean","required":false,"default":null,"description":"Dots travel along the bands (off under `prefers-reduced-motion`).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"exportable","type":"boolean","required":false,"default":"false","description":"Show SVG and PNG export buttons above the drawing.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"legendItems","type":"readonly { id: string; name: string; color: string; }[]","required":false,"default":null,"description":"Legend entries below the drawing; the nodes by default (an alluvial lists its categories).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"relax","type":"boolean","required":false,"default":null,"description":"`false` keeps nodes in input order inside their column (see `AlluvialChart`).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"columns","type":"readonly string[]","required":false,"default":null,"description":"Titles drawn above the columns, left to right, e.g. [\"Origen\", \"Servicio\", \"Pago\"].","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"380","description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio of the drawing; ignored with `\"fill\"`.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"nodeWidth","type":"number","required":false,"default":null,"description":"Thickness of the node bars (wider by default with inside labels).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"nodePadding","type":"number","required":false,"default":null,"description":"Vertical gap between nodes of a column.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"align","type":"\"left\" | \"justify\"","required":false,"default":null,"description":"`justify` puts the final nodes in the last column; `left` keeps each at its depth.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"iterations","type":"number","required":false,"default":null,"description":"Relaxation sweeps of the layout; more untangles more, at a cost.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"linkColor","type":"\"source\" | \"target\" | \"neutral\" | \"gradient\"","required":false,"default":null,"description":"`gradient` blends source into target; `source`/`target` use one end; `neutral` is grey.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"linkOpacity","type":"number","required":false,"default":null,"description":"Resting opacity of the links (0-1).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"labelPosition","type":"\"outside\" | \"inside\"","required":false,"default":null,"description":"Node labels beside the bars (`outside`) or on wide bars (`inside`).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"showValues","type":"boolean","required":false,"default":null,"description":"Value after each node label.","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"labels","type":"Partial<SankeyLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onNodeClick","type":"((node: SankeyNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onLinkClick","type":"((link: SankeyLink) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"onRemovedLinks","type":"((removed: SankeyGraph[\"removed\"]) => void)","required":false,"default":null,"description":"Links the layout left out (cycles, self links, unknown ids, invalid values).","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sankey-chart/sankey-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-sankeychart--default","name":"Default"},{"id":"charts-sankeychart--source-colored","name":"Source Colored"},{"id":"charts-sankeychart--inside-labels","name":"Inside Labels"},{"id":"charts-sankeychart--revenue","name":"Revenue"},{"id":"charts-sankeychart--with-cycle","name":"With Cycle"},{"id":"charts-sankeychart--loading","name":"Loading"},{"id":"charts-sankeychart--empty","name":"Empty"},{"id":"charts-sankeychart--narrow","name":"Narrow"},{"id":"charts-sankeychart--fill-parent","name":"Fill Parent"},{"id":"charts-sankeychart--alluvial","name":"Alluvial"},{"id":"charts-sankeychart--diff","name":"Diff"},{"id":"charts-sankeychart--path-tracing","name":"Path Tracing"},{"id":"charts-sankeychart--particles","name":"Particles"},{"id":"charts-sankeychart--export","name":"Export"},{"id":"charts-sankeychart--chord","name":"Chord"}],"example":{"file":"charts/sankey-chart/sankey-chart.stories.tsx","story":"Default"}},{"name":"ScatterChart","slug":"scatter-chart","category":"charts","subpath":"charts","page":"/docs/components/scatter-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/scatter-chart"],"summary":"Scatter plot: one dot per observation on two numeric axes, several series,\nan optional least-squares trend line per series and quadrant annotations.","declarationFile":"charts/scatter-chart/scatter-chart.tsx","props":[{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"grid","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"series","type":"readonly XYSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"brush","type":"XYBrush","required":false,"default":null,"description":"Rectangular brush over the plot (pointer drag plus keyboard).","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"radius","type":"number","required":false,"default":null,"description":"Point radius when there are no sizes (pixels).","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"trendLine","type":"boolean","required":false,"default":null,"description":"Least-squares line per series, drawn over its x range.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"quadrants","type":"QuadrantOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xType","type":"\"time\" | \"linear\"","required":false,"default":null,"description":"\"time\": `x` is epoch milliseconds and the axis shows calendar ticks.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"jitter","type":"number | { x?: number; y?: number; }","required":false,"default":null,"description":"Deterministic displacement in pixels that separates overlapping points\n(a number applies to both axes). Tooltips still show the true values.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"seed","type":"number","required":false,"default":null,"description":"Seed of the jitter, so points are stable between renders.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"renderer","type":"\"canvas\" | \"svg\"","required":false,"default":null,"description":"\"canvas\" paints the marks on a canvas for tens of thousands of points;\naxes, tooltip and keyboard stay SVG/HTML. Falls back to SVG when points\ncarry images or `shading` is \"shaded\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"showLabels","type":"boolean","required":false,"default":null,"description":"Text labels next to (or inside) the points that have a `label`.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-scatterchart--default","name":"Default"},{"id":"charts-scatterchart--with-trend-lines","name":"With Trend Lines"},{"id":"charts-scatterchart--quadrants","name":"Quadrants"},{"id":"charts-scatterchart--datetime","name":"Datetime"},{"id":"charts-scatterchart--jitter","name":"Jitter"},{"id":"charts-scatterchart--with-images","name":"With Images"},{"id":"charts-scatterchart--canvas-50-k","name":"Canvas 50 K"},{"id":"charts-scatterchart--narrow","name":"Narrow"},{"id":"charts-scatterchart--loading","name":"Loading"},{"id":"charts-scatterchart--empty","name":"Empty"}],"example":{"file":"charts/scatter-chart/scatter-chart.stories.tsx","story":"Default"}},{"name":"SlopeChart","slug":"slope-chart","category":"charts","subpath":"charts","page":"/docs/components/slope-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/slope-chart"],"summary":"Two columns, one line per category: the slope is the change. Labels with\nvalues sit on both sides and are nudged apart when values are close, so\nevery name stays readable.","declarationFile":"charts/slope-chart/slope-chart.tsx","props":[{"name":"items","type":"readonly SlopeItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"fromLabel","type":"string","required":false,"default":"\"Before\"","description":"Header of the left column, e.g. \"Septiembre\".","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"toLabel","type":"string","required":false,"default":"\"After\"","description":"Header of the right column, e.g. \"Octubre\".","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"colorBy","type":"\"series\" | \"direction\"","required":false,"default":"\"direction\"","description":"\"direction\" colors by up, down or flat; \"series\" uses the palette.","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"lowerIsBetter","type":"boolean","required":false,"default":"false","description":"With `colorBy=\"direction\"`, going down is the good news (e.g. cancellations).","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":null,"description":"Height of the plot; by default it grows with the number of items.","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the chart from the container width.","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"deltaLabel","type":"string","required":false,"default":"\"Change\"","description":"Word for the change column of the data table and tooltip.","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/slope-chart/slope-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-slopechart--default","name":"Default"},{"id":"charts-slopechart--series-colors","name":"Series Colors"},{"id":"charts-slopechart--crowded-labels","name":"Crowded Labels"},{"id":"charts-slopechart--revenue","name":"Revenue"},{"id":"charts-slopechart--lower-is-better","name":"Lower Is Better"},{"id":"charts-slopechart--loading","name":"Loading"},{"id":"charts-slopechart--empty","name":"Empty"},{"id":"charts-slopechart--narrow","name":"Narrow"}],"example":{"file":"charts/slope-chart/slope-chart.stories.tsx","story":"Default"}},{"name":"Sparkline","slug":"sparkline","category":"charts","subpath":"charts","page":"/docs/components/sparkline","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/sparkline"],"summary":"Word-sized chart for KPI tiles: no axes, no legend. Hovering shows the\npoint's value; screen readers get a one-sentence summary (first, last,\nminimum and maximum).","declarationFile":"charts/sparkline/sparkline.tsx","props":[{"name":"data","type":"readonly (number | null)[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible description, e.g. \"Ventas de los últimos 14 días\".","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"type","type":"\"area\" | \"line\" | \"bar\"","required":false,"default":"\"line\"","description":"","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"color","type":"string","required":false,"default":null,"description":"CSS color; the brand tone (`accent-word`) by default.","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"36","description":"Pixels, or \"fill\" to take the full height of the parent.","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"width","type":"number","required":false,"default":null,"description":"Fixed width; fills the container when omitted.","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"showLast","type":"boolean","required":false,"default":"true","description":"Dot on the last value (lines and areas).","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"Format of the hovered value and the summary for screen readers.","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"categories","type":"readonly string[]","required":false,"default":null,"description":"Optional names of the points, shown next to the hovered value.","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"highlightIndex","type":"number","required":false,"default":null,"description":"Index of a bar drawn in full color while the others are muted (bars only).","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/sparkline/sparkline.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sparkline/sparkline.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-sparkline--default","name":"Default"},{"id":"charts-sparkline--area","name":"Area"},{"id":"charts-sparkline--bars","name":"Bars"},{"id":"charts-sparkline--falling-stock","name":"Falling Stock"},{"id":"charts-sparkline--in-kpi-tiles","name":"Inside KPI tiles"}],"example":{"file":"charts/sparkline/sparkline.stories.tsx","story":"Default"}},{"name":"StockChart","slug":"stock-chart","category":"charts","subpath":"charts","page":"/docs/components/stock-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/stock-chart"],"summary":"Price chart for long daily series: candles, OHLC bars, a line or an area;\na range selector and a navigator to zoom; moving averages, Bollinger bands\nand VWAP over the price; RSI or MACD in a second pane with one crosshair\nacross both; a last-price tag; comparison series in % change; event flags.\nThe indicator math lives in `core/indicators.ts`.","declarationFile":"charts/stock-chart/stock-chart.tsx","props":[{"name":"data","type":"readonly StockBar[]","required":true,"default":null,"description":"Bars in ascending date order.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"seriesType","type":"\"area\" | \"line\" | \"column\" | \"candle\" | \"ohlc\" | \"heikin-ashi\" | \"renko\"","required":false,"default":null,"description":"Controlled series type.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"defaultSeriesType","type":"\"area\" | \"line\" | \"column\" | \"candle\" | \"ohlc\" | \"heikin-ashi\" | \"renko\"","required":false,"default":"\"candle\"","description":"Initial series type when uncontrolled, \"candle\" by default.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"onSeriesTypeChange","type":"((type: StockSeriesType) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"seriesTypes","type":"readonly StockSeriesType[]","required":false,"default":"SERIES_TYPES","description":"Types offered in the toolbar; an empty list hides the switch.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"renkoBrickSize","type":"number","required":false,"default":null,"description":"Brick size of the Renko type; the ATR(14) of the data by default.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"drawingTools","type":"readonly StockTool[]","required":false,"default":"[]","description":"Tools of the drawing toolbar; none (default) hides it. `DEFAULT_STOCK_TOOLS` has them all.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"drawings","type":"readonly StockDrawing[]","required":false,"default":null,"description":"Controlled drawings. Anchors are moments and prices, so they survive zoom and new data.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"defaultDrawings","type":"readonly StockDrawing[]","required":false,"default":"[]","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"onDrawingsChange","type":"((drawings: StockDrawing[]) => void)","required":false,"default":null,"description":"Called with the full list after a drawing is added or deleted: persist it here.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"pinnable","type":"boolean","required":false,"default":"false","description":"Click (or Enter) on a bar pins its tooltip; pin several to compare days.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"defaultPinned","type":"readonly (number | Date)[]","required":false,"default":"[]","description":"Times (ms) of the tooltips pinned at first.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"onPinnedChange","type":"((times: number[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"onWindowChange","type":"((window: StockWindow) => void)","required":false,"default":null,"description":"Reports the visible window whenever it or the data changes.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"ranges","type":"readonly TimeRangePreset[]","required":false,"default":"DEFAULT_STOCK_RANGES","description":"Range selector buttons; an empty list hides them.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"defaultRange","type":"string","required":false,"default":null,"description":"Id of the preset applied first; the whole series by default.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"overlays","type":"readonly StockOverlay[]","required":false,"default":"[]","description":"Indicators over the price: SMA, EMA, Bollinger bands, VWAP.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"oscillator","type":"StockOscillator","required":false,"default":null,"description":"RSI or MACD in a pane under the price, sharing the crosshair.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"volume","type":"boolean","required":false,"default":null,"description":"Volume bars at the bottom of the price pane; shown when the data has volume.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"navigator","type":"boolean","required":false,"default":"true","description":"Mini chart of the whole series with a draggable window (default true).","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"lastPrice","type":"boolean","required":false,"default":"true","description":"Dashed line and tag at the last value (default true).","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"comparisons","type":"readonly StockComparison[]","required":false,"default":"[]","description":"Other series on the same dates: the chart switches to % change from the first visible bar.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"flags","type":"readonly StockFlag[]","required":false,"default":"[]","description":"Event flags pinned above the bars.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"Name of the main series in the legend (% mode).","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"420","description":"Pixels of the drawing (price, oscillator and navigator), 420 by default, or `\"fill\"`.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the chart from the container width.","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"volumeFormat","type":"ValueFormat","required":false,"default":"\"compact\"","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"toolbar","type":"boolean","required":false,"default":"true","description":"Toolbar with the range and series-type buttons (default true).","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"texts","type":"StockTextsInput","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stock-chart/stock-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-stockchart--default","name":"Default"},{"id":"charts-stockchart--ohlc-bollinger","name":"Ohlc Bollinger"},{"id":"charts-stockchart--line-macd","name":"Line Macd"},{"id":"charts-stockchart--area-vwap","name":"Area Vwap"},{"id":"charts-stockchart--comparison","name":"Comparison"},{"id":"charts-stockchart--flags","name":"Flags"},{"id":"charts-stockchart--loading","name":"Loading"},{"id":"charts-stockchart--empty","name":"Empty"},{"id":"charts-stockchart--narrow","name":"Narrow"},{"id":"charts-stockchart--fill-parent","name":"Fill Parent"},{"id":"charts-stockchart--heikin-ashi","name":"Heikin Ashi"},{"id":"charts-stockchart--renko","name":"Renko"},{"id":"charts-stockchart--columns","name":"Columns"},{"id":"charts-stockchart--streaming","name":"Streaming"},{"id":"charts-stockchart--drawing-tools","name":"Drawing Tools"},{"id":"charts-stockchart--range-measure","name":"Range Measure"},{"id":"charts-stockchart--pinned-tooltips","name":"Pinned Tooltips"},{"id":"charts-stockchart--stats","name":"Stats"}],"example":{"file":"charts/stock-chart/stock-chart.stories.tsx","story":"Default"}},{"name":"StreamGraph","slug":"stream-graph","category":"charts","subpath":"charts","page":"/docs/components/stream-graph","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/stream-graph"],"summary":"Flowing stacked areas around a moving baseline. Hover a stream to isolate it\n(the others fade, the tooltip shows its value); with the keyboard, Left and\nRight move through time and Up and Down switch stream.","declarationFile":"charts/stream-graph/stream-graph.tsx","props":[{"name":"categories","type":"readonly XValue[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"series","type":"readonly ChartSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"offset","type":"\"zero\" | \"wiggle\" | \"silhouette\" | \"expand\"","required":false,"default":"\"wiggle\"","description":"Baseline: \"wiggle\" (default), \"silhouette\", \"zero\" (plain stack) or \"expand\" (100%).","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"order","type":"\"none\" | \"ascending\" | \"inside-out\"","required":false,"default":"\"inside-out\"","description":"Stacking order; \"inside-out\" keeps the biggest streams in the middle.","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"curve","type":"\"linear\" | \"smooth\" | \"step\" | \"step-before\" | \"step-after\"","required":false,"default":"\"smooth\"","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"streamLabels","type":"boolean","required":false,"default":"true","description":"Names written on the thickest part of each stream (default true).","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"xFormat","type":"((value: XValue) => string)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"xScale","type":"\"time\" | \"auto\" | \"point\"","required":false,"default":"\"auto\"","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/stream-graph/stream-graph.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-streamgraph--default","name":"Default"},{"id":"charts-streamgraph--silhouette","name":"Silhouette"},{"id":"charts-streamgraph--stacked-from-zero","name":"Stacked From Zero"},{"id":"charts-streamgraph--share","name":"Share"},{"id":"charts-streamgraph--few-streams","name":"Few Streams"},{"id":"charts-streamgraph--loading","name":"Loading"},{"id":"charts-streamgraph--empty","name":"Empty"},{"id":"charts-streamgraph--narrow","name":"Narrow"}],"example":{"file":"charts/stream-graph/stream-graph.stories.tsx","story":"Default"}},{"name":"SunburstChart","slug":"sunburst-chart","category":"charts","subpath":"charts","page":"/docs/components/sunburst-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/sunburst-chart"],"summary":"Radial partition: the open node in the center, its descendants in rings,\neach slice proportional to value. Clicking a segment zooms into it with an\nanimated transition; the center or Escape zooms back out.","declarationFile":"charts/sunburst-chart/sunburst-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Root of the tree; its name and total sit in the center.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"360","description":"Height of the drawing; the disc takes the smaller of width and height.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"half","type":"boolean","required":false,"default":"false","description":"Half disc opening upwards (a 180 degree fan) instead of a full circle.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"levels","type":"number","required":false,"default":"3","description":"Rings shown around the open node.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"drillDown","type":"boolean","required":false,"default":"true","description":"Click a segment to zoom into it, the center to zoom out.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"breadcrumb","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"Read-only legend of the open level's branches.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"centerLabel","type":"boolean","required":false,"default":"true","description":"Name and total of the open node in the center.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"segmentLabels","type":"boolean","required":false,"default":"true","description":"Labels along the segments where they fit.","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"1.5","description":"Gap between segments in pixels (measured at the inner ring).","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"sort","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"labels","type":"Partial<HierarchyLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"onFocusChange","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"onNodeClick","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"Click on a segment that cannot be opened (a leaf).","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/sunburst-chart/sunburst-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-sunburstchart--default","name":"Default"},{"id":"charts-sunburstchart--two-levels","name":"Two Levels"},{"id":"charts-sunburstchart--without-labels","name":"Without Labels"},{"id":"charts-sunburstchart--static-view","name":"Static View"},{"id":"charts-sunburstchart--drilldown","name":"Drilldown"},{"id":"charts-sunburstchart--semi-circle","name":"Semi Circle"},{"id":"charts-sunburstchart--semi-circle-narrow","name":"Semi Circle Narrow"},{"id":"charts-sunburstchart--loading","name":"Loading"},{"id":"charts-sunburstchart--empty","name":"Empty"},{"id":"charts-sunburstchart--narrow","name":"Narrow"}],"example":{"file":"charts/sunburst-chart/sunburst-chart.stories.tsx","story":"Default"}},{"name":"TimelineChart","slug":"timeline-chart","category":"charts","subpath":"charts","page":"/docs/components/timeline-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/timeline-chart"],"summary":"Gantt-style time ranges: one row per resource, one bar per item. Bars that\noverlap inside a row are stacked into lanes, so nothing is hidden. Colors\ncome from groups (statuses), and an optional marker shows the current time.","declarationFile":"charts/timeline-chart/timeline-chart.tsx","props":[{"name":"rows","type":"readonly TimelineRow[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"items","type":"readonly TimelineItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"groups","type":"readonly TimelineGroup[]","required":false,"default":"[]","description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"domain","type":"readonly [number | Date, number | Date]","required":false,"default":null,"description":"Visible time window; by default the items rounded out to whole hours.","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"now","type":"number | false | Date | \"auto\"","required":false,"default":"false","description":"A \"now\" marker. \"auto\" uses the current time; false hides it.","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"height","type":"\"fill\"","required":false,"default":null,"description":"By default the height follows the lanes. `\"fill\"` stretches the lanes to\nthe height of the parent; `aspectRatio` does the same from the width.","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; stretches the lanes to fit it.","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"laneHeight","type":"number","required":false,"default":"28","description":"Height of one lane (a bar) in pixels, 28 by default (the minimum when stretching is 14).","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"texts","type":"Partial<TimelineTexts>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/timeline-chart/timeline-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-timelinechart--default","name":"Default"},{"id":"charts-timelinechart--without-now-marker","name":"Without Now Marker"},{"id":"charts-timelinechart--fixed-business-hours","name":"Fixed Business Hours"},{"id":"charts-timelinechart--compact","name":"Compact"},{"id":"charts-timelinechart--live-now","name":"Now = current time"},{"id":"charts-timelinechart--loading","name":"Loading"},{"id":"charts-timelinechart--empty","name":"Empty"},{"id":"charts-timelinechart--narrow","name":"Narrow"},{"id":"charts-timelinechart--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/timeline-chart/timeline-chart.stories.tsx","story":"Default"}},{"name":"TreeCard","slug":"tree-card","category":"charts","subpath":"charts","page":"/docs/components/tree-card","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/tree-chart"],"summary":"Default node template: a card with a color rail, an avatar (image or\ninitials), the name, a subtitle and an optional badge. Fills its box.","declarationFile":"charts/tree-chart/tree-card.tsx","props":[{"name":"node","type":"TreeChartNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-card.tsx"},{"name":"state","type":"TreeNodeState","required":true,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-card.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-treecard--default","name":"Default"},{"id":"charts-primitives-treecard--highlighted","name":"Highlighted"},{"id":"charts-primitives-treecard--dimmed","name":"Dimmed"},{"id":"charts-primitives-treecard--name-only","name":"Name Only"},{"id":"charts-primitives-treecard--with-photo","name":"With Photo"}],"example":{"file":"charts/tree-chart/tree-card.stories.tsx","story":"Default"}},{"name":"TreeChart","slug":"tree-chart","category":"charts","subpath":"charts","page":"/docs/components/tree-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/tree-chart"],"summary":"Org chart / hierarchy tree: tidy layout in four directions, card templates,\ncurved, step or straight edges, animated expand/collapse, pan and zoom,\nand the path to the root highlighted on hover or keyboard focus.","declarationFile":"charts/tree-chart/tree-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"data","type":"TreeChartDatum | null","required":true,"default":null,"description":"Root of the tree; `null` shows the empty state.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"layout","type":"\"tidy\" | \"radial\" | \"dendrogram\"","required":false,"default":null,"description":"`tidy` (default) is the org-chart layout; `radial` puts the root in the centre with one ring per\nlevel; `dendrogram` aligns every leaf on the last level. The last two default to compact chips.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"direction","type":"\"top\" | \"bottom\" | \"left\" | \"right\"","required":false,"default":null,"description":"Where the root sits: `top` (default), `bottom`, `left` or `right`. Ignored by `radial`.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"edgeStyle","type":"\"step\" | \"curved\" | \"straight\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"480","description":"Drawing height in pixels, or `\"fill\"` to take the parent's height.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio of the drawing; ignored with `\"fill\"`.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"nodeWidth","type":"number","required":false,"default":null,"description":"Size of every node box (the card template fills it).","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"nodeHeight","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"siblingGap","type":"number","required":false,"default":null,"description":"Gap between neighbouring boxes of one level.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"levelGap","type":"number","required":false,"default":null,"description":"Gap between levels.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"initialDepth","type":"number","required":false,"default":null,"description":"Depth (root = 0) from which nodes start collapsed: `2` shows the root, its children and theirs.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"collapsible","type":"boolean","required":false,"default":null,"description":"Show the expand/collapse buttons (Enter still toggles from the keyboard).","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"highlightPath","type":"boolean","required":false,"default":null,"description":"Highlight the path to the root of the hovered or keyboard-active node.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"edgeColor","type":"\"neutral\" | \"depth\" | \"branch\"","required":false,"default":null,"description":"Edge colors: `neutral` (default), by `depth` or by top-level `branch`.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"searchable","type":"boolean","required":false,"default":null,"description":"Search box over the drawing: matches are ringed, Enter steps through them and pans to each.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"selectable","type":"boolean","required":false,"default":null,"description":"Clicking a node selects it and keeps its path to the root lit.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"selectedId","type":"string | null","required":false,"default":null,"description":"Controlled selection (a node id), `null` for none.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"defaultSelectedId","type":"string | null","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"onSelect","type":"((node: TreeChartNode | null) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"showCounts","type":"boolean","required":false,"default":null,"description":"Show how many nodes hang below each one.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"groupLeaves","type":"number","required":false,"default":null,"description":"Fold nodes with at least this many leaf children into one expandable group node.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"loadChildren","type":"((node: TreeChartNode) => Promise<readonly TreeChartDatum[]>)","required":false,"default":null,"description":"Fetches the children of a `lazy` node the first time it is expanded; a spinner shows meanwhile.\nResolve with the child data (an empty array makes the node a leaf).","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"onLoadError","type":"((node: TreeChartNode, error: unknown) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"fit","type":"\"auto\" | \"contain\" | \"readable\"","required":false,"default":null,"description":"Initial view. `auto` (default) shows the whole tree and, when that would shrink the cards\nbelow a readable size (narrow containers), centres the root at a readable scale so you pan\nto the rest. `contain` always fits the whole tree; `readable` always keeps cards legible.\nThe fit button toggles between the two views.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"controls","type":"boolean","required":false,"default":null,"description":"Zoom buttons over the drawing.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"wheelZoom","type":"\"off\" | \"always\" | \"modifier\"","required":false,"default":null,"description":"See `usePanZoom`: wheel zoom only with Ctrl/⌘ (default), always, or off.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"minZoom","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"maxZoom","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"renderNode","type":"((node: TreeChartNode, state: TreeNodeState) => ReactNode)","required":false,"default":null,"description":"Custom node template; receives the node and its state, fills the node box.","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"labels","type":"Partial<TreeLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"onNodeClick","type":"((node: TreeChartNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"onToggle","type":"((node: TreeChartNode, expanded: boolean) => void)","required":false,"default":null,"description":"Called after a node is expanded (`true`) or collapsed (`false`).","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-treechart--default","name":"Default"},{"id":"charts-treechart--left-to-right","name":"Left To Right"},{"id":"charts-treechart--bottom-to-top","name":"Bottom To Top"},{"id":"charts-treechart--right-to-left","name":"Right To Left"},{"id":"charts-treechart--expand-collapse","name":"Expand Collapse"},{"id":"charts-treechart--custom-template","name":"Custom Template"},{"id":"charts-treechart--loading","name":"Loading"},{"id":"charts-treechart--empty","name":"Empty"},{"id":"charts-treechart--narrow","name":"Narrow"},{"id":"charts-treechart--fill-parent","name":"Fill Parent"},{"id":"charts-treechart--radial","name":"Radial"},{"id":"charts-treechart--dendrogram","name":"Dendrogram"},{"id":"charts-treechart--search","name":"Search"},{"id":"charts-treechart--badges","name":"Badges"},{"id":"charts-treechart--grouped-leaves","name":"Grouped Leaves"},{"id":"charts-treechart--lazy-children","name":"Lazy Children"},{"id":"charts-treechart--edge-colors","name":"Edge Colors"},{"id":"charts-treechart--edge-colors-by-depth","name":"Edge Colors By Depth"},{"id":"charts-treechart--dynamic-direction","name":"Dynamic Direction"},{"id":"charts-treechart--dark","name":"Dark"},{"id":"charts-treechart--radial-narrow","name":"Radial Narrow"}],"example":{"file":"charts/tree-chart/tree-chart.stories.tsx","story":"Default"}},{"name":"TreeChip","slug":"tree-chip","category":"charts","subpath":"charts","page":"/docs/components/tree-chip","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/tree-chart"],"summary":"Compact node template for the radial and dendrogram layouts: a pill with a\ncolor dot, the name and, optionally, the descendant count.","declarationFile":"charts/tree-chart/tree-card.tsx","props":[{"name":"node","type":"TreeChartNode","required":true,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-card.tsx"},{"name":"state","type":"TreeNodeState","required":true,"default":null,"description":"","deprecated":false,"file":"charts/tree-chart/tree-card.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-treechip--default","name":"Default"},{"id":"charts-primitives-treechip--highlighted","name":"Highlighted"},{"id":"charts-primitives-treechip--without-count","name":"Without Count"}],"example":{"file":"charts/tree-chart/tree-chip.stories.tsx","story":"Default"}},{"name":"TreemapChart","slug":"treemap-chart","category":"charts","subpath":"charts","page":"/docs/components/treemap-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/treemap-chart"],"summary":"Squarified treemap: areas proportional to value, nested groups with a\nheader band, click a group to open it (breadcrumb to go back). Each branch\nwears one palette hue; its children are spread over lighter and darker\ntints of it. Labels only show where they fit.","declarationFile":"charts/treemap-chart/treemap-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the drawing and caption of the data table.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"data","type":"HierarchyDatum","required":true,"default":null,"description":"Root of the tree; its name is the first breadcrumb item.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"360","description":"Height of the drawing in pixels.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"depth","type":"number","required":false,"default":"2","description":"Levels drawn at once below the open node; deeper ones appear after drilling.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"drillDown","type":"boolean","required":false,"default":"true","description":"Click (or Enter) on a group opens it.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"breadcrumb","type":"boolean","required":false,"default":"true","description":"Path of the open node above the drawing.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"Read-only legend of the open level's branches.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"3","description":"Gap between cells in pixels.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"radius","type":"number","required":false,"default":"6","description":"Corner radius of the cells.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"sort","type":"boolean","required":false,"default":"true","description":"Largest first (default) or data order.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"labels","type":"Partial<HierarchyLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"onFocusChange","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"Called with the open node after drilling in or out.","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"onNodeClick","type":"((node: HierarchyNode) => void)","required":false,"default":null,"description":"Click on a cell that cannot be opened (a leaf).","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/treemap-chart/treemap-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-treemapchart--default","name":"Default"},{"id":"charts-treemapchart--top-level","name":"Top Level"},{"id":"charts-treemapchart--nested","name":"Nested"},{"id":"charts-treemapchart--drilldown","name":"Drilldown"},{"id":"charts-treemapchart--data-order","name":"Data Order"},{"id":"charts-treemapchart--without-legend","name":"Without Legend"},{"id":"charts-treemapchart--loading","name":"Loading"},{"id":"charts-treemapchart--empty","name":"Empty"},{"id":"charts-treemapchart--narrow","name":"Narrow"}],"example":{"file":"charts/treemap-chart/treemap-chart.stories.tsx","story":"Default"}},{"name":"UnitGlyph","slug":"unit-glyph","category":"charts","subpath":"charts","page":"/docs/components/unit-glyph","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"One icon of a unit chart, centered in a square cell. A partial unit draws\nthe track silhouette and clips the colored copy, so 0.6 of a person is\nexactly 60% of its width. The outer group carries `data-unit` and a\nfill-box origin, so entry animations can scale it in place.","declarationFile":"charts/core/unit-glyph.tsx","props":[{"name":"shape","type":"ResolvedUnitShape","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"x","type":"number","required":true,"default":null,"description":"Top-left corner of the square cell, in pixels.","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"y","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"size","type":"number","required":true,"default":null,"description":"Side of the square cell.","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"fill","type":"number","required":true,"default":null,"description":"0 to 1: how much of the unit is filled (the rest shows the track).","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"color","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"track","type":"boolean","required":false,"default":"true","description":"Draw the unfilled part in the track color.","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"clipId","type":"string","required":true,"default":null,"description":"Unique id for the clip of a partial unit.","deprecated":false,"file":"charts/core/unit-glyph.tsx"},{"name":"direction","type":"\"up\" | \"right\"","required":false,"default":"\"right\"","description":"Partial units fill left to right (\"right\") or bottom to top (\"up\").","deprecated":false,"file":"charts/core/unit-glyph.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-unitglyph--default","name":"Default"},{"id":"charts-primitives-unitglyph--fills-up","name":"Fills Up"},{"id":"charts-primitives-unitglyph--scissors","name":"Scissors"},{"id":"charts-primitives-unitglyph--without-track","name":"Without Track"}],"example":{"file":"charts/core/unit-glyph.stories.tsx","story":"Default"}},{"name":"ViolinChart","slug":"violin-chart","category":"charts","subpath":"charts","page":"/docs/components/violin-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/violin-chart"],"summary":"Violin plot: a Gaussian kernel density mirrored around each category axis,\nwith an optional inner box or quartile lines. Two series can share one\nsplit violin per category to compare them side by side.","declarationFile":"charts/violin-chart/violin-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"categories","type":"readonly string[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"series","type":"readonly DistributionSeries[]","required":true,"default":null,"description":"`data[i]` holds the raw samples of `categories[i]`.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"valueAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"inner","type":"\"none\" | \"box\" | \"quartiles\"","required":false,"default":"\"box\"","description":"What is drawn inside each violin: a slim box, quartile lines or nothing.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"split","type":"boolean","required":false,"default":"false","description":"Two series share one violin per category: the first on the left (top when\nhorizontal), the second on the right. Ignored unless exactly two series are visible.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"bandwidth","type":"number","required":false,"default":null,"description":"Kernel bandwidth in data units; Silverman's rule per violin by default.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"scale","type":"\"area\" | \"width\"","required":false,"default":"\"width\"","description":"\"width\": every violin uses its full width (shapes compare, sizes do not).\n\"area\": one density scale for all, so a wider violin means a denser peak.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"showPoints","type":"boolean","required":false,"default":"false","description":"Every raw observation as a dot inside the violin, spread by its density.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"jitter","type":"number","required":false,"default":"0.8","description":"Share (0-1) of the local violin width the dots spread over.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"pointColor","type":"\"value\" | \"series\"","required":false,"default":"\"series\"","description":"\"value\" grades each dot from pale to full colour across the value range.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"seed","type":"number","required":false,"default":"11","description":"Seed of the jitter, so the dots are stable between renders.","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/violin-chart/violin-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-violinchart--default","name":"Default"},{"id":"charts-violinchart--quartiles","name":"Quartiles"},{"id":"charts-violinchart--horizontal","name":"Horizontal"},{"id":"charts-violinchart--split","name":"Split"},{"id":"charts-violinchart--grouped-side-by-side","name":"Grouped Side By Side"},{"id":"charts-violinchart--waiting-times","name":"Waiting Times"},{"id":"charts-violinchart--with-points","name":"With Points"},{"id":"charts-violinchart--colour-graded-jitter","name":"Colour Graded Jitter"},{"id":"charts-violinchart--narrow","name":"Narrow"},{"id":"charts-violinchart--loading","name":"Loading"},{"id":"charts-violinchart--empty","name":"Empty"}],"example":{"file":"charts/violin-chart/violin-chart.stories.tsx","story":"Default"}},{"name":"WaffleChart","slug":"waffle-chart","category":"charts","subpath":"charts","page":"/docs/components/waffle-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/waffle-chart"],"summary":"Proportions as a grid of cells (10 x 10 by default, so one cell is 1%).\nCells are shared with the largest remainder method, so they always add up.\nHovering, focusing a legend item or moving with the arrows highlights one\ncategory; hidden categories leave their cells empty.","declarationFile":"charts/waffle-chart/waffle-chart.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"data","type":"readonly Omit<UnitCategory, \"icon\">[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"rows","type":"number","required":false,"default":"10","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"columns","type":"number","required":false,"default":"10","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"total","type":"number","required":false,"default":null,"description":"What the whole grid stands for. By default the categories fill every\ncell; with a larger `total` the rest stays empty (62 of 100 chairs).","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"cellShape","type":"\"circle\" | \"square\" | \"rounded\"","required":false,"default":"\"rounded\"","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"order","type":"\"row\" | \"column\"","required":false,"default":"\"row\"","description":"\"row\": left to right from the top; \"column\": bottom to top from the left.","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"gap","type":"number","required":false,"default":"0.14","description":"Gap between cells, as a fraction of the cell size.","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"260","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":"\"integer\"","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"initialHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waffle-chart/waffle-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-wafflechart--default","name":"Default"},{"id":"charts-wafflechart--squares","name":"Squares"},{"id":"charts-wafflechart--circles","name":"Circles"},{"id":"charts-wafflechart--part-of-total","name":"Part of a total (occupancy)"},{"id":"charts-wafflechart--wide","name":"Wide grid (5 x 20)"},{"id":"charts-wafflechart--small-multiples","name":"Small Multiples"},{"id":"charts-wafflechart--small-multiples-narrow","name":"Small Multiples Narrow"},{"id":"charts-wafflechart--loading","name":"Loading"},{"id":"charts-wafflechart--empty","name":"Empty"},{"id":"charts-wafflechart--narrow","name":"Narrow"}],"example":{"file":"charts/waffle-chart/waffle-chart.stories.tsx","story":"Default"}},{"name":"WaterfallChart","slug":"waterfall-chart","category":"charts","subpath":"charts","page":"/docs/components/waterfall-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/waterfall-chart"],"summary":"Bridge from a start value to a total: increases and decreases float on the\nrunning total, subtotals and totals stand on the baseline, and dashed\nconnectors carry the eye from one step to the next.","declarationFile":"charts/waterfall-chart/waterfall-chart.tsx","props":[{"name":"steps","type":"readonly WaterfallStep[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"Accessible name of the chart.","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"description","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"320","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"valueFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"yAxis","type":"ValueAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"orientation","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"vertical\"","description":"\"horizontal\" lays the steps top to bottom and the value axis left to right.","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"connectors","type":"boolean","required":false,"default":"true","description":"Dashed line from each bar to the next (default true).","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"dataLabels","type":"boolean","required":false,"default":"true","description":"Values written above the bars (default true).","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"legend","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"increaseLabel","type":"string","required":false,"default":"\"Increase\"","description":"Words for the legend, the tooltip and the table.","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"decreaseLabel","type":"string","required":false,"default":"\"Decrease\"","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"totalLabel","type":"string","required":false,"default":"\"Total\"","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"runningLabel","type":"string","required":false,"default":"\"Running total\"","description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"labels","type":"Partial<ChartLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/waterfall-chart/waterfall-chart.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-waterfallchart--default","name":"Default"},{"id":"charts-waterfallchart--without-connectors","name":"Without Connectors"},{"id":"charts-waterfallchart--negative-balance","name":"Negative Balance"},{"id":"charts-waterfallchart--horizontal","name":"Horizontal"},{"id":"charts-waterfallchart--loading","name":"Loading"},{"id":"charts-waterfallchart--empty","name":"Empty"},{"id":"charts-waterfallchart--narrow","name":"Narrow"},{"id":"charts-waterfallchart--fill-parent","name":"Fill Parent"}],"example":{"file":"charts/waterfall-chart/waterfall-chart.stories.tsx","story":"Default"}},{"name":"XYAxes","slug":"xy-axes","category":"charts","subpath":"charts","page":"/docs/components/xy-axes","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Gridlines in both directions and the x/y axes of an `xyLayout`.","declarationFile":"charts/core/distribution/marks.tsx","props":[{"name":"layout","type":"XYLayout","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"xTitle","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"yTitle","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/marks.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-xyaxes--default","name":"Default"},{"id":"charts-primitives-xyaxes--without-grid","name":"Without Grid"},{"id":"charts-primitives-xyaxes--without-titles","name":"Without Titles"}],"example":{"file":"charts/core/distribution/xy-axes.stories.tsx","story":"Default"}},{"name":"XYPointChart","slug":"xy-point-chart","category":"charts","subpath":"charts","page":"/docs/components/xy-point-chart","importPath":"@jcsoftdev/ui/charts","singleEntries":["@jcsoftdev/ui/charts/core"],"summary":"Shared engine of `ScatterChart` and `BubbleChart`: two continuous axes,\nmulti-series points, optional bubbles, trend lines and quadrants.","declarationFile":"charts/core/distribution/xy-points.tsx","props":[{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"series","type":"readonly XYSeries[]","required":true,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeFormat","type":"ValueFormat","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"yAxis","type":"DistributionAxisOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"trendLine","type":"boolean","required":false,"default":"false","description":"Least-squares line per series, drawn over its x range.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"quadrants","type":"QuadrantOptions","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"radius","type":"number","required":false,"default":"5","description":"Point radius when there are no sizes (pixels).","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sized","type":"boolean","required":false,"default":"false","description":"Bubble mode: radius from `size`, area-proportional, the largest gets `sizeRange[1]`.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeRange","type":"readonly [number, number]","required":false,"default":"[4, 30]","description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"xType","type":"\"time\" | \"linear\"","required":false,"default":"\"linear\"","description":"\"time\": `x` is epoch milliseconds and the axis shows calendar ticks.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"jitter","type":"number | { x?: number; y?: number; }","required":false,"default":null,"description":"Deterministic displacement in pixels that separates overlapping points\n(a number applies to both axes). Tooltips still show the true values.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"seed","type":"number","required":false,"default":"17","description":"Seed of the jitter, so points are stable between renders.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"renderer","type":"\"canvas\" | \"svg\"","required":false,"default":"\"svg\"","description":"\"canvas\" paints the marks on a canvas for tens of thousands of points;\naxes, tooltip and keyboard stay SVG/HTML. Falls back to SVG when points\ncarry images or `shading` is \"shaded\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"brush","type":"XYBrush","required":false,"default":null,"description":"Rectangular brush over the plot (pointer drag plus keyboard).","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"shading","type":"\"flat\" | \"shaded\"","required":false,"default":"\"flat\"","description":"\"shaded\" fills bubbles with an off-centre radial gradient so they read as spheres.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"showLabels","type":"boolean","required":false,"default":"false","description":"Text labels next to (or inside) the points that have a `label`.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"sizeLegend","type":"boolean","required":false,"default":"sized","description":"Reference circles explaining the bubble sizes, under the plot.","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"height","type":"number | \"fill\"","required":false,"default":"340","description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"aspectRatio","type":"number","required":false,"default":null,"description":"Width / height ratio; sizes the drawing from the container width when `height` is not \"fill\".","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"legend","type":"boolean | \"top\" | \"bottom\"","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"grid","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"tooltip","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"loading","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"labels","type":"Partial<DistributionLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"charts/core/distribution/xy-points.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"charts-primitives-xypointchart--default","name":"Default"},{"id":"charts-primitives-xypointchart--with-trend-line","name":"With Trend Line"},{"id":"charts-primitives-xypointchart--bubbles","name":"Bubbles"},{"id":"charts-primitives-xypointchart--quadrants","name":"Quadrants"},{"id":"charts-primitives-xypointchart--loading","name":"Loading"},{"id":"charts-primitives-xypointchart--empty","name":"Empty"}],"example":{"file":"charts/core/distribution/xy-point-chart.stories.tsx","story":"Default"}},{"name":"ActionBar","slug":"action-bar","category":"containers","subpath":"containers","page":"/docs/components/action-bar","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/action-bar"],"summary":"Floating toolbar for bulk actions on a selection. Announces the count politely.","declarationFile":"containers/action-bar/action-bar.tsx","props":[{"name":"selectedCount","type":"number","required":true,"default":null,"description":"Number of selected items. The bar renders nothing while it is 0.","deprecated":false,"file":"containers/action-bar/action-bar.tsx"},{"name":"noun","type":"[singular: string, plural: string]","required":false,"default":"[\"seleccionado\", \"seleccionados\"]","description":"Singular and plural noun for the live count, e.g. [\"cita\", \"citas\"].","deprecated":false,"file":"containers/action-bar/action-bar.tsx"},{"name":"onClear","type":"(() => void)","required":false,"default":null,"description":"Clears the selection (close button and Escape).","deprecated":false,"file":"containers/action-bar/action-bar.tsx"},{"name":"children","type":"ReactNode","required":false,"default":null,"description":"Bulk actions, usually Buttons.","deprecated":false,"file":"containers/action-bar/action-bar.tsx"},{"name":"position","type":"\"absolute\" | \"fixed\" | \"static\"","required":false,"default":"\"absolute\"","description":"`fixed` floats over the viewport; `absolute` floats inside the nearest positioned\nancestor (a card, a table wrapper); `static` renders inline.","deprecated":false,"file":"containers/action-bar/action-bar.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-actionbar--default","name":"Default"},{"id":"containers-actionbar--narrow","name":"Narrow"},{"id":"containers-actionbar--brutal-preset","name":"Brutal Preset"},{"id":"containers-actionbar--glass-preset","name":"Glass Preset"}],"example":{"file":"containers/action-bar/action-bar.stories.tsx","story":"Default"}},{"name":"Banner","slug":"banner","category":"containers","subpath":"containers","page":"/docs/components/banner","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/banner"],"summary":"","declarationFile":"containers/banner/banner.tsx","props":[{"name":"tone","type":"\"danger\" | \"warning\" | \"success\" | \"info\"","required":false,"default":"\"info\"","description":"","deprecated":false,"file":"containers/banner/banner.tsx"},{"name":"icon","type":"ReactNode","required":false,"default":null,"description":"Decorative icon on the left; marked `aria-hidden`.","deprecated":false,"file":"containers/banner/banner.tsx"},{"name":"action","type":"ReactNode","required":false,"default":null,"description":"Actions on the right, e.g. a retry button.","deprecated":false,"file":"containers/banner/banner.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-banner--default","name":"Default"},{"id":"containers-banner--success","name":"Success"},{"id":"containers-banner--warning","name":"Warning"},{"id":"containers-banner--danger","name":"Danger"},{"id":"containers-banner--with-action","name":"With Action"},{"id":"containers-banner--without-icon","name":"Without Icon"},{"id":"containers-banner--narrow","name":"Narrow"}],"example":{"file":"containers/banner/banner.stories.tsx","story":"Default"}},{"name":"Card","slug":"card","category":"containers","subpath":"containers","page":"/docs/components/card","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/card"],"summary":"","declarationFile":"containers/card/card.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-card--default","name":"Default"},{"id":"containers-card--body-only","name":"Body Only"},{"id":"containers-card--with-actions","name":"With Actions"}],"example":{"file":"containers/card/card.stories.tsx","story":"Default"}},{"name":"CardBody","slug":"card-body","category":"containers","subpath":"containers","page":"/docs/components/card-body","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/card"],"summary":"","declarationFile":"containers/card/card.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-card--default","name":"Default"},{"id":"containers-card--body-only","name":"Body Only"},{"id":"containers-card--with-actions","name":"With Actions"}],"example":{"file":"containers/card/card.stories.tsx","story":"Default"}},{"name":"CardFooter","slug":"card-footer","category":"containers","subpath":"containers","page":"/docs/components/card-footer","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/card"],"summary":"","declarationFile":"containers/card/card.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-card--default","name":"Default"},{"id":"containers-card--body-only","name":"Body Only"},{"id":"containers-card--with-actions","name":"With Actions"}],"example":{"file":"containers/card/card.stories.tsx","story":"Default"}},{"name":"CardHeader","slug":"card-header","category":"containers","subpath":"containers","page":"/docs/components/card-header","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/card"],"summary":"","declarationFile":"containers/card/card.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-card--default","name":"Default"},{"id":"containers-card--body-only","name":"Body Only"},{"id":"containers-card--with-actions","name":"With Actions"}],"example":{"file":"containers/card/card.stories.tsx","story":"Default"}},{"name":"Carousel","slug":"carousel","category":"containers","subpath":"containers","page":"/docs/components/carousel","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/carousel"],"summary":"Scroll-snap carousel. Native scrolling and swipe work with no JS; buttons, dots, arrow keys\nand optional autoplay are layered on top. Slides per view follow the container width.","declarationFile":"containers/carousel/carousel.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name of the carousel.","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"slideClassName","type":"string","required":false,"default":"\"basis-full @lg/carousel:basis-1/2 @3xl/carousel:basis-1/3\"","description":"Classes for each slide's width. Default: 1 per view, 2 from 32rem, 3 from 48rem.","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"loop","type":"boolean","required":false,"default":"false","description":"Wrap around at the ends.","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"autoplay","type":"number | boolean","required":false,"default":"false","description":"Opt-in autoplay: interval in ms (true = 5000). Never runs under `prefers-reduced-motion`.","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"showDots","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"containers/carousel/carousel.tsx"},{"name":"showArrows","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"containers/carousel/carousel.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-carousel--default","name":"Default"},{"id":"containers-carousel--autoplay","name":"Autoplay"},{"id":"containers-carousel--narrow","name":"Narrow"},{"id":"containers-carousel--brutal-preset","name":"Brutal Preset"},{"id":"containers-carousel--glass-preset","name":"Glass Preset"}],"example":{"file":"containers/carousel/carousel.stories.tsx","story":"Default"}},{"name":"Cell","slug":"cell","category":"containers","subpath":"containers","page":"/docs/components/cell","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/cell"],"summary":"Settings-list row with a ready-made control. It extends `SettingsRow` (same layout, divider and\nwrapping) and fills its `control` slot with a switch, native select, slider or color picker, wiring\nthe row title as the control's accessible name.","declarationFile":"containers/cell/cell.tsx","props":[{"name":"variant","type":"\"select\" | \"switch\" | \"color\" | \"slider\"","required":true,"default":null,"description":"","deprecated":false,"file":"containers/cell/cell.tsx"},{"name":"defaultChecked","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"containers/cell/cell.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"containers/cell/cell.tsx"},{"name":"title","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"containers/settings-row/settings-row.tsx"},{"name":"description","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/settings-row/settings-row.tsx"},{"name":"titleId","type":"string","required":false,"default":null,"description":"Id for the title element, so the control can reference it with `aria-labelledby`.","deprecated":false,"file":"containers/settings-row/settings-row.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-cell--default","name":"Default"},{"id":"containers-cell--select","name":"Select"},{"id":"containers-cell--slider","name":"Slider"},{"id":"containers-cell--color","name":"Color"},{"id":"containers-cell--list","name":"List"},{"id":"containers-cell--narrow","name":"Narrow"},{"id":"containers-cell--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/cell/cell.stories.tsx","story":"Default"}},{"name":"Cols","slug":"cols","category":"containers","subpath":"containers","page":"/docs/components/cols","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/cols"],"summary":"","declarationFile":"containers/cols/cols.tsx","props":[{"name":"variant","type":"\"rail\" | \"half\" | \"calc\"","required":false,"default":null,"description":"Column proportions. Omit for the base main + side split.","deprecated":false,"file":"containers/cols/cols.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-cols--default","name":"Default"},{"id":"containers-cols--rail","name":"Rail"},{"id":"containers-cols--half","name":"Half"},{"id":"containers-cols--calc","name":"Calc"},{"id":"containers-cols--with-stack","name":"With Stack"},{"id":"containers-cols--narrow","name":"Narrow"}],"example":{"file":"containers/cols/cols.stories.tsx","story":"Default"}},{"name":"ColsStack","slug":"cols-stack","category":"containers","subpath":"containers","page":"/docs/components/cols-stack","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/cols"],"summary":"","declarationFile":"containers/cols/cols.tsx","props":[{"name":"wideSplit","type":"boolean","required":false,"default":null,"description":"From 1500px of page width the stack becomes 2 columns and its first\nchild spans both rows.","deprecated":false,"file":"containers/cols/cols.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-cols--default","name":"Default"},{"id":"containers-cols--rail","name":"Rail"},{"id":"containers-cols--half","name":"Half"},{"id":"containers-cols--calc","name":"Calc"},{"id":"containers-cols--with-stack","name":"With Stack"},{"id":"containers-cols--narrow","name":"Narrow"}],"example":{"file":"containers/cols/cols.stories.tsx","story":"Default"}},{"name":"Comment","slug":"comment","category":"containers","subpath":"containers","page":"/docs/components/comment","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/comment"],"summary":"Annotation callout on a document: bold author, optional counter, body.","declarationFile":"containers/comment/comment.tsx","props":[{"name":"tone","type":"\"pending\" | \"reply\"","required":false,"default":"\"pending\"","description":"","deprecated":false,"file":"containers/comment/comment.tsx"},{"name":"author","type":"string","required":true,"default":null,"description":"Name of the commenter.","deprecated":false,"file":"containers/comment/comment.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name of the note (`role=note` takes no name from content).","deprecated":false,"file":"containers/comment/comment.tsx"},{"name":"number","type":"number","required":false,"default":null,"description":"Optional counter shown before the author.","deprecated":false,"file":"containers/comment/comment.tsx"},{"name":"children","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/comment/comment.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-comment--default","name":"Default"},{"id":"containers-comment--reply","name":"Reply"},{"id":"containers-comment--numbered","name":"Numbered"}],"example":{"file":"containers/comment/comment.stories.tsx","story":"Default"}},{"name":"DataGrid","slug":"data-grid","category":"containers","subpath":"containers","page":"/docs/components/data-grid","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/data-grid"],"summary":"Data grid with sorting, filters, quick search, column pinning, resizing, reordering and\nvisibility, row selection, grouping with aggregates, inline editing, virtualized rows or\npagination, CSV export, and full keyboard navigation (ARIA grid pattern, roving tabindex).\nIt adapts to its container width: the toolbar wraps and the grid scrolls horizontally with\nits pinned columns kept in place.","declarationFile":"containers/data-grid/data-grid.tsx","props":[{"name":"data","type":"readonly T[]","required":false,"default":"EMPTY_DATA as readonly T[]","description":"Rows to show. Optional with `dataSource`, which loads them.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"columns","type":"readonly DataGridColumn<T>[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"aria-label","type":"string","required":true,"default":null,"description":"Accessible name of the grid.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"getRowId","type":"((row: T, index: number) => string)","required":false,"default":null,"description":"Stable row id (selection, editing, keys). The data index by default.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"height","type":"number","required":false,"default":"480","description":"Maximum height of the scrolling body in px (virtualized mode).","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"pageSize","type":"number","required":false,"default":null,"description":"Switches from virtualized scrolling to pagination with this page size.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"pageSizeOptions","type":"readonly number[]","required":false,"default":"[25, 50, 100]","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"storageKey","type":"string","required":false,"default":null,"description":"localStorage key that remembers column order, widths, visibility, pins and density.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"sort","type":"readonly SortRule[]","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultSort","type":"readonly SortRule[]","required":false,"default":"EMPTY_SORT","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onSortChange","type":"((sort: SortRule[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"filters","type":"Readonly<Record<string, FilterValue>>","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultFilters","type":"Readonly<Record<string, FilterValue>>","required":false,"default":"EMPTY_FILTERS","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onFiltersChange","type":"((filters: Filters) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"groupBy","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultGroupBy","type":"readonly string[]","required":false,"default":"EMPTY_LIST","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onGroupByChange","type":"((groupBy: string[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultPinned","type":"{ left?: readonly string[]; right?: readonly string[]; }","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultHidden","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"density","type":"\"normal\" | \"compact\" | \"comfortable\"","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultDensity","type":"\"normal\" | \"compact\" | \"comfortable\"","required":false,"default":"\"normal\"","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onDensityChange","type":"((density: Density) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"selectable","type":"boolean","required":false,"default":"false","description":"Adds a checkbox column; Shift selects a range.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"selectedRowIds","type":"readonly string[]","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultSelectedRowIds","type":"readonly string[]","required":false,"default":"EMPTY_LIST","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onSelectionChange","type":"((ids: string[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onCellChange","type":"((change: CellChange<T>) => void)","required":false,"default":null,"description":"Called when an inline edit is committed with a different value. The grid does not mutate `data`.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onCellsChange","type":"((changes: CellChange<T>[]) => void)","required":false,"default":null,"description":"Called once with every cell a paste, fill, undo or redo changes. Without it those changes go to\n`onCellChange` one by one, which loses updates if the parent sets state from stale data.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"history","type":"boolean","required":false,"default":"false","description":"Undo / redo of cell edits, paste, fill and row changes: buttons plus Ctrl / Cmd + Z, Shift + Ctrl / Cmd + Z, Ctrl + Y.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"historyDepth","type":"number","required":false,"default":"DEFAULT_HISTORY_DEPTH","description":"Commands kept for undo (and for redo). 100 by default.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onHistoryChange","type":"((history: HistorySummary) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"formulas","type":"boolean","required":false,"default":"false","description":"Spreadsheet formulas: a cell whose text starts with `=` is evaluated (`=B2*C2`, `=SUM(D2:D9)`,\n`=IF(E2>100,\"alto\",\"bajo\")`). Columns are lettered in the order of `columns` and rows are\nnumbered in the order of `data`; a formula bar shows the raw content of the focused cell.\nOff with `dataSource` and `pivot`.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"createRow","type":"(() => T)","required":false,"default":null,"description":"Adds the \"add row\" button: the new row is appended through `onRowsChange`.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onRowsChange","type":"((change: RowsChange<T>) => void)","required":false,"default":null,"description":"Rows added (`createRow`), removed (the toolbar button removes the selected rows) or restored by undo.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"dataSource","type":"DataSource<T>","required":false,"default":null,"description":"Server-side rows. Sort, filters and quick search are sent to `getRows` instead of being\napplied here; with `pageSize` the grid pages through blocks of that size, without it rows are\nloaded as you scroll. Grouping, tree data, row pinning, pivot and detail rows are off.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"maxBlocks","type":"number","required":false,"default":null,"description":"Blocks kept in memory in infinite mode before the least recently used are dropped.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"tree","type":"{ getParentId: (row: T) => string | null | undefined; }","required":false,"default":null,"description":"Shows `data` as a tree: `getParentId` links a row to its parent (nullish for roots).","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"expandedRowIds","type":"readonly string[]","required":false,"default":null,"description":"Expanded row ids: tree nodes and rows with a detail panel.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultExpandedRowIds","type":"readonly string[]","required":false,"default":"EMPTY_LIST","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onExpandedRowsChange","type":"((ids: string[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"renderDetail","type":"((row: T, rowId: string) => ReactNode)","required":false,"default":null,"description":"Detail panel (master / detail) rendered under an expanded row.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"detailHeight","type":"number | ((row: T) => number)","required":false,"default":"DEFAULT_DETAIL_HEIGHT","description":"Height of a detail panel in px (fixed so rows stay virtualizable). 240 by default.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"rowPinning","type":"boolean","required":false,"default":"false","description":"Adds pin-to-top / pin-to-bottom buttons to rows; pinned rows stay in view while scrolling.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"pinnedRows","type":"PinnedRows","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultPinnedRows","type":"PinnedRows","required":false,"default":"NO_PINNED_ROWS","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onPinnedRowsChange","type":"((pinned: PinnedRows) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"rowReorder","type":"boolean","required":false,"default":"false","description":"Drag handle and Alt + arrows to reorder rows; works without sort, filters or grouping.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onRowReorder","type":"((event: RowReorderEvent) => void)","required":false,"default":null,"description":"Called with the new order; the grid does not mutate `data`.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"rangeSelection","type":"boolean","required":false,"default":"false","description":"Rectangular cell selection by drag, Shift + click or Shift + arrows, with Ctrl + C as TSV.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"fillSeries","type":"{ dateStep?: DateStepMode; }","required":false,"default":null,"description":"How the fill handle reads series. `dateStep`: \"auto\" (default) continues dates by months when they\nshare the day of the month and by days otherwise; \"day\" and \"month\" force one unit.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"charts","type":"boolean","required":false,"default":"false","description":"Adds a \"Graficar\" button to the range status bar (turns `rangeSelection` on): the selected cells\nopen a bar, line, area or pie chart under the grid. The text column of the range names the\ncategories and each numeric column is a series. The chart code is loaded when first used.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"advancedFilter","type":"FilterGroup","required":false,"default":null,"description":"Advanced filter (AND / OR groups of conditions) applied after the column filters.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultAdvancedFilter","type":"FilterGroup","required":false,"default":"EMPTY_ADVANCED","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onAdvancedFilterChange","type":"((filter: FilterGroup) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"showAdvancedFilter","type":"boolean","required":false,"default":"false","description":"Adds the advanced filter button to the toolbar.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"toolPanel","type":"boolean","required":false,"default":"false","description":"Side panel to show, hide and reorder columns, group rows and set up a pivot.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultToolPanelOpen","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"pivot","type":"PivotConfig","required":false,"default":null,"description":"Pivot: row fields x pivot column x aggregated value.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"defaultPivot","type":"PivotConfig","required":false,"default":"EMPTY_PIVOT","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onPivotChange","type":"((pivot: PivotConfig) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"loading","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"emptyMessage","type":"ReactNode","required":false,"default":null,"description":"Shown when there are no rows (a filtered-out message is used when filters are active).","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"showFooter","type":"boolean","required":false,"default":null,"description":"Footer with the column aggregates. On when some column has `aggregate`.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"hideToolbar","type":"boolean","required":false,"default":"false","description":"Hides search, chips, density, columns and export.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"exportFilename","type":"string | false","required":false,"default":"\"datos.csv\"","description":"CSV file name for the export button; `false` hides the button.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onExport","type":"((payload: ExportPayload) => void)","required":false,"default":null,"description":"Called with the CSV right before it is downloaded.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"exportXlsx","type":"string | boolean","required":false,"default":"false","description":"Adds an \"Exportar XLSX\" button: a file name (`\"ventas.xlsx\"`) or `true` for `datos.xlsx`. Same\nrows and columns as the CSV export, with numbers as numbers and dates as dates. The writer\n(`@jcsoftdev/ui/xlsx`) is loaded when the button is used, so it costs nothing until then.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"onExportXlsx","type":"((payload: XlsxExportPayload) => void)","required":false,"default":null,"description":"Called with the file right before it is downloaded.","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"toolbarActions","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"labels","type":"Partial<DataGridLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/data-grid.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-datagrid--default","name":"Default"},{"id":"containers-datagrid--sorting-filtering","name":"Sorting / Filtering"},{"id":"containers-datagrid--pinning","name":"Pinning"},{"id":"containers-datagrid--grouping","name":"Grouping"},{"id":"containers-datagrid--editing","name":"Editing"},{"id":"containers-datagrid--virtualized-10-k","name":"Virtualized 10k"},{"id":"containers-datagrid--pagination","name":"Pagination"},{"id":"containers-datagrid--narrow","name":"Narrow (320 px)"},{"id":"containers-datagrid--dark","name":"Dark"},{"id":"containers-datagrid--loading","name":"Loading"},{"id":"containers-datagrid--empty","name":"Empty"},{"id":"containers-datagrid--column-types","name":"Column types"},{"id":"containers-datagrid--validation","name":"Validation"},{"id":"containers-datagrid--reorder-resize-hide","name":"Reorder / resize / hide"},{"id":"containers-datagrid--column-groups","name":"Column groups"},{"id":"containers-datagrid--column-groups-narrow","name":"Column groups (320 px)"},{"id":"containers-datagrid--row-pinning","name":"Row pinning"},{"id":"containers-datagrid--row-reorder","name":"Row reorder"},{"id":"containers-datagrid--row-expansion","name":"Row expansion"},{"id":"containers-datagrid--state-persistence","name":"State persistence"},{"id":"containers-datagrid--keyboard-navigation","name":"Keyboard navigation"},{"id":"containers-datagrid--tree-data","name":"Tree data"},{"id":"containers-datagrid--remote-pagination","name":"Remote pagination"},{"id":"containers-datagrid--infinite-scroll","name":"Infinite scroll"},{"id":"containers-datagrid--set-filter","name":"Set filter"},{"id":"containers-datagrid--filter-builder","name":"Filter builder"},{"id":"containers-datagrid--filter-builder-toolbar","name":"Filter builder (toolbar)"},{"id":"containers-datagrid--filter-builder-narrow","name":"Filter builder (320 px)"},{"id":"containers-datagrid--range-selection","name":"Range selection"},{"id":"containers-datagrid--range-selection-narrow","name":"Range selection (320 px)"},{"id":"containers-datagrid--pivot","name":"Pivot"},{"id":"containers-datagrid--master-detail","name":"Master / detail"},{"id":"containers-datagrid--tool-panel","name":"Tool panel"},{"id":"containers-datagrid--tool-panel-narrow","name":"Tool panel (320 px)"},{"id":"containers-datagrid--export-csv","name":"Export CSV"},{"id":"containers-datagrid-filterbuilder--default","name":"Default"},{"id":"containers-datagrid-filterbuilder--empty","name":"Empty"},{"id":"containers-datagrid-filterbuilder--narrow","name":"Narrow"},{"id":"containers-datagrid-spreadsheet--undo-redo","name":"Undo / redo"},{"id":"containers-datagrid-spreadsheet--undo-redo-narrow","name":"Undo / redo (320 px)"},{"id":"containers-datagrid-spreadsheet--undo-redo-preset","name":"Undo / redo (bordered preset)"},{"id":"containers-datagrid-spreadsheet--formulas","name":"Formulas"},{"id":"containers-datagrid-spreadsheet--formulas-narrow","name":"Formulas (320 px)"},{"id":"containers-datagrid-spreadsheet--formulas-preset","name":"Formulas (elevated preset)"},{"id":"containers-datagrid-spreadsheet--formula-errors","name":"Formula errors"},{"id":"containers-datagrid-spreadsheet--export-xlsx","name":"Export XLSX"},{"id":"containers-datagrid-spreadsheet--export-xlsx-narrow","name":"Export XLSX (320 px)"},{"id":"containers-datagrid-spreadsheet--export-xlsx-preset","name":"Export XLSX (glass preset)"},{"id":"containers-datagrid-spreadsheet--integrated-charts","name":"Integrated charts"},{"id":"containers-datagrid-spreadsheet--integrated-charts-narrow","name":"Integrated charts (320 px)"},{"id":"containers-datagrid-spreadsheet--integrated-charts-preset","name":"Integrated charts (flat preset)"},{"id":"containers-datagrid-spreadsheet--sparkline-column","name":"Sparkline column"},{"id":"containers-datagrid-spreadsheet--sparkline-column-narrow","name":"Sparkline column (320 px)"},{"id":"containers-datagrid-spreadsheet--fill-handle","name":"Fill handle"},{"id":"containers-datagrid-spreadsheet--fill-handle-narrow","name":"Fill handle (320 px)"},{"id":"containers-datagrid-spreadsheet--fill-handle-preset","name":"Fill handle (bordered preset)"},{"id":"containers-datagrid-spreadsheet--fill-up-and-left","name":"Fill handle (up, left and auto-scroll)"},{"id":"containers-datagrid-spreadsheet--fill-up-and-left-narrow","name":"Fill handle (up, left, 320 px)"}],"example":{"file":"containers/data-grid/data-grid.stories.tsx","story":"Default"}},{"name":"DescriptionList","slug":"description-list","category":"containers","subpath":"containers","page":"/docs/components/description-list","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/description-list"],"summary":"Two-column definition list (auto term / flexible value aligned right); stacks term over\nvalue when its own container is narrower than 24rem.\nCompose flat `<dt>`/`<dd>` pairs as children.","declarationFile":"containers/description-list/description-list.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-descriptionlist--default","name":"Default"},{"id":"containers-descriptionlist--long-values","name":"Long Values"},{"id":"containers-descriptionlist--narrow","name":"Narrow"}],"example":{"file":"containers/description-list/description-list.stories.tsx","story":"Default"}},{"name":"Facts","slug":"facts","category":"containers","subpath":"containers","page":"/docs/components/facts","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/facts"],"summary":"Three-column grid of key facts with a dashed top separator. Wrap each\n`<dt>`/`<dd>` pair in its own `<div>` (one grid cell). Collapses to one\ncolumn when its own container is 560px wide or less.","declarationFile":"containers/facts/facts.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-facts--default","name":"Default"},{"id":"containers-facts--narrow","name":"Narrow"}],"example":{"file":"containers/facts/facts.stories.tsx","story":"Default"}},{"name":"FileTree","slug":"file-tree","category":"containers","subpath":"containers","page":"/docs/components/file-tree","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/file-tree"],"summary":"Expandable tree following the WAI-ARIA tree pattern: one tab stop with roving focus,\narrows to move and open/close, Home/End, type-ahead, Enter or Space to select.","declarationFile":"containers/file-tree/file-tree.tsx","props":[{"name":"nodes","type":"FileTreeNode[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name of the tree.","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"selectedId","type":"string | null","required":false,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"defaultSelectedId","type":"string | null","required":false,"default":"null","description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"onSelect","type":"((id: string, node: FileTreeNode) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"expandedIds","type":"string[]","required":false,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"defaultExpandedIds","type":"string[]","required":false,"default":"[]","description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"onExpandedChange","type":"((ids: string[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/file-tree/file-tree.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-filetree--default","name":"Default"},{"id":"containers-filetree--controlled","name":"Controlled"},{"id":"containers-filetree--narrow","name":"Narrow"},{"id":"containers-filetree--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/file-tree/file-tree.stories.tsx","story":"Default"}},{"name":"FilterBuilder","slug":"filter-builder","category":"containers","subpath":"containers","page":"/docs/components/filter-builder","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/data-grid"],"summary":"Builds a filter of nested AND / OR groups of conditions (column, operator, value). It is a\ncontrolled editor over a `FilterGroup`; `applyAdvancedFilter` evaluates it. It adapts to the\nwidth of its container: fields stack when it is narrow.","declarationFile":"containers/data-grid/filter-builder-editor.tsx","props":[{"name":"columns","type":"readonly DataGridColumn<T>[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"},{"name":"value","type":"FilterGroup","required":true,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"},{"name":"onChange","type":"(next: FilterGroup) => void","required":true,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"},{"name":"valuesOf","type":"((columnId: string) => string[])","required":false,"default":null,"description":"Values offered for select-like columns; a text box is used when absent or empty.","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"},{"name":"labels","type":"Partial<DataGridLabels>","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/data-grid/filter-builder-editor.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-datagrid-filterbuilder--default","name":"Default"},{"id":"containers-datagrid-filterbuilder--empty","name":"Empty"},{"id":"containers-datagrid-filterbuilder--narrow","name":"Narrow"}],"example":{"file":"containers/data-grid/filter-builder-editor.stories.tsx","story":"Default"}},{"name":"GenericRow","slug":"generic-row","category":"containers","subpath":"containers","page":"/docs/components/generic-row","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/generic-row"],"summary":"Generic 3-column row (start / flexible content / end) for heterogeneous\nlists. The start and end slots take any content (icon, avatar, chip,\nbutton). No top border on the first row of a consecutive list.","declarationFile":"containers/generic-row/generic-row.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-genericrow--default","name":"Default"},{"id":"containers-genericrow--heterogeneous-list","name":"Heterogeneous List"},{"id":"containers-genericrow--narrow","name":"Narrow"}],"example":{"file":"containers/generic-row/generic-row.stories.tsx","story":"Default"}},{"name":"GenericRowContent","slug":"generic-row-content","category":"containers","subpath":"containers","page":"/docs/components/generic-row-content","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/generic-row"],"summary":"Flexible middle column wrapping title and meta.","declarationFile":"containers/generic-row/generic-row.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-genericrow--default","name":"Default"},{"id":"containers-genericrow--heterogeneous-list","name":"Heterogeneous List"},{"id":"containers-genericrow--narrow","name":"Narrow"}],"example":{"file":"containers/generic-row/generic-row.stories.tsx","story":"Default"}},{"name":"GenericRowMeta","slug":"generic-row-meta","category":"containers","subpath":"containers","page":"/docs/components/generic-row-meta","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/generic-row"],"summary":"Secondary metadata under the title.","declarationFile":"containers/generic-row/generic-row.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-genericrow--default","name":"Default"},{"id":"containers-genericrow--heterogeneous-list","name":"Heterogeneous List"},{"id":"containers-genericrow--narrow","name":"Narrow"}],"example":{"file":"containers/generic-row/generic-row.stories.tsx","story":"Default"}},{"name":"GenericRowTitle","slug":"generic-row-title","category":"containers","subpath":"containers","page":"/docs/components/generic-row-title","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/generic-row"],"summary":"","declarationFile":"containers/generic-row/generic-row.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-genericrow--default","name":"Default"},{"id":"containers-genericrow--heterogeneous-list","name":"Heterogeneous List"},{"id":"containers-genericrow--narrow","name":"Narrow"}],"example":{"file":"containers/generic-row/generic-row.stories.tsx","story":"Default"}},{"name":"HBars","slug":"h-bars","category":"containers","subpath":"containers","page":"/docs/components/h-bars","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/hbars"],"summary":"Horizontal comparison bars. The visual grid is `aria-hidden`; an `sr-only`\ntable exposes name plus each series value as real text.","declarationFile":"containers/hbars/hbars.tsx","props":[{"name":"rows","type":"HBarRow[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"series","type":"HBarSeriesTuple","required":true,"default":null,"description":"","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"scaleMax","type":"number","required":true,"default":null,"description":"Domain value that maps to 100% of the bar width.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"ticks","type":"HBarTick[]","required":false,"default":null,"description":"Ticks of the bottom axis; the whole row is omitted when not passed.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"threshold","type":"number","required":false,"default":null,"description":"Threshold line, in the same scale as `scaleMax`.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"variant","type":"\"stacked\" | \"paired\"","required":false,"default":"\"stacked\"","description":"\"stacked\" (default): one fill per row split between series by `flex`.\n\"paired\": each series draws its own independent fill so two metrics on\nthe same scale can be compared.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"description","type":"string","required":true,"default":null,"description":"Accessible table caption exposing the same numbers as the visual grid.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"nameHeader","type":"string","required":true,"default":null,"description":"Header of the name column in the accessible table.","deprecated":false,"file":"containers/hbars/hbars.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/hbars/hbars.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-hbars--default","name":"Default"},{"id":"containers-hbars--paired","name":"Paired"},{"id":"containers-hbars--with-threshold","name":"With Threshold"},{"id":"containers-hbars--single-series-without-ticks","name":"Single Series Without Ticks"}],"example":{"file":"containers/hbars/hbars.stories.tsx","story":"Default"}},{"name":"HighlightLine","slug":"highlight-line","category":"containers","subpath":"containers","page":"/docs/components/highlight-line","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/highlight-line"],"summary":"Focus sentence at the top of a card; wrap the key phrase in `<strong>` to\nemphasize it. It only paints the text, it computes nothing.","declarationFile":"containers/highlight-line/highlight-line.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-highlightline--default","name":"Default"},{"id":"containers-highlightline--plain-text","name":"Plain Text"}],"example":{"file":"containers/highlight-line/highlight-line.stories.tsx","story":"Default"}},{"name":"ItemCardGroup","slug":"item-card-group","category":"containers","subpath":"containers","page":"/docs/components/item-card-group","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/item-card-group"],"summary":"Rows grouped inside a single card (settings, clients, services), with an optional heading.","declarationFile":"containers/item-card-group/item-card-group.tsx","props":[{"name":"title","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/item-card-group/item-card-group.tsx"},{"name":"description","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/item-card-group/item-card-group.tsx"},{"name":"items","type":"ItemCardGroupItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/item-card-group/item-card-group.tsx"},{"name":"selectedId","type":"string","required":false,"default":null,"description":"Id of the highlighted row.","deprecated":false,"file":"containers/item-card-group/item-card-group.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-itemcardgroup--default","name":"Default"},{"id":"containers-itemcardgroup--selectable","name":"Selectable"},{"id":"containers-itemcardgroup--narrow","name":"Narrow"},{"id":"containers-itemcardgroup--bordered-preset","name":"Bordered Preset"},{"id":"containers-itemcardgroup--brutal-compact","name":"Brutal Compact"}],"example":{"file":"containers/item-card-group/item-card-group.stories.tsx","story":"Default"}},{"name":"Kanban","slug":"kanban","category":"containers","subpath":"containers","page":"/docs/components/kanban","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/kanban"],"summary":"Board of columns with draggable cards and WIP limits. Pointer: drag a card (touch: use the\ngrip). Keyboard: Space or Enter picks a card up, arrows move it, Space or Enter drops it,\nEscape cancels. Moves are announced in a live region.","declarationFile":"containers/kanban/kanban.tsx","props":[{"name":"columns","type":"KanbanColumnData[]","required":false,"default":null,"description":"Controlled board. Pair with `onColumnsChange`.","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"defaultColumns","type":"KanbanColumnData[]","required":false,"default":"[]","description":"","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"onColumnsChange","type":"((columns: KanbanColumnData[], move: KanbanMove) => void)","required":false,"default":null,"description":"Called after a drop (pointer release or keyboard drop) with the new board and the move.","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"enforceLimit","type":"boolean","required":false,"default":"false","description":"Refuse drops into another column that already reached its WIP limit.","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"renderCard","type":"((card: KanbanCardData) => ReactNode)","required":false,"default":null,"description":"Replaces the default card body.","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"emptyLabel","type":"string","required":false,"default":"\"Sin tarjetas\"","description":"","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/kanban/kanban.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/kanban/kanban.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-kanban--default","name":"Default"},{"id":"containers-kanban--enforced-limit","name":"Enforced Limit"},{"id":"containers-kanban--narrow","name":"Narrow"},{"id":"containers-kanban--brutal-preset","name":"Brutal Preset"},{"id":"containers-kanban--glass-compact","name":"Glass Compact"}],"example":{"file":"containers/kanban/kanban.stories.tsx","story":"Default"}},{"name":"Kpi","slug":"kpi","category":"containers","subpath":"containers","page":"/docs/components/kpi","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/kpi"],"summary":"","declarationFile":"containers/kpi/kpi.tsx","props":[{"name":"label","type":"ReactNode","required":true,"default":null,"description":"Short label describing the metric.","deprecated":false,"file":"containers/kpi/kpi.tsx"},{"name":"value","type":"ReactNode","required":true,"default":null,"description":"Highlighted number, already formatted by the consumer.","deprecated":false,"file":"containers/kpi/kpi.tsx"},{"name":"suffix","type":"ReactNode","required":false,"default":null,"description":"Small suffix next to the number, e.g. \"/12\".","deprecated":false,"file":"containers/kpi/kpi.tsx"},{"name":"description","type":"ReactNode","required":false,"default":null,"description":"Optional subtext.","deprecated":false,"file":"containers/kpi/kpi.tsx"},{"name":"variant","type":"\"danger\" | \"default\"","required":false,"default":"\"default\"","description":"","deprecated":false,"file":"containers/kpi/kpi.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/kpi/kpi.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-kpi--default","name":"Default"},{"id":"containers-kpi--with-suffix","name":"With Suffix"},{"id":"containers-kpi--danger","name":"Danger"},{"id":"containers-kpi--occupancy","name":"Occupancy"},{"id":"containers-kpi--narrow","name":"Narrow"}],"example":{"file":"containers/kpi/kpi.stories.tsx","story":"Default"}},{"name":"KpiGroup","slug":"kpi-group","category":"containers","subpath":"containers","page":"/docs/components/kpi-group","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/kpi-group"],"summary":"Metrics that belong together in one card, divided by hairlines. Columns follow the\ncontainer width: 1, 2 or 4 across.","declarationFile":"containers/kpi-group/kpi-group.tsx","props":[{"name":"items","type":"KpiGroupItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/kpi-group/kpi-group.tsx"},{"name":"animate","type":"boolean","required":false,"default":"true","description":"Animate numeric values counting up.","deprecated":false,"file":"containers/kpi-group/kpi-group.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-kpigroup--default","name":"Default"},{"id":"containers-kpigroup--narrow","name":"Narrow"},{"id":"containers-kpigroup--two-columns","name":"Two Columns"},{"id":"containers-kpigroup--brutal-preset","name":"Brutal Preset"},{"id":"containers-kpigroup--glass-preset","name":"Glass Preset"}],"example":{"file":"containers/kpi-group/kpi-group.stories.tsx","story":"Default"}},{"name":"PageHeader","slug":"page-header","category":"containers","subpath":"containers","page":"/docs/components/page-header","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/page-header"],"summary":"Page header. No required parts: compose an eyebrow / title / lede block in\na plain `<div>` and, when the view has buttons, `PageHeaderActions` as the\nsecond child. Actions wrap under the title when the container is too narrow.","declarationFile":"containers/page-header/page-header.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-pageheader--default","name":"Default"},{"id":"containers-pageheader--title-only","name":"Title Only"},{"id":"containers-pageheader--without-actions","name":"Without Actions"},{"id":"containers-pageheader--narrow","name":"Narrow"}],"example":{"file":"containers/page-header/page-header.stories.tsx","story":"Default"}},{"name":"PageHeaderActions","slug":"page-header-actions","category":"containers","subpath":"containers","page":"/docs/components/page-header-actions","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/page-header"],"summary":"","declarationFile":"containers/page-header/page-header.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-pageheader--default","name":"Default"},{"id":"containers-pageheader--title-only","name":"Title Only"},{"id":"containers-pageheader--without-actions","name":"Without Actions"},{"id":"containers-pageheader--narrow","name":"Narrow"}],"example":{"file":"containers/page-header/page-header.stories.tsx","story":"Default"}},{"name":"PageHeaderEyebrow","slug":"page-header-eyebrow","category":"containers","subpath":"containers","page":"/docs/components/page-header-eyebrow","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/page-header"],"summary":"","declarationFile":"containers/page-header/page-header.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-pageheader--default","name":"Default"},{"id":"containers-pageheader--title-only","name":"Title Only"},{"id":"containers-pageheader--without-actions","name":"Without Actions"},{"id":"containers-pageheader--narrow","name":"Narrow"}],"example":{"file":"containers/page-header/page-header.stories.tsx","story":"Default"}},{"name":"PageHeaderLede","slug":"page-header-lede","category":"containers","subpath":"containers","page":"/docs/components/page-header-lede","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/page-header"],"summary":"","declarationFile":"containers/page-header/page-header.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-pageheader--default","name":"Default"},{"id":"containers-pageheader--title-only","name":"Title Only"},{"id":"containers-pageheader--without-actions","name":"Without Actions"},{"id":"containers-pageheader--narrow","name":"Narrow"}],"example":{"file":"containers/page-header/page-header.stories.tsx","story":"Default"}},{"name":"PageHeaderTitle","slug":"page-header-title","category":"containers","subpath":"containers","page":"/docs/components/page-header-title","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/page-header"],"summary":"Page title. Wrap a word in `<span className=\"text-accent-word\">` to accent it.","declarationFile":"containers/page-header/page-header.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-pageheader--default","name":"Default"},{"id":"containers-pageheader--title-only","name":"Title Only"},{"id":"containers-pageheader--without-actions","name":"Without Actions"},{"id":"containers-pageheader--narrow","name":"Narrow"}],"example":{"file":"containers/page-header/page-header.stories.tsx","story":"Default"}},{"name":"ResizableHandle","slug":"resizable-handle","category":"containers","subpath":"containers","page":"/docs/components/resizable-handle","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/resizable"],"summary":"Draggable and keyboard-resizable separator between two panels.","declarationFile":"containers/resizable/resizable.tsx","props":[{"name":"label","type":"string","required":false,"default":null,"description":"Accessible name; the default describes the two neighbouring panels.","deprecated":false,"file":"containers/resizable/resizable.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-resizable--default","name":"Default"},{"id":"containers-resizable--vertical","name":"Vertical"},{"id":"containers-resizable--narrow","name":"Narrow"},{"id":"containers-resizable--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/resizable/resizable.stories.tsx","story":"Default"}},{"name":"ResizablePanel","slug":"resizable-panel","category":"containers","subpath":"containers","page":"/docs/components/resizable-panel","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/resizable"],"summary":"A panel of a ResizablePanelGroup. Sizes are percentages of the group.","declarationFile":"containers/resizable/resizable.tsx","props":[{"name":"defaultSize","type":"number","required":false,"default":null,"description":"Initial size in percent. Panels without one share what is left.","deprecated":false,"file":"containers/resizable/resizable.tsx"},{"name":"minSize","type":"number","required":false,"default":null,"description":"Percent, default 0.","deprecated":false,"file":"containers/resizable/resizable.tsx"},{"name":"maxSize","type":"number","required":false,"default":null,"description":"Percent, default 100.","deprecated":false,"file":"containers/resizable/resizable.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-resizable--default","name":"Default"},{"id":"containers-resizable--vertical","name":"Vertical"},{"id":"containers-resizable--narrow","name":"Narrow"},{"id":"containers-resizable--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/resizable/resizable.stories.tsx","story":"Default"}},{"name":"ResizablePanelGroup","slug":"resizable-panel-group","category":"containers","subpath":"containers","page":"/docs/components/resizable-panel-group","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/resizable"],"summary":"Row or column of resizable panels. Put a ResizableHandle between every two panels.","declarationFile":"containers/resizable/resizable.tsx","props":[{"name":"direction","type":"\"horizontal\" | \"vertical\"","required":false,"default":"\"horizontal\"","description":"","deprecated":false,"file":"containers/resizable/resizable.tsx"},{"name":"onLayout","type":"((sizes: number[]) => void)","required":false,"default":null,"description":"Called with the layout in percent after every change.","deprecated":false,"file":"containers/resizable/resizable.tsx"},{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"containers/resizable/resizable.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-resizable--default","name":"Default"},{"id":"containers-resizable--vertical","name":"Vertical"},{"id":"containers-resizable--narrow","name":"Narrow"},{"id":"containers-resizable--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/resizable/resizable.stories.tsx","story":"Default"}},{"name":"Scrolly","slug":"scrolly","category":"containers","subpath":"containers","page":"/docs/components/scrolly","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/scrolly"],"summary":"Scrollytelling: text steps scroll past while a graphic stays in view and follows the active\nstep. The active step is the one crossing a trigger line, found with an IntersectionObserver.\nWide containers put the graphic beside the steps, narrow ones pin it above them (container\nqueries, so it works inside a card or a dialog too). The text is real content in reading\norder, so it works with a screen reader and without scrolling effects.","declarationFile":"containers/scrolly/scrolly.tsx","props":[{"name":"graphic","type":"(state: ScrollyGraphicState) => ReactNode","required":true,"default":null,"description":"The sticky graphic: receives the active step, e.g. to change the data of a chart.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"children","type":"ReactNode","required":true,"default":null,"description":"`ScrollyStep` elements, in reading order.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"offset","type":"number","required":false,"default":"0.5","description":"Where the trigger line sits in the scroll area: 0 top, 0.5 middle (default), 1 bottom.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"root","type":"HTMLElement | null","required":false,"default":"null","description":"Scroll container the steps move in; the page by default.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"graphicHeight","type":"string","required":false,"default":"\"min(55svh, 26rem)\"","description":"Height of the sticky graphic, any CSS length.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"graphicSide","type":"\"start\" | \"end\"","required":false,"default":"\"end\"","description":"Which side the graphic takes when the container is wide.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"step","type":"number","required":false,"default":null,"description":"Controlled step; the scroll position decides when omitted.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"onStepChange","type":"((step: number) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"Accessible name of the narrative.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/scrolly/scrolly.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-scrolly--default","name":"Default"},{"id":"containers-scrolly--narrow","name":"Narrow"},{"id":"containers-scrolly--with-step-indicator","name":"With Step Indicator"},{"id":"containers-scrolly--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/scrolly/scrolly.stories.tsx","story":"Default"}},{"name":"ScrollyStep","slug":"scrolly-step","category":"containers","subpath":"containers","page":"/docs/components/scrolly-step","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/scrolly"],"summary":"One block of the narrative. Marked `aria-current=\"step\"` and `data-active` while it is the active one.","declarationFile":"containers/scrolly/scrolly.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"minHeight","type":"string","required":false,"default":"\"70svh\"","description":"Minimum height of the step, any CSS length; a tall step gives the reader time with the graphic.","deprecated":false,"file":"containers/scrolly/scrolly.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"containers/scrolly/scrolly.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"containers-scrolly--default","name":"Default"},{"id":"containers-scrolly--narrow","name":"Narrow"},{"id":"containers-scrolly--with-step-indicator","name":"With Step Indicator"},{"id":"containers-scrolly--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/scrolly/scrolly.stories.tsx","story":"Default"}},{"name":"SettingsLayout","slug":"settings-layout","category":"containers","subpath":"containers","page":"/docs/components/settings-layout","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/settings-layout"],"summary":"Two-column settings grid (side nav + content). Collapses to one column at\n940px or less of the ancestor `@container/page`.","declarationFile":"containers/settings-layout/settings-layout.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-settingslayout--default","name":"Default"},{"id":"containers-settingslayout--narrow-page","name":"Narrow Page"},{"id":"containers-settingslayout--narrow","name":"Narrow"}],"example":{"file":"containers/settings-layout/settings-layout.stories.tsx","story":"Default"}},{"name":"SettingsLayoutMain","slug":"settings-layout-main","category":"containers","subpath":"containers","page":"/docs/components/settings-layout-main","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/settings-layout"],"summary":"Content column: a single stack that becomes a 2-column masonry at 1180px of\npage width, where each direct child (a card) is not split across columns.","declarationFile":"containers/settings-layout/settings-layout.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-settingslayout--default","name":"Default"},{"id":"containers-settingslayout--narrow-page","name":"Narrow Page"},{"id":"containers-settingslayout--narrow","name":"Narrow"}],"example":{"file":"containers/settings-layout/settings-layout.stories.tsx","story":"Default"}},{"name":"SettingsLayoutNav","slug":"settings-layout-nav","category":"containers","subpath":"containers","page":"/docs/components/settings-layout-nav","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/settings-layout"],"summary":"Sticky side nav that becomes a scrollable horizontal row on narrow pages.","declarationFile":"containers/settings-layout/settings-layout.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-settingslayout--default","name":"Default"},{"id":"containers-settingslayout--narrow-page","name":"Narrow Page"},{"id":"containers-settingslayout--narrow","name":"Narrow"}],"example":{"file":"containers/settings-layout/settings-layout.stories.tsx","story":"Default"}},{"name":"SettingsLayoutNavItem","slug":"settings-layout-nav-item","category":"containers","subpath":"containers","page":"/docs/components/settings-layout-nav-item","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/settings-layout"],"summary":"","declarationFile":"containers/settings-layout/settings-layout.tsx","props":[{"name":"active","type":"boolean","required":false,"default":null,"description":"Currently visible section.","deprecated":false,"file":"containers/settings-layout/settings-layout.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-settingslayout--default","name":"Default"},{"id":"containers-settingslayout--narrow-page","name":"Narrow Page"},{"id":"containers-settingslayout--narrow","name":"Narrow"}],"example":{"file":"containers/settings-layout/settings-layout.stories.tsx","story":"Default"}},{"name":"SettingsRow","slug":"settings-row","category":"containers","subpath":"containers","page":"/docs/components/settings-row","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/settings-row"],"summary":"","declarationFile":"containers/settings-row/settings-row.tsx","props":[{"name":"title","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"containers/settings-row/settings-row.tsx"},{"name":"description","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"containers/settings-row/settings-row.tsx"},{"name":"control","type":"ReactNode","required":false,"default":null,"description":"Control on the right: a switch, a button, etc.","deprecated":false,"file":"containers/settings-row/settings-row.tsx"},{"name":"titleId","type":"string","required":false,"default":null,"description":"Id for the title element, so the control can reference it with `aria-labelledby`.","deprecated":false,"file":"containers/settings-row/settings-row.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-settingsrow--default","name":"Default"},{"id":"containers-settingsrow--with-button","name":"With Button"},{"id":"containers-settingsrow--without-description","name":"Without Description"},{"id":"containers-settingsrow--without-control","name":"Without Control"},{"id":"containers-settingsrow--narrow","name":"Narrow"}],"example":{"file":"containers/settings-row/settings-row.stories.tsx","story":"Default"}},{"name":"Table","slug":"table","category":"containers","subpath":"containers","page":"/docs/components/table","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"Table inside its own horizontal scroll wrapper. Give columns a `columnId` (header and cells)\nand mark header cells `pinnable` to let the user pin them to the left or right edge: pinned\ncolumns stay sticky while the rest scrolls.","declarationFile":"containers/table/table.tsx","props":[{"name":"pinnedColumns","type":"PinnedColumns","required":false,"default":null,"description":"Controlled pinned columns (ids of `columnId`). Pair it with `onPinnedColumnsChange`.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"defaultPinnedColumns","type":"PinnedColumns","required":false,"default":null,"description":"Initial pins when uncontrolled.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"onPinnedColumnsChange","type":"((pinned: { left: string[]; right: string[]; }) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"containers/table/table.tsx"},{"name":"pinStorageKey","type":"string","required":false,"default":null,"description":"localStorage key that remembers the user's pins (uncontrolled only).","deprecated":false,"file":"containers/table/table.tsx"},{"name":"labels","type":"Partial<TableLabels>","required":false,"default":null,"description":"Texts of the pin buttons (Spanish by default).","deprecated":false,"file":"containers/table/table.tsx"},{"name":"wrapperClassName","type":"string","required":false,"default":null,"description":"Classes of the scroll wrapper.","deprecated":false,"file":"containers/table/table.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableBody","slug":"table-body","category":"containers","subpath":"containers","page":"/docs/components/table-body","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"","declarationFile":"containers/table/table.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableCell","slug":"table-cell","category":"containers","subpath":"containers","page":"/docs/components/table-cell","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"","declarationFile":"containers/table/table.tsx","props":[{"name":"alignRight","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"containers/table/table.tsx"},{"name":"columnId","type":"string","required":false,"default":null,"description":"Identifies the column so it can be pinned. Use the same id on the header and its cells.","deprecated":false,"file":"containers/table/table.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableHead","slug":"table-head","category":"containers","subpath":"containers","page":"/docs/components/table-head","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"","declarationFile":"containers/table/table.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableHeaderCell","slug":"table-header-cell","category":"containers","subpath":"containers","page":"/docs/components/table-header-cell","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"","declarationFile":"containers/table/table.tsx","props":[{"name":"alignRight","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"containers/table/table.tsx"},{"name":"columnId","type":"string","required":false,"default":null,"description":"Identifies the column so it can be pinned. Use the same id on the header and its cells.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"pinnable","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"containers/table/table.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableLinkRow","slug":"table-link-row","category":"containers","subpath":"containers","page":"/docs/components/table-link-row","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"Fully navigable table row: the real link lives in the first cell and, via a\nstretched link (positioned `<tr>` + anchor `::before` at `inset-0`), its\nclick area covers the whole row without duplicating the link per cell.","declarationFile":"containers/table/table.tsx","props":[{"name":"href","type":"string","required":true,"default":null,"description":"Row destination: rendered as a real `<a href>` in the first cell.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"primary","type":"ReactNode","required":true,"default":null,"description":"Content of the first cell, wrapped by the anchor.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"primaryColumnId","type":"string","required":false,"default":null,"description":"`columnId` of the first cell, so that column can be pinned.","deprecated":false,"file":"containers/table/table.tsx"},{"name":"children","type":"ReactNode","required":false,"default":null,"description":"Additional `<td>` cells of the row.","deprecated":false,"file":"containers/table/table.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"TableRow","slug":"table-row","category":"containers","subpath":"containers","page":"/docs/components/table-row","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/table"],"summary":"","declarationFile":"containers/table/table.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-table--default","name":"Default"},{"id":"containers-table--link-rows","name":"Link Rows"},{"id":"containers-table--empty","name":"Empty"},{"id":"containers-table--pinned-left-and-right","name":"PinnedColumns"},{"id":"containers-table--user-pinning","name":"User Pinning"},{"id":"containers-table--controlled-pinning","name":"Controlled Pinning"},{"id":"containers-table--narrow","name":"Narrow"}],"example":{"file":"containers/table/table.stories.tsx","story":"Default"}},{"name":"Timeline","slug":"timeline","category":"containers","subpath":"containers","page":"/docs/components/timeline","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/timeline"],"summary":"Vertical activity feed: marker rail on the left, grouped by day, newest first by convention.","declarationFile":"containers/timeline/timeline.tsx","props":[{"name":"items","type":"TimelineFeedItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"containers/timeline/timeline.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-timeline--default","name":"Default"},{"id":"containers-timeline--ungrouped","name":"Ungrouped"},{"id":"containers-timeline--narrow","name":"Narrow"},{"id":"containers-timeline--brutal-preset","name":"Brutal Preset"}],"example":{"file":"containers/timeline/timeline.stories.tsx","story":"Default"}},{"name":"Toolbar","slug":"toolbar","category":"containers","subpath":"containers","page":"/docs/components/toolbar","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/toolbar"],"summary":"Row of filters/controls above a table or grid.","declarationFile":"containers/toolbar/toolbar.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-toolbar--default","name":"Default"},{"id":"containers-toolbar--filters-only","name":"Filters Only"},{"id":"containers-toolbar--narrow","name":"Narrow"}],"example":{"file":"containers/toolbar/toolbar.stories.tsx","story":"Default"}},{"name":"ToolbarRight","slug":"toolbar-right","category":"containers","subpath":"containers","page":"/docs/components/toolbar-right","importPath":"@jcsoftdev/ui/containers","singleEntries":["@jcsoftdev/ui/containers/toolbar"],"summary":"Group pushed to the right edge of the toolbar.","declarationFile":"containers/toolbar/toolbar.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"containers-toolbar--default","name":"Default"},{"id":"containers-toolbar--filters-only","name":"Filters Only"},{"id":"containers-toolbar--narrow","name":"Narrow"}],"example":{"file":"containers/toolbar/toolbar.stories.tsx","story":"Default"}},{"name":"AccentPicker","slug":"accent-picker","category":"forms","subpath":"forms","page":"/docs/components/accent-picker","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/accent-picker"],"summary":"Exclusive swatch picker. Controlled or uncontrolled; the root exposes\n`data-accent` with the active option so consumers can read it. Applying the\nvalue to the document is the consumer's responsibility.","declarationFile":"forms/accent-picker/accent-picker.tsx","props":[{"name":"options","type":"AccentOption[]","required":true,"default":null,"description":"","deprecated":false,"file":"forms/accent-picker/accent-picker.tsx"},{"name":"value","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/accent-picker/accent-picker.tsx"},{"name":"defaultValue","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/accent-picker/accent-picker.tsx"},{"name":"onValueChange","type":"((value: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/accent-picker/accent-picker.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-accentpicker--default","name":"Default"},{"id":"forms-accentpicker--disabled","name":"Disabled"},{"id":"forms-accentpicker--controlled","name":"Controlled"}],"example":{"file":"forms/accent-picker/accent-picker.stories.tsx","story":"Default"}},{"name":"CheckboxButtonGroup","slug":"checkbox-button-group","category":"forms","subpath":"forms","page":"/docs/components/checkbox-button-group","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/checkbox-button-group"],"summary":"Multi-select where each option is a button-like card; native checkboxes underneath.","declarationFile":"forms/checkbox-button-group/checkbox-button-group.tsx","props":[{"name":"options","type":"ButtonOption[]","required":true,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"value","type":"string[]","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"defaultValue","type":"string[]","required":false,"default":"[]","description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"onValueChange","type":"((value: string[]) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"Form field name shared by the checkboxes.","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"aria-labelledby","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/checkbox-button-group/checkbox-button-group.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-checkboxbuttongroup--default","name":"Default"},{"id":"forms-checkboxbuttongroup--disabled","name":"Disabled"},{"id":"forms-checkboxbuttongroup--narrow","name":"Narrow"},{"id":"forms-checkboxbuttongroup--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/checkbox-button-group/checkbox-button-group.stories.tsx","story":"Default"}},{"name":"Dropzone","slug":"dropzone","category":"forms","subpath":"forms","page":"/docs/components/dropzone","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/dropzone"],"summary":"","declarationFile":"forms/dropzone/dropzone.tsx","props":[{"name":"onFiles","type":"(files: File[]) => void","required":true,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"onReject","type":"((rejections: DropzoneRejection[]) => void)","required":false,"default":null,"description":"Called with the rejected files; the caller composes the user-facing message.","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"acceptedTypes","type":"string[]","required":false,"default":null,"description":"Accepted MIME types; supports wildcards such as `image/*`.","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"maxSizeBytes","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"multiple","type":"boolean","required":false,"default":"true","description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"title","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"hint","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"browseLabel","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/dropzone/dropzone.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-dropzone--default","name":"Default"},{"id":"forms-dropzone--single-file","name":"Single File"},{"id":"forms-dropzone--only-pdf","name":"Only Pdf"},{"id":"forms-dropzone--with-feedback","name":"With Feedback"},{"id":"forms-dropzone--narrow","name":"Narrow"}],"example":{"file":"forms/dropzone/dropzone.stories.tsx","story":"Default"}},{"name":"EmojiPicker","slug":"emoji-picker","category":"forms","subpath":"forms","page":"/docs/components/emoji-picker","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/emoji-picker"],"summary":"Emoji panel with search, category tabs and a keyboard-navigable grid (arrows, Home/End; Enter or\nSpace picks). The panel adapts to its container width and holds no portal, so it works inline or\ninside a popover.","declarationFile":"forms/emoji-picker/emoji-picker.tsx","props":[{"name":"onSelect","type":"((emoji: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-picker/emoji-picker.tsx"},{"name":"categories","type":"EmojiCategory[]","required":false,"default":"EMOJI_CATEGORIES","description":"Replaces the built-in dataset (`EMOJI_CATEGORIES`).","deprecated":false,"file":"forms/emoji-picker/emoji-picker.tsx"},{"name":"defaultCategory","type":"string","required":false,"default":null,"description":"Initial category id.","deprecated":false,"file":"forms/emoji-picker/emoji-picker.tsx"},{"name":"searchPlaceholder","type":"string","required":false,"default":"\"Buscar emoji\"","description":"","deprecated":false,"file":"forms/emoji-picker/emoji-picker.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-picker/emoji-picker.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-emojipicker--default","name":"Default"},{"id":"forms-emojipicker--narrow","name":"Narrow"},{"id":"forms-emojipicker--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/emoji-picker/emoji-picker.stories.tsx","story":"Default"}},{"name":"EmojiReactionBar","slug":"emoji-reaction-bar","category":"forms","subpath":"forms","page":"/docs/components/emoji-reaction-bar","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/emoji-reaction-button"],"summary":"Row of reaction chips plus an \"add reaction\" button that opens an emoji picker.","declarationFile":"forms/emoji-reaction-button/emoji-reaction-button.tsx","props":[{"name":"reactions","type":"Reaction[]","required":true,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"onReact","type":"((emoji: string, reacted: boolean) => void)","required":false,"default":null,"description":"Called with the emoji and the new reacted state, from a chip or from the picker.","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"container","type":"HTMLElement | null","required":false,"default":null,"description":"Portal target for the picker; pass an element to keep a scoped `data-style`.","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"addLabel","type":"string","required":false,"default":"\"Añadir reacción\"","description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-emojireactionbutton--default","name":"Default"},{"id":"forms-emojireactionbutton--reacted","name":"Reacted"},{"id":"forms-emojireactionbutton--with-picker","name":"With Picker"},{"id":"forms-emojireactionbutton--narrow","name":"Narrow"},{"id":"forms-emojireactionbutton--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/emoji-reaction-button/emoji-reaction-button.stories.tsx","story":"Default"}},{"name":"EmojiReactionButton","slug":"emoji-reaction-button","category":"forms","subpath":"forms","page":"/docs/components/emoji-reaction-button","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/emoji-reaction-button"],"summary":"Reaction chip: an emoji with its count, pressed when the current user reacted.","declarationFile":"forms/emoji-reaction-button/emoji-reaction-button.tsx","props":[{"name":"emoji","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"count","type":"number","required":true,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"reacted","type":"boolean","required":false,"default":"false","description":"Whether the current user has used this reaction.","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"onToggle","type":"((reacted: boolean) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/emoji-reaction-button/emoji-reaction-button.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-emojireactionbutton--default","name":"Default"},{"id":"forms-emojireactionbutton--reacted","name":"Reacted"},{"id":"forms-emojireactionbutton--with-picker","name":"With Picker"},{"id":"forms-emojireactionbutton--narrow","name":"Narrow"},{"id":"forms-emojireactionbutton--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/emoji-reaction-button/emoji-reaction-button.stories.tsx","story":"Default"}},{"name":"Field","slug":"field","category":"forms","subpath":"forms","page":"/docs/components/field","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/field"],"summary":"","declarationFile":"forms/field/field.tsx","props":[{"name":"label","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"},{"name":"hint","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"},{"name":"error","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"},{"name":"id","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"},{"name":"children","type":"ReactElement<ControlProps, string | React.JSXElementConstructor<any>>","required":true,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/field/field.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-field--default","name":"Default"},{"id":"forms-field--with-error","name":"With Error"},{"id":"forms-field--hint-and-error","name":"Hint And Error"},{"id":"forms-field--with-select","name":"With Select"},{"id":"forms-field--with-textarea","name":"With Textarea"},{"id":"forms-field--controlled-form","name":"Controlled Form"}],"example":{"file":"forms/field/field.stories.tsx","story":"Default"}},{"name":"FormGrid","slug":"form-grid","category":"forms","subpath":"forms","page":"/docs/components/form-grid","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/form-grid"],"summary":"Grid for pairs of fields. One column in a narrow container, two columns from 620px of\ncontainer width (the wrapper is the size container; the grid keeps `className` and props).","declarationFile":"forms/form-grid/form-grid.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-formgrid--default","name":"Default"},{"id":"forms-formgrid--new-appointment","name":"New Appointment"},{"id":"forms-formgrid--narrow","name":"Narrow"}],"example":{"file":"forms/form-grid/form-grid.stories.tsx","story":"Default"}},{"name":"InlineSelect","slug":"inline-select","category":"forms","subpath":"forms","page":"/docs/components/inline-select","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/inline-select"],"summary":"Borderless select that reads as part of a sentence or a row (\"Repetir cada [semana v]\").\nNative `<select>` underneath, so the system picker and keyboard behaviour are kept.","declarationFile":"forms/inline-select/inline-select.tsx","props":[{"name":"options","type":"InlineSelectOption[]","required":true,"default":null,"description":"","deprecated":false,"file":"forms/inline-select/inline-select.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-inlineselect--default","name":"Default"},{"id":"forms-inlineselect--disabled","name":"Disabled"},{"id":"forms-inlineselect--narrow","name":"Narrow"},{"id":"forms-inlineselect--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/inline-select/inline-select.stories.tsx","story":"Default"}},{"name":"Input","slug":"input","category":"forms","subpath":"forms","page":"/docs/components/input","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/input"],"summary":"","declarationFile":"forms/input/input.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-input--default","name":"Default"},{"id":"forms-input--with-value","name":"With Value"},{"id":"forms-input--telephone","name":"Telephone"},{"id":"forms-input--invalid","name":"Invalid"},{"id":"forms-input--disabled","name":"Disabled"},{"id":"forms-input--read-only","name":"Read Only"}],"example":{"file":"forms/input/input.stories.tsx","story":"Default"}},{"name":"InputIcon","slug":"input-icon","category":"forms","subpath":"forms","page":"/docs/components/input-icon","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/input-icon"],"summary":"","declarationFile":"forms/input-icon/input-icon.tsx","props":[{"name":"icon","type":"ReactNode","required":true,"default":null,"description":"Leading icon element (e.g. a lucide-react icon).","deprecated":false,"file":"forms/input-icon/input-icon.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-inputicon--default","name":"Default"},{"id":"forms-inputicon--telephone","name":"Telephone"},{"id":"forms-inputicon--invalid","name":"Invalid"},{"id":"forms-inputicon--disabled","name":"Disabled"}],"example":{"file":"forms/input-icon/input-icon.stories.tsx","story":"Default"}},{"name":"Label","slug":"label","category":"forms","subpath":"forms","page":"/docs/components/label","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/label"],"summary":"","declarationFile":"forms/label/label.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-label--default","name":"Default"},{"id":"forms-label--servicio","name":"Servicio"}],"example":{"file":"forms/label/label.stories.tsx","story":"Default"}},{"name":"NativeSelect","slug":"native-select","category":"forms","subpath":"forms","page":"/docs/components/native-select","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/native-select"],"summary":"Styled native `<select>` (keeps the system picker on touch devices). It extends the existing\n`Select` styling with a data-driven `options` API, optgroups, a placeholder and a compact size.","declarationFile":"forms/native-select/native-select.tsx","props":[{"name":"options","type":"(NativeSelectOption | NativeSelectGroup)[]","required":false,"default":null,"description":"Data-driven alternative to `<option>` children; groups render as `<optgroup>`.","deprecated":false,"file":"forms/native-select/native-select.tsx"},{"name":"placeholder","type":"string","required":false,"default":null,"description":"Disabled first option shown while nothing is chosen.","deprecated":false,"file":"forms/native-select/native-select.tsx"},{"name":"size","type":"\"sm\" | \"md\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"forms/native-select/native-select.tsx"},{"name":"invalid","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/native-select/native-select.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-nativeselect--default","name":"Default"},{"id":"forms-nativeselect--small","name":"Small"},{"id":"forms-nativeselect--invalid","name":"Invalid"},{"id":"forms-nativeselect--narrow","name":"Narrow"},{"id":"forms-nativeselect--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/native-select/native-select.stories.tsx","story":"Default"}},{"name":"NumberStepper","slug":"number-stepper","category":"forms","subpath":"forms","page":"/docs/components/number-stepper","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/number-stepper"],"summary":"Counter with minus/plus buttons and a typeable value; ArrowUp/ArrowDown step it, Home/End jump.","declarationFile":"forms/number-stepper/number-stepper.tsx","props":[{"name":"value","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"defaultValue","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"onValueChange","type":"((value: number) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"min","type":"number","required":false,"default":"Number.NEGATIVE_INFINITY","description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"max","type":"number","required":false,"default":"Number.POSITIVE_INFINITY","description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"step","type":"number","required":false,"default":"1","description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"unit","type":"string","required":false,"default":null,"description":"Text after the number, e.g. \"min\" or \"unid.\"; read by screen readers through aria-valuetext.","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"aria-labelledby","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/number-stepper/number-stepper.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-numberstepper--default","name":"Default"},{"id":"forms-numberstepper--with-unit","name":"With Unit"},{"id":"forms-numberstepper--decimals","name":"Decimals"},{"id":"forms-numberstepper--disabled","name":"Disabled"},{"id":"forms-numberstepper--controlled-value","name":"Controlled Value"},{"id":"forms-numberstepper--narrow","name":"Narrow"},{"id":"forms-numberstepper--brutal-preset","name":"Brutal Preset"},{"id":"forms-numberstepper--in-shrink-wrap-row","name":"In Shrink Wrap Row"}],"example":{"file":"forms/number-stepper/number-stepper.stories.tsx","story":"Default"}},{"name":"PinInput","slug":"pin-input","category":"forms","subpath":"forms","page":"/docs/components/pin-input","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/pin-input"],"summary":"Masked numeric PIN. `autocomplete` is disabled on purpose so browsers do not\nmistake it for a one-time code.","declarationFile":"forms/pin-input/pin-input.tsx","props":[{"name":"length","type":"number","required":false,"default":"4","description":"","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"value","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"defaultValue","type":"string","required":false,"default":"\"\"","description":"","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"onValueChange","type":"((value: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"label","type":"string","required":false,"default":"\"PIN\"","description":"Accessible name of the input.","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"statusLabel","type":"((entered: number, length: number) => string)","required":false,"default":"defaultStatusLabel","description":"Builds the polite live-region announcement.","deprecated":false,"file":"forms/pin-input/pin-input.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/pin-input/pin-input.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-pininput--default","name":"Default"},{"id":"forms-pininput--six-digits","name":"Six Digits"},{"id":"forms-pininput--prefilled","name":"Prefilled"},{"id":"forms-pininput--spanish-status","name":"Spanish Status"},{"id":"forms-pininput--controlled","name":"Controlled"},{"id":"forms-pininput--narrow","name":"Narrow"}],"example":{"file":"forms/pin-input/pin-input.stories.tsx","story":"Default"}},{"name":"RadioButtonGroup","slug":"radio-button-group","category":"forms","subpath":"forms","page":"/docs/components/radio-button-group","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/radio-button-group"],"summary":"Exclusive choice where each option is a button-like card. Native radios underneath, so arrow\nkeys, form submission and the `radiogroup` semantics come from the browser. Distinct from\n`RadioGroup` (dot indicator) and `Segmented` (2-4 compact options).","declarationFile":"forms/radio-button-group/radio-button-group.tsx","props":[{"name":"options","type":"ButtonOption[]","required":true,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"value","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"defaultValue","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"onValueChange","type":"((value: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"aria-labelledby","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/radio-button-group/radio-button-group.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-radiobuttongroup--default","name":"Default"},{"id":"forms-radiobuttongroup--disabled","name":"Disabled"},{"id":"forms-radiobuttongroup--narrow","name":"Narrow"},{"id":"forms-radiobuttongroup--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/radio-button-group/radio-button-group.stories.tsx","story":"Default"}},{"name":"Rating","slug":"rating","category":"forms","subpath":"forms","page":"/docs/components/rating","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/rating"],"summary":"Star rating. Editable ratings are a single `role=\"slider\"` (arrows, Home/End); read-only ones\nare an `img` with the value as its label. Half values render as a half-filled star.","declarationFile":"forms/rating/rating.tsx","props":[{"name":"value","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"defaultValue","type":"number","required":false,"default":"0","description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"onValueChange","type":"((value: number) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"max","type":"number","required":false,"default":"5","description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"precision","type":"1 | 0.5","required":false,"default":"1","description":"0.5 allows half stars.","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"readOnly","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"size","type":"\"sm\" | \"md\" | \"lg\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"showValue","type":"boolean","required":false,"default":null,"description":"Shows the numeric value after the stars.","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/rating/rating.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-rating--default","name":"Default"},{"id":"forms-rating--half-stars","name":"Half Stars"},{"id":"forms-rating--read-only","name":"Read Only"},{"id":"forms-rating--sizes","name":"Sizes"},{"id":"forms-rating--controlled-value","name":"Controlled Value"},{"id":"forms-rating--narrow","name":"Narrow"},{"id":"forms-rating--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/rating/rating.stories.tsx","story":"Default"}},{"name":"Select","slug":"select","category":"forms","subpath":"forms","page":"/docs/components/select","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/select"],"summary":"Wraps the native `<select>` (keeps the system picker on mobile) and draws\nthe chevron with an icon.","declarationFile":"forms/select/select.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-select--default","name":"Default"},{"id":"forms-select--with-selection","name":"With Selection"},{"id":"forms-select--invalid","name":"Invalid"},{"id":"forms-select--disabled","name":"Disabled"}],"example":{"file":"forms/select/select.stories.tsx","story":"Default"}},{"name":"Slider","slug":"slider","category":"forms","subpath":"forms","page":"/docs/components/slider","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/slider"],"summary":"Single or range slider. The value shape decides the mode: a number gives one thumb and a\n`[from, to]` tuple gives two. Each thumb is a `role=\"slider\"` with arrow, Page and Home/End keys.","declarationFile":"forms/slider/slider.tsx","props":[{"name":"value","type":"number | RangeValue","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"defaultValue","type":"number | RangeValue","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"onValueChange","type":"((value: number) => void) | ((value: RangeValue) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"min","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"max","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"step","type":"number","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"pageStep","type":"number","required":false,"default":null,"description":"Step used by PageUp/PageDown. Defaults to 10 steps.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"minGap","type":"number","required":false,"default":null,"description":"Minimum distance between the two thumbs of a range.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"marks","type":"SliderMark[]","required":false,"default":null,"description":"Ticks on the track; a `label` renders as a caption under it.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"showValue","type":"boolean","required":false,"default":null,"description":"Shows the current value above each thumb; it is emphasized while dragged or focused.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"formatValue","type":"((value: number) => string)","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"Accessible name; thumbs of a range get \"mínimo\"/\"máximo\" appended.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"aria-labelledby","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"name","type":"string","required":false,"default":null,"description":"Form field name; a range submits `${name}-min` and `${name}-max`.","deprecated":false,"file":"forms/slider/slider.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"forms/slider/slider.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-slider--default","name":"Default"},{"id":"forms-slider--with-marks","name":"With Marks"},{"id":"forms-slider--range","name":"Range"},{"id":"forms-slider--disabled","name":"Disabled"},{"id":"forms-slider--controlled-value","name":"Controlled Value"},{"id":"forms-slider--narrow","name":"Narrow"},{"id":"forms-slider--brutal-preset","name":"Brutal Preset"}],"example":{"file":"forms/slider/slider.stories.tsx","story":"Default"}},{"name":"Textarea","slug":"textarea","category":"forms","subpath":"forms","page":"/docs/components/textarea","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/textarea"],"summary":"","declarationFile":"forms/textarea/textarea.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-textarea--default","name":"Default"},{"id":"forms-textarea--with-value","name":"With Value"},{"id":"forms-textarea--invalid","name":"Invalid"},{"id":"forms-textarea--disabled","name":"Disabled"}],"example":{"file":"forms/textarea/textarea.stories.tsx","story":"Default"}},{"name":"TimeInput","slug":"time-input","category":"forms","subpath":"forms","page":"/docs/components/time-input","importPath":"@jcsoftdev/ui/forms","singleEntries":["@jcsoftdev/ui/forms/time-input"],"summary":"24h time field. A masked text input, so it renders \"15:30\" whatever the browser\nlocale is. ArrowUp / ArrowDown change the segment under the caret (minutes move by `step`).","declarationFile":"forms/time-input/time-input.tsx","props":[{"name":"value","type":"string","required":false,"default":null,"description":"24h \"HH:MM\" (controlled).","deprecated":false,"file":"forms/time-input/time-input.tsx"},{"name":"defaultValue","type":"string","required":false,"default":"\"\"","description":"","deprecated":false,"file":"forms/time-input/time-input.tsx"},{"name":"onValueChange","type":"((value: string) => void)","required":false,"default":null,"description":"Called with a valid \"HH:MM\" string, or \"\" when the field is cleared.","deprecated":false,"file":"forms/time-input/time-input.tsx"},{"name":"step","type":"number","required":false,"default":"5","description":"Minutes added or removed by ArrowUp / ArrowDown on the minutes segment.","deprecated":false,"file":"forms/time-input/time-input.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"forms-timeinput--default","name":"Default"},{"id":"forms-timeinput--empty","name":"Empty"},{"id":"forms-timeinput--step-15","name":"Step 15"},{"id":"forms-timeinput--invalid","name":"Invalid"},{"id":"forms-timeinput--disabled","name":"Disabled"},{"id":"forms-timeinput--controlled","name":"Controlled"}],"example":{"file":"forms/time-input/time-input.stories.tsx","story":"Default"}},{"name":"FloatingToc","slug":"floating-toc","category":"navigation","subpath":"navigation","page":"/docs/components/floating-toc","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/floating-toc"],"summary":"Table of contents that tracks the section being read. An IntersectionObserver watches the\ntop band of the scroll area; the first heading inside it is current (`aria-current=\"location\"`).","declarationFile":"navigation/floating-toc/floating-toc.tsx","props":[{"name":"items","type":"TocItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"navigation/floating-toc/floating-toc.tsx"},{"name":"title","type":"string","required":false,"default":"\"En esta página\"","description":"Heading shown above the list.","deprecated":false,"file":"navigation/floating-toc/floating-toc.tsx"},{"name":"scrollRoot","type":"RefObject<HTMLElement | null>","required":false,"default":null,"description":"Scroll container that holds the headings. Omit to observe the viewport.\nPass a ref (not the element) so it can be resolved after mount.","deprecated":false,"file":"navigation/floating-toc/floating-toc.tsx"},{"name":"onActiveChange","type":"((id: string | null) => void)","required":false,"default":null,"description":"Called when the active section changes.","deprecated":false,"file":"navigation/floating-toc/floating-toc.tsx"},{"name":"offsetTop","type":"number","required":false,"default":"0","description":"Pixels reserved at the top (sticky headers) when jumping to a section.","deprecated":false,"file":"navigation/floating-toc/floating-toc.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-floatingtoc--default","name":"Default"},{"id":"navigation-floatingtoc--narrow","name":"Narrow"},{"id":"navigation-floatingtoc--brutal-preset","name":"Brutal Preset"}],"example":{"file":"navigation/floating-toc/floating-toc.stories.tsx","story":"Default"}},{"name":"Segmented","slug":"segmented","category":"navigation","subpath":"navigation","page":"/docs/components/segmented","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/segmented"],"summary":"Exclusive selector for 2-4 options. `type=\"single\"` gives Radix the `radiogroup` role.","declarationFile":"navigation/segmented/segmented.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-segmented--default","name":"Default"},{"id":"navigation-segmented--disabled","name":"Disabled"},{"id":"navigation-segmented--two-options","name":"Two Options"},{"id":"navigation-segmented--one-item-disabled","name":"One Item Disabled"},{"id":"navigation-segmented--controlled","name":"Controlled"},{"id":"navigation-segmented--narrow","name":"Narrow"}],"example":{"file":"navigation/segmented/segmented.stories.tsx","story":"Default"}},{"name":"SegmentedItem","slug":"segmented-item","category":"navigation","subpath":"navigation","page":"/docs/components/segmented-item","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/segmented"],"summary":"","declarationFile":"navigation/segmented/segmented.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-segmented--default","name":"Default"},{"id":"navigation-segmented--disabled","name":"Disabled"},{"id":"navigation-segmented--two-options","name":"Two Options"},{"id":"navigation-segmented--one-item-disabled","name":"One Item Disabled"},{"id":"navigation-segmented--controlled","name":"Controlled"},{"id":"navigation-segmented--narrow","name":"Narrow"}],"example":{"file":"navigation/segmented/segmented.stories.tsx","story":"Default"}},{"name":"Stepper","slug":"stepper","category":"navigation","subpath":"navigation","page":"/docs/components/stepper","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/stepper"],"summary":"Step 1-N indicator for multi-stage flows.","declarationFile":"navigation/stepper/stepper.tsx","props":[{"name":"steps","type":"Step[]","required":true,"default":null,"description":"","deprecated":false,"file":"navigation/stepper/stepper.tsx"},{"name":"currentStepId","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"navigation/stepper/stepper.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"navigation/stepper/stepper.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"navigation-stepper--default","name":"Default"},{"id":"navigation-stepper--first-step","name":"First Step"},{"id":"navigation-stepper--last-step","name":"Last Step"},{"id":"navigation-stepper--three-steps","name":"Three Steps"},{"id":"navigation-stepper--narrow","name":"Narrow"}],"example":{"file":"navigation/stepper/stepper.stories.tsx","story":"Default"}},{"name":"Tabs","slug":"tabs","category":"navigation","subpath":"navigation","page":"/docs/components/tabs","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/tabs"],"summary":"To sync the active tab with a search param, use Radix's controlled pattern:\n`value={param}` + `onValueChange={(v) => updateParam(v)}`.","declarationFile":"navigation/tabs/tabs.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-tabs--default","name":"Default"},{"id":"navigation-tabs--with-counts","name":"With Counts"},{"id":"navigation-tabs--disabled-tab","name":"Disabled Tab"},{"id":"navigation-tabs--controlled","name":"Controlled"},{"id":"navigation-tabs--narrow","name":"Narrow"}],"example":{"file":"navigation/tabs/tabs.stories.tsx","story":"Default"}},{"name":"TabsContent","slug":"tabs-content","category":"navigation","subpath":"navigation","page":"/docs/components/tabs-content","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/tabs"],"summary":"","declarationFile":"navigation/tabs/tabs.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-tabs--default","name":"Default"},{"id":"navigation-tabs--with-counts","name":"With Counts"},{"id":"navigation-tabs--disabled-tab","name":"Disabled Tab"},{"id":"navigation-tabs--controlled","name":"Controlled"},{"id":"navigation-tabs--narrow","name":"Narrow"}],"example":{"file":"navigation/tabs/tabs.stories.tsx","story":"Default"}},{"name":"TabsList","slug":"tabs-list","category":"navigation","subpath":"navigation","page":"/docs/components/tabs-list","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/tabs"],"summary":"","declarationFile":"navigation/tabs/tabs.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-tabs--default","name":"Default"},{"id":"navigation-tabs--with-counts","name":"With Counts"},{"id":"navigation-tabs--disabled-tab","name":"Disabled Tab"},{"id":"navigation-tabs--controlled","name":"Controlled"},{"id":"navigation-tabs--narrow","name":"Narrow"}],"example":{"file":"navigation/tabs/tabs.stories.tsx","story":"Default"}},{"name":"TabsTrigger","slug":"tabs-trigger","category":"navigation","subpath":"navigation","page":"/docs/components/tabs-trigger","importPath":"@jcsoftdev/ui/navigation","singleEntries":["@jcsoftdev/ui/navigation/tabs"],"summary":"","declarationFile":"navigation/tabs/tabs.tsx","props":[{"name":"count","type":"number","required":false,"default":null,"description":"Optional record count shown after the label.","deprecated":false,"file":"navigation/tabs/tabs.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"navigation-tabs--default","name":"Default"},{"id":"navigation-tabs--with-counts","name":"With Counts"},{"id":"navigation-tabs--disabled-tab","name":"Disabled Tab"},{"id":"navigation-tabs--controlled","name":"Controlled"},{"id":"navigation-tabs--narrow","name":"Narrow"}],"example":{"file":"navigation/tabs/tabs.stories.tsx","story":"Default"}},{"name":"ContextMenu","slug":"context-menu","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"Menu opened by right-click, long-press or the keyboard (Menu key, Shift+F10) on its trigger\narea. It reuses the dropdown-menu primitive anchored to the pointer, so roving focus,\ntypeahead, submenu keys, Escape and collision handling come for free.","declarationFile":"overlays/context-menu/context-menu.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"},{"name":"onOpenChange","type":"((open: boolean) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"},{"name":"defaultOpen","type":"boolean","required":false,"default":"false","description":"Starts open, anchored at `position` (viewport pixels). Useful for docs and visual tests.","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"},{"name":"position","type":"{ x: number; y: number; }","required":false,"default":null,"description":"Initial anchor point in viewport pixels. Defaults to the origin until the first right-click.","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuCheckboxItem","slug":"context-menu-checkbox-item","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-checkbox-item","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"","declarationFile":"overlays/context-menu/context-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuContent","slug":"context-menu-content","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"","declarationFile":"overlays/context-menu/context-menu.tsx","props":[{"name":"container","type":"HTMLElement | null","required":false,"default":null,"description":"Portal target. Defaults to `document.body`; pass an element to keep a scoped `data-style`.","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuItem","slug":"context-menu-item","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-item","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"","declarationFile":"overlays/context-menu/context-menu.tsx","props":[{"name":"tone","type":"\"danger\" | \"default\"","required":false,"default":"\"default\"","description":"Destructive action styling.","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuLabel","slug":"context-menu-label","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-label","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"","declarationFile":"overlays/context-menu/context-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuSeparator","slug":"context-menu-separator","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-separator","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"","declarationFile":"overlays/context-menu/context-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuShortcut","slug":"context-menu-shortcut","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-shortcut","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"Right-aligned hint such as \"Ctrl+D\"; purely visual.","declarationFile":"overlays/context-menu/context-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"ContextMenuTrigger","slug":"context-menu-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/context-menu-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/context-menu"],"summary":"The area that answers to right-click. Wrap a card, row or canvas.","declarationFile":"overlays/context-menu/context-menu.tsx","props":[{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"overlays/context-menu/context-menu.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-contextmenu--default","name":"Default"},{"id":"overlays-contextmenu--narrow","name":"Narrow"},{"id":"overlays-contextmenu--brutal-preset","name":"Brutal Preset"},{"id":"overlays-contextmenu--open-by-default","name":"Open By Default"}],"example":{"file":"overlays/context-menu/context-menu.stories.tsx","story":"Default"}},{"name":"Dialog","slug":"dialog","category":"overlays","subpath":"overlays","page":"/docs/components/dialog","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"Wraps `DialogPrimitive.Root` so focus is restored on close even when the\ndialog is opened in a controlled way, without its own `DialogTrigger`.","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogBody","slug":"dialog-body","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-body","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogClose","slug":"dialog-close","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-close","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogContent","slug":"dialog-content","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[{"name":"width","type":"\"md\" | \"lg\"","required":false,"default":"\"md\"","description":"","deprecated":false,"file":"overlays/dialog/dialog.tsx"},{"name":"blocking","type":"boolean","required":false,"default":"false","description":"While a mutation is in flight: `Escape`, outside click and the close button\nare disabled so half-saved state is not lost.","deprecated":false,"file":"overlays/dialog/dialog.tsx"},{"name":"closeLabel","type":"string","required":false,"default":"\"Close\"","description":"Accessible label of the close button.","deprecated":false,"file":"overlays/dialog/dialog.tsx"},{"name":"container","type":"HTMLElement | null","required":false,"default":null,"description":"Portal target. Defaults to `document.body`; pass an element to keep a scoped `data-style`.","deprecated":false,"file":"overlays/dialog/dialog.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogFooter","slug":"dialog-footer","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-footer","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogHeader","slug":"dialog-header","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-header","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogTitle","slug":"dialog-title","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-title","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"DialogTrigger","slug":"dialog-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/dialog-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dialog"],"summary":"","declarationFile":"overlays/dialog/dialog.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dialog--default","name":"Default"},{"id":"overlays-dialog--open-by-default","name":"Open By Default"},{"id":"overlays-dialog--large","name":"Large"},{"id":"overlays-dialog--blocking","name":"Blocking"},{"id":"overlays-dialog--controlled","name":"Controlled"},{"id":"overlays-dialog--in-scoped-container","name":"In Scoped Container"},{"id":"overlays-dialog--in-scoped-preset","name":"In Scoped Preset"}],"example":{"file":"overlays/dialog/dialog.stories.tsx","story":"Default"}},{"name":"Drawer","slug":"drawer","category":"overlays","subpath":"overlays","page":"/docs/components/drawer","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/drawer"],"summary":"Wraps `DialogPrimitive.Root` so focus is restored on close even when the\ndrawer is opened in a controlled way, without its own `DrawerTrigger`.","declarationFile":"overlays/drawer/drawer.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-drawer--default","name":"Default"},{"id":"overlays-drawer--open-by-default","name":"Open By Default"},{"id":"overlays-drawer--with-trigger-open","name":"With Trigger Open"},{"id":"overlays-drawer--blocking","name":"Blocking"},{"id":"overlays-drawer--controlled","name":"Controlled"}],"example":{"file":"overlays/drawer/drawer.stories.tsx","story":"Default"}},{"name":"DrawerClose","slug":"drawer-close","category":"overlays","subpath":"overlays","page":"/docs/components/drawer-close","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/drawer"],"summary":"","declarationFile":"overlays/drawer/drawer.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-drawer--default","name":"Default"},{"id":"overlays-drawer--open-by-default","name":"Open By Default"},{"id":"overlays-drawer--with-trigger-open","name":"With Trigger Open"},{"id":"overlays-drawer--blocking","name":"Blocking"},{"id":"overlays-drawer--controlled","name":"Controlled"}],"example":{"file":"overlays/drawer/drawer.stories.tsx","story":"Default"}},{"name":"DrawerContent","slug":"drawer-content","category":"overlays","subpath":"overlays","page":"/docs/components/drawer-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/drawer"],"summary":"Right-anchored side panel for secondary flows.","declarationFile":"overlays/drawer/drawer.tsx","props":[{"name":"blocking","type":"boolean","required":false,"default":"false","description":"Same semantics as `DialogContentProps.blocking`.","deprecated":false,"file":"overlays/drawer/drawer.tsx"},{"name":"closeLabel","type":"string","required":false,"default":"\"Close\"","description":"Accessible label of the close button.","deprecated":false,"file":"overlays/drawer/drawer.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-drawer--default","name":"Default"},{"id":"overlays-drawer--open-by-default","name":"Open By Default"},{"id":"overlays-drawer--with-trigger-open","name":"With Trigger Open"},{"id":"overlays-drawer--blocking","name":"Blocking"},{"id":"overlays-drawer--controlled","name":"Controlled"}],"example":{"file":"overlays/drawer/drawer.stories.tsx","story":"Default"}},{"name":"DrawerTitle","slug":"drawer-title","category":"overlays","subpath":"overlays","page":"/docs/components/drawer-title","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/drawer"],"summary":"","declarationFile":"overlays/drawer/drawer.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-drawer--default","name":"Default"},{"id":"overlays-drawer--open-by-default","name":"Open By Default"},{"id":"overlays-drawer--with-trigger-open","name":"With Trigger Open"},{"id":"overlays-drawer--blocking","name":"Blocking"},{"id":"overlays-drawer--controlled","name":"Controlled"}],"example":{"file":"overlays/drawer/drawer.stories.tsx","story":"Default"}},{"name":"DrawerTrigger","slug":"drawer-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/drawer-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/drawer"],"summary":"","declarationFile":"overlays/drawer/drawer.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-drawer--default","name":"Default"},{"id":"overlays-drawer--open-by-default","name":"Open By Default"},{"id":"overlays-drawer--with-trigger-open","name":"With Trigger Open"},{"id":"overlays-drawer--blocking","name":"Blocking"},{"id":"overlays-drawer--controlled","name":"Controlled"}],"example":{"file":"overlays/drawer/drawer.stories.tsx","story":"Default"}},{"name":"DropdownMenu","slug":"dropdown-menu","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuContent","slug":"dropdown-menu-content","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuItem","slug":"dropdown-menu-item","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-item","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuLabel","slug":"dropdown-menu-label","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-label","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuRadioGroup","slug":"dropdown-menu-radio-group","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-radio-group","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuRadioItem","slug":"dropdown-menu-radio-item","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-radio-item","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"Radix sets `role=\"menuitemradio\"` and `aria-checked`: use it for single-value filters.","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuSeparator","slug":"dropdown-menu-separator","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-separator","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"DropdownMenuTrigger","slug":"dropdown-menu-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/dropdown-menu-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/dropdown-menu"],"summary":"","declarationFile":"overlays/dropdown-menu/dropdown-menu.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-dropdownmenu--default","name":"Default"},{"id":"overlays-dropdownmenu--open-by-default","name":"Open By Default"},{"id":"overlays-dropdownmenu--radio-filter","name":"Radio Filter"}],"example":{"file":"overlays/dropdown-menu/dropdown-menu.stories.tsx","story":"Default"}},{"name":"HoverCard","slug":"hover-card","category":"overlays","subpath":"overlays","page":"/docs/components/hover-card","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/hover-card"],"summary":"Preview card shown on hover or keyboard focus of its trigger. Built on the popover\nprimitive for placement and collision handling; it never takes focus and closes on Escape.","declarationFile":"overlays/hover-card/hover-card.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"},{"name":"open","type":"boolean","required":false,"default":null,"description":"Controlled open state.","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"},{"name":"defaultOpen","type":"boolean","required":false,"default":"false","description":"","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"},{"name":"onOpenChange","type":"((open: boolean) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"},{"name":"openDelay","type":"number","required":false,"default":"300","description":"ms before opening on hover (focus opens at once).","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"},{"name":"closeDelay","type":"number","required":false,"default":"150","description":"ms before closing, so the pointer can travel into the card.","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"overlays-hovercard--default","name":"Default"},{"id":"overlays-hovercard--open-by-default","name":"Open By Default"},{"id":"overlays-hovercard--narrow","name":"Narrow"},{"id":"overlays-hovercard--brutal-preset","name":"Brutal Preset"}],"example":{"file":"overlays/hover-card/hover-card.stories.tsx","story":"Default"}},{"name":"HoverCardContent","slug":"hover-card-content","category":"overlays","subpath":"overlays","page":"/docs/components/hover-card-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/hover-card"],"summary":"","declarationFile":"overlays/hover-card/hover-card.tsx","props":[{"name":"container","type":"HTMLElement | null","required":false,"default":null,"description":"Portal target. Defaults to `document.body`; pass an element to keep a scoped `data-style`.","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-hovercard--default","name":"Default"},{"id":"overlays-hovercard--open-by-default","name":"Open By Default"},{"id":"overlays-hovercard--narrow","name":"Narrow"},{"id":"overlays-hovercard--brutal-preset","name":"Brutal Preset"}],"example":{"file":"overlays/hover-card/hover-card.stories.tsx","story":"Default"}},{"name":"HoverCardTrigger","slug":"hover-card-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/hover-card-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/hover-card"],"summary":"","declarationFile":"overlays/hover-card/hover-card.tsx","props":[{"name":"asChild","type":"boolean","required":false,"default":null,"description":"Use the child element as the trigger instead of wrapping it in a span.","deprecated":false,"file":"overlays/hover-card/hover-card.tsx"}],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-hovercard--default","name":"Default"},{"id":"overlays-hovercard--open-by-default","name":"Open By Default"},{"id":"overlays-hovercard--narrow","name":"Narrow"},{"id":"overlays-hovercard--brutal-preset","name":"Brutal Preset"}],"example":{"file":"overlays/hover-card/hover-card.stories.tsx","story":"Default"}},{"name":"Popover","slug":"popover","category":"overlays","subpath":"overlays","page":"/docs/components/popover","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/popover"],"summary":"","declarationFile":"overlays/popover/popover.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-popover--default","name":"Default"},{"id":"overlays-popover--open-by-default","name":"Open By Default"},{"id":"overlays-popover--top-end","name":"Top End"},{"id":"overlays-popover--anchored-to-element","name":"Anchored To Element"}],"example":{"file":"overlays/popover/popover.stories.tsx","story":"Default"}},{"name":"PopoverAnchor","slug":"popover-anchor","category":"overlays","subpath":"overlays","page":"/docs/components/popover-anchor","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/popover"],"summary":"","declarationFile":"overlays/popover/popover.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-popover--default","name":"Default"},{"id":"overlays-popover--open-by-default","name":"Open By Default"},{"id":"overlays-popover--top-end","name":"Top End"},{"id":"overlays-popover--anchored-to-element","name":"Anchored To Element"}],"example":{"file":"overlays/popover/popover.stories.tsx","story":"Default"}},{"name":"PopoverClose","slug":"popover-close","category":"overlays","subpath":"overlays","page":"/docs/components/popover-close","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/popover"],"summary":"","declarationFile":"overlays/popover/popover.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-popover--default","name":"Default"},{"id":"overlays-popover--open-by-default","name":"Open By Default"},{"id":"overlays-popover--top-end","name":"Top End"},{"id":"overlays-popover--anchored-to-element","name":"Anchored To Element"}],"example":{"file":"overlays/popover/popover.stories.tsx","story":"Default"}},{"name":"PopoverContent","slug":"popover-content","category":"overlays","subpath":"overlays","page":"/docs/components/popover-content","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/popover"],"summary":"Positioned contextual panel; viewport collision is handled by Radix (Floating UI).","declarationFile":"overlays/popover/popover.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-popover--default","name":"Default"},{"id":"overlays-popover--open-by-default","name":"Open By Default"},{"id":"overlays-popover--top-end","name":"Top End"},{"id":"overlays-popover--anchored-to-element","name":"Anchored To Element"}],"example":{"file":"overlays/popover/popover.stories.tsx","story":"Default"}},{"name":"PopoverTrigger","slug":"popover-trigger","category":"overlays","subpath":"overlays","page":"/docs/components/popover-trigger","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/popover"],"summary":"","declarationFile":"overlays/popover/popover.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-popover--default","name":"Default"},{"id":"overlays-popover--open-by-default","name":"Open By Default"},{"id":"overlays-popover--top-end","name":"Top End"},{"id":"overlays-popover--anchored-to-element","name":"Anchored To Element"}],"example":{"file":"overlays/popover/popover.stories.tsx","story":"Default"}},{"name":"PreviousFocusProvider","slug":"previous-focus-provider","category":"overlays","subpath":"overlays","page":"/docs/components/previous-focus-provider","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/focus-return"],"summary":"","declarationFile":"overlays/focus-return/focus-return.tsx","props":[{"name":"focusRef","type":"FocusRef","required":true,"default":null,"description":"","deprecated":false,"file":"overlays/focus-return/focus-return.tsx"},{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"overlays/focus-return/focus-return.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"overlays-focusreturn--default","name":"Default"},{"id":"overlays-focusreturn--open-by-default","name":"Open By Default"},{"id":"overlays-focusreturn--with-provider","name":"With Provider"}],"example":{"file":"overlays/focus-return/focus-return.stories.tsx","story":"Default"}},{"name":"Toaster","slug":"toaster","category":"overlays","subpath":"overlays","page":"/docs/components/toaster","importPath":"@jcsoftdev/ui/overlays","singleEntries":["@jcsoftdev/ui/overlays/toaster"],"summary":"Ephemeral, non-critical confirmations. Pass `action: { label, onClick }` to\n`toast()` for an undo button. Critical messages belong in a banner instead.","declarationFile":"overlays/toaster/toaster.tsx","props":[],"inheritsNativeProps":true,"a11y":[],"stories":[{"id":"overlays-toaster--default","name":"Default"},{"id":"overlays-toaster--with-undo-action","name":"With Undo Action"},{"id":"overlays-toaster--open-by-default","name":"Open By Default"},{"id":"overlays-toaster--top-right-stack","name":"Top Right Stack"}],"example":{"file":"overlays/toaster/toaster.stories.tsx","story":"Default"}},{"name":"CommandPalette","slug":"command-palette","category":"palette","subpath":"palette","page":"/docs/components/command-palette","importPath":"@jcsoftdev/ui/palette","singleEntries":["@jcsoftdev/ui/palette/command-palette"],"summary":"Global search/command palette built on `cmdk`, shown in a modal dialog.","declarationFile":"palette/command-palette/command-palette.tsx","props":[{"name":"open","type":"boolean","required":true,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"onClose","type":"() => void","required":true,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"items","type":"CommandPaletteItem[]","required":true,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"label","type":"string","required":true,"default":null,"description":"Accessible name of the dialog.","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"placeholder","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"emptyLabel","type":"string","required":true,"default":null,"description":"Text shown when nothing matches.","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"formatResultCount","type":"(count: number) => string","required":true,"default":null,"description":"Screen-reader announcement of the result count, e.g. `(n) => \\`${n} results\\``.","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"closeKeyLabel","type":"string","required":false,"default":"\"Esc\"","description":"Hint for the close key shown next to the input.","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"query","type":"string","required":false,"default":null,"description":"Controlled query, so the parent can react to typing (e.g. debounced remote search).","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"onQueryChange","type":"((query: string) => void)","required":false,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"palette/command-palette/command-palette.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"palette-commandpalette--default","name":"Default"},{"id":"palette-commandpalette--empty","name":"Empty"},{"id":"palette-commandpalette--custom-close-key","name":"Custom Close Key"},{"id":"palette-commandpalette--controlled-query","name":"Controlled Query"}],"example":{"file":"palette/command-palette/command-palette.stories.tsx","story":"Default"}},{"name":"RichTextEditor","slug":"rich-text-editor","category":"rich-text","subpath":"rich-text","page":"/docs/components/rich-text-editor","importPath":"@jcsoftdev/ui/rich-text","singleEntries":[],"summary":"Rich text editor on a plain `contenteditable`, with no dependencies. Supports bold, italic,\nunderline, a title, bullet and numbered lists and links (Ctrl/Cmd+B, I, U, K). Everything that\nleaves the editor, including pasted content, goes through `sanitizeHtml`.\n\nIt uses `document.execCommand`: deprecated on paper but still the only dependency-free way to\nedit rich text natively, and implemented by every engine.","declarationFile":"rich-text/rich-text-editor.tsx","props":[{"name":"value","type":"string","required":false,"default":null,"description":"Controlled HTML. It is sanitized before it reaches the editor.","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"defaultValue","type":"string","required":false,"default":"\"\"","description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"onChange","type":"((html: string) => void)","required":false,"default":null,"description":"Receives sanitized HTML, or \"\" when the editor is empty.","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"placeholder","type":"string","required":false,"default":"\"Escribe aquí…\"","description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"disabled","type":"boolean","required":false,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"minHeightRem","type":"number","required":false,"default":"8","description":"Minimum height of the editing area, in rem.","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"aria-label","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"aria-labelledby","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-richtexteditor--default","name":"Default"},{"id":"forms-richtexteditor--empty","name":"Empty"},{"id":"forms-richtexteditor--disabled","name":"Disabled"},{"id":"forms-richtexteditor--with-preview","name":"With Preview"},{"id":"forms-richtexteditor--hostile-input","name":"Hostile Input"},{"id":"forms-richtexteditor--narrow","name":"Narrow"},{"id":"forms-richtexteditor--brutal-preset","name":"Brutal Preset"}],"example":{"file":"rich-text/rich-text-editor.stories.tsx","story":"Default"}},{"name":"RichTextView","slug":"rich-text-view","category":"rich-text","subpath":"rich-text","page":"/docs/components/rich-text-view","importPath":"@jcsoftdev/ui/rich-text","singleEntries":[],"summary":"Read-only rendering of editor output; sanitizes again so stored HTML is never trusted.","declarationFile":"rich-text/rich-text-editor.tsx","props":[{"name":"html","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"rich-text/rich-text-editor.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"forms-richtexteditor--default","name":"Default"},{"id":"forms-richtexteditor--empty","name":"Empty"},{"id":"forms-richtexteditor--disabled","name":"Disabled"},{"id":"forms-richtexteditor--with-preview","name":"With Preview"},{"id":"forms-richtexteditor--hostile-input","name":"Hostile Input"},{"id":"forms-richtexteditor--narrow","name":"Narrow"},{"id":"forms-richtexteditor--brutal-preset","name":"Brutal Preset"}],"example":{"file":"rich-text/rich-text-editor.stories.tsx","story":"Default"}},{"name":"AppShell","slug":"app-shell","category":"shell","subpath":"shell","page":"/docs/components/app-shell","importPath":"@jcsoftdev/ui/shell","singleEntries":["@jcsoftdev/ui/shell/app-shell"],"summary":"Root of the app frame (sidebar + topbar + page). It is the `app` container: the sidebar turns\ninto a drawer and the topbar shows its menu button when the SHELL is under 900 px wide,\nwhatever the viewport is, so the same shell works in a full page, a preview or a story.","declarationFile":"shell/app-shell/app-shell.tsx","props":[{"name":"children","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"shell/app-shell/app-shell.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"shell/app-shell/app-shell.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"shell-appshell--default","name":"Default"},{"id":"shell-appshell--compact","name":"Compact"}],"example":{"file":"shell/app-shell/app-shell.stories.tsx","story":"Default"}},{"name":"Sidebar","slug":"sidebar","category":"shell","subpath":"shell","page":"/docs/components/sidebar","importPath":"@jcsoftdev/ui/shell","singleEntries":["@jcsoftdev/ui/shell/sidebar"],"summary":"Main navigation. Always visible when its app container is wide; an off-canvas drawer under\n900 px of container width, `inert` while closed so it is not reachable by keyboard.\nRender it inside `AppShell`: the container decides, never the viewport. Without an `AppShell`\nit measures its parent element instead.","declarationFile":"shell/sidebar/sidebar.tsx","props":[{"name":"groups","type":"SidebarGroup[]","required":true,"default":null,"description":"","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"ariaLabel","type":"string","required":true,"default":null,"description":"Accessible name of the sidebar landmark.","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"header","type":"ReactNode","required":false,"default":null,"description":"Brand block shown at the top.","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"footer","type":"ReactNode","required":false,"default":null,"description":"Block pinned to the bottom (e.g. the current user).","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"renderLink","type":"SidebarRenderLink","required":false,"default":"defaultRenderLink","description":"Link renderer; defaults to a plain anchor.","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"open","type":"boolean","required":false,"default":"false","description":"Drawer state when the app container is under 900 px. Ignored above it, where the sidebar is always visible.","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"onClose","type":"(() => void)","required":false,"default":null,"description":"","deprecated":false,"file":"shell/sidebar/sidebar.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"shell/sidebar/sidebar.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"shell-sidebar--default","name":"Default"},{"id":"shell-sidebar--without-header-and-footer","name":"Without Header And Footer"},{"id":"shell-sidebar--custom-link","name":"Custom Link"},{"id":"shell-sidebar--mobile-drawer","name":"Mobile Drawer"}],"example":{"file":"shell/sidebar/sidebar.stories.tsx","story":"Default"}},{"name":"Topbar","slug":"topbar","category":"shell","subpath":"shell","page":"/docs/components/topbar","importPath":"@jcsoftdev/ui/shell","singleEntries":["@jcsoftdev/ui/shell/topbar"],"summary":"","declarationFile":"shell/topbar/topbar.tsx","props":[{"name":"breadcrumbs","type":"string[]","required":true,"default":null,"description":"Breadcrumb trail in order; the last entry is the current view.","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"breadcrumbsLabel","type":"string","required":true,"default":null,"description":"Accessible name of the breadcrumb landmark.","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"onOpenMenu","type":"(() => void)","required":false,"default":null,"description":"Menu button (shown when the `AppShell` container is under 900 px, matching the Sidebar drawer) that opens the sidebar drawer. Needs an `@container/app` ancestor, which `AppShell` provides. Omitted when not set.","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"menuLabel","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"menuButtonRef","type":"Ref<HTMLButtonElement>","required":false,"default":null,"description":"Ref to the menu button so the opener can restore focus when the drawer closes.","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"onSearch","type":"() => void","required":true,"default":null,"description":"Called by the search trigger and by Cmd/Ctrl+K.","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"searchLabel","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"searchPlaceholder","type":"string","required":true,"default":null,"description":"","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"actions","type":"ReactNode","required":false,"default":null,"description":"Slot between the search trigger and the end block (status, notifications, primary action).","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"end","type":"ReactNode","required":false,"default":null,"description":"Slot at the far end (e.g. the account menu).","deprecated":false,"file":"shell/topbar/topbar.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"shell/topbar/topbar.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"shell-topbar--default","name":"Default"},{"id":"shell-topbar--single-crumb","name":"Single Crumb"},{"id":"shell-topbar--with-actions-and-end","name":"With Actions And End"},{"id":"shell-topbar--mobile-without-menu","name":"Mobile Without Menu"},{"id":"shell-topbar--panel-layout","name":"Panel Layout"},{"id":"shell-topbar--narrow","name":"Narrow"}],"example":{"file":"shell/topbar/topbar.stories.tsx","story":"Default"}},{"name":"EmptyState","slug":"empty-state","category":"states","subpath":"states","page":"/docs/components/empty-state","importPath":"@jcsoftdev/ui/states","singleEntries":["@jcsoftdev/ui/states/empty-state"],"summary":"","declarationFile":"states/empty-state/empty-state.tsx","props":[{"name":"icon","type":"ReactNode","required":false,"default":null,"description":"Decorative icon; hidden from screen readers.","deprecated":false,"file":"states/empty-state/empty-state.tsx"},{"name":"title","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"states/empty-state/empty-state.tsx"},{"name":"description","type":"ReactNode","required":false,"default":null,"description":"","deprecated":false,"file":"states/empty-state/empty-state.tsx"},{"name":"action","type":"ReactNode","required":false,"default":null,"description":"Primary call to action.","deprecated":false,"file":"states/empty-state/empty-state.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"states/empty-state/empty-state.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"states-emptystate--default","name":"Default"},{"id":"states-emptystate--title-only","name":"Title Only"},{"id":"states-emptystate--inventory","name":"Inventory"},{"id":"states-emptystate--narrow","name":"Narrow"}],"example":{"file":"states/empty-state/empty-state.stories.tsx","story":"Default"}},{"name":"ErrorState","slug":"error-state","category":"states","subpath":"states","page":"/docs/components/error-state","importPath":"@jcsoftdev/ui/states","singleEntries":["@jcsoftdev/ui/states/error-state"],"summary":"","declarationFile":"states/error-state/error-state.tsx","props":[{"name":"message","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"states/error-state/error-state.tsx"},{"name":"correlationId","type":"ReactNode","required":false,"default":null,"description":"Correlation code for support; never a raw exception.","deprecated":false,"file":"states/error-state/error-state.tsx"},{"name":"correlationLabel","type":"string","required":false,"default":"\"ID:\"","description":"Prefix shown before the correlation id.","deprecated":false,"file":"states/error-state/error-state.tsx"},{"name":"onRetry","type":"(() => void)","required":false,"default":null,"description":"","deprecated":false,"file":"states/error-state/error-state.tsx"},{"name":"retryLabel","type":"string","required":false,"default":"\"Retry\"","description":"","deprecated":false,"file":"states/error-state/error-state.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"states/error-state/error-state.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"states-errorstate--default","name":"Default"},{"id":"states-errorstate--without-retry","name":"Without Retry"},{"id":"states-errorstate--without-correlation","name":"Without Correlation"},{"id":"states-errorstate--narrow","name":"Narrow"}],"example":{"file":"states/error-state/error-state.stories.tsx","story":"Default"}},{"name":"ForbiddenState","slug":"forbidden-state","category":"states","subpath":"states","page":"/docs/components/forbidden-state","importPath":"@jcsoftdev/ui/states","singleEntries":["@jcsoftdev/ui/states/forbidden-state"],"summary":"","declarationFile":"states/forbidden-state/forbidden-state.tsx","props":[{"name":"title","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"states/forbidden-state/forbidden-state.tsx"},{"name":"reason","type":"ReactNode","required":false,"default":null,"description":"Reason for the block, e.g. depending on role; never just \"Forbidden\".","deprecated":false,"file":"states/forbidden-state/forbidden-state.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"states/forbidden-state/forbidden-state.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"states-forbiddenstate--default","name":"Default"},{"id":"states-forbiddenstate--title-only","name":"Title Only"}],"example":{"file":"states/forbidden-state/forbidden-state.stories.tsx","story":"Default"}},{"name":"OfflineBanner","slug":"offline-banner","category":"states","subpath":"states","page":"/docs/components/offline-banner","importPath":"@jcsoftdev/ui/states","singleEntries":["@jcsoftdev/ui/states/offline-banner"],"summary":"","declarationFile":"states/offline-banner/offline-banner.tsx","props":[{"name":"queuedChanges","type":"number","required":false,"default":"0","description":"Number of changes queued while waiting to reconnect.","deprecated":false,"file":"states/offline-banner/offline-banner.tsx"},{"name":"queuedLabel","type":"string","required":false,"default":null,"description":"Screen reader text for the queue counter.","deprecated":false,"file":"states/offline-banner/offline-banner.tsx"},{"name":"message","type":"ReactNode","required":true,"default":null,"description":"","deprecated":false,"file":"states/offline-banner/offline-banner.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"states/offline-banner/offline-banner.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"states-offlinebanner--default","name":"Default"},{"id":"states-offlinebanner--with-queued-changes","name":"With Queued Changes"}],"example":{"file":"states/offline-banner/offline-banner.stories.tsx","story":"Default"}},{"name":"Skeleton","slug":"skeleton","category":"states","subpath":"states","page":"/docs/components/skeleton","importPath":"@jcsoftdev/ui/states","singleEntries":["@jcsoftdev/ui/states/skeleton"],"summary":"","declarationFile":"states/skeleton/skeleton.tsx","props":[{"name":"variant","type":"\"table\" | \"lines\" | \"card\"","required":false,"default":"\"lines\"","description":"","deprecated":false,"file":"states/skeleton/skeleton.tsx"},{"name":"lines","type":"number","required":false,"default":"3","description":"Number of lines for the `lines` variant.","deprecated":false,"file":"states/skeleton/skeleton.tsx"},{"name":"rows","type":"number","required":false,"default":"4","description":"Number of rows for the `table` variant.","deprecated":false,"file":"states/skeleton/skeleton.tsx"},{"name":"label","type":"string","required":false,"default":"\"Loading\"","description":"Text announced to screen readers while loading.","deprecated":false,"file":"states/skeleton/skeleton.tsx"},{"name":"className","type":"string","required":false,"default":null,"description":"","deprecated":false,"file":"states/skeleton/skeleton.tsx"}],"inheritsNativeProps":false,"a11y":[],"stories":[{"id":"states-skeleton--default","name":"Default"},{"id":"states-skeleton--lines","name":"Lines"},{"id":"states-skeleton--table","name":"Table"},{"id":"states-skeleton--card","name":"Card"}],"example":{"file":"states/skeleton/skeleton.stories.tsx","story":"Default"}}],"others":[{"name":"DATE_GROUP_LABELS","slug":"date_group_labels","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/chat-list/group.ts","summary":"","tags":{},"kind":"constant","signature":"Record<DateGroupId, string>"},{"name":"distanceFromBottom","slug":"distance-from-bottom","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/conversation/stick.ts","summary":"Distance in px (never negative) between the viewport bottom and the content bottom.","tags":{},"kind":"function","signature":"(m: ScrollMetrics) => number"},{"name":"groupByDate","slug":"group-by-date","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/chat-list/group.ts","summary":"Newest first inside each group; empty groups are dropped; groups keep recency order.","tags":{},"kind":"function","signature":"<T extends Dated>(items: readonly T[], now: Date | string | number) => { id: DateGroupId; label: string; items: T[]; }[]"},{"name":"groupOf","slug":"group-of","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/chat-list/group.ts","summary":"","tags":{},"kind":"function","signature":"(date: Date | string | number, now: Date | string | number) => DateGroupId"},{"name":"isNearBottom","slug":"is-near-bottom","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/conversation/stick.ts","summary":"","tags":{},"kind":"function","signature":"(m: ScrollMetrics, threshold?: number) => boolean"},{"name":"nextStuck","slug":"next-stuck","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/conversation/stick.ts","summary":"Next \"stuck to bottom\" state after a scroll event. Reaching the bottom sticks; scrolling up\nunsticks; a scroll event with no upward movement (content grew under a stuck viewport) keeps\nthe previous state so streaming text never drops the lock by itself.","tags":{},"kind":"function","signature":"(prevStuck: boolean, metrics: ScrollMetrics, prevScrollTop: number, threshold?: number) => boolean"},{"name":"parseMarkdown","slug":"parse-markdown","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/markdown/parse.ts","summary":"Parses Markdown into blocks. An unclosed code fence runs to the end (streaming friendly).","tags":{},"kind":"function","signature":"(src: string) => Block[]"},{"name":"resolveLanguage","slug":"resolve-language","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/code-block/highlight.ts","summary":"Maps a fence label (`typescript`, `sh`…) to a supported language, or null.","tags":{},"kind":"function","signature":"(label: string | undefined) => Language | null"},{"name":"safeHref","slug":"safe-href","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/markdown/parse.ts","summary":"Returns the normalized URL when its protocol is http, https or mailto; otherwise null.","tags":{},"kind":"function","signature":"(raw: string) => string | null"},{"name":"shouldSubmit","slug":"should-submit","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/prompt-input/keys.ts","summary":"Enter submits; Shift+Enter inserts a newline; IME composition never submits.","tags":{},"kind":"function","signature":"(event: SubmitKeyEvent) => boolean"},{"name":"showJumpToLatest","slug":"show-jump-to-latest","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/conversation/stick.ts","summary":"The \"jump to latest\" button shows only when the user left the bottom.","tags":{},"kind":"function","signature":"(stuck: boolean, metrics: ScrollMetrics) => boolean"},{"name":"STICK_THRESHOLD","slug":"stick_threshold","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/conversation/stick.ts","summary":"Distance in px from the bottom that still counts as \"at the bottom\".","tags":{},"kind":"constant","signature":"48"},{"name":"tokenize","slug":"tokenize","category":"ai","subpath":"ai","importPath":"@jcsoftdev/ui/ai","declarationFile":"ai/code-block/highlight.ts","summary":"","tags":{},"kind":"function","signature":"(code: string, language: string | undefined) => Token[]"},{"name":"DEFAULT_LOCALE","slug":"default_locale","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/number-value/format.ts","summary":"","tags":{},"kind":"constant","signature":"\"es-PE\""},{"name":"easeOutCubic","slug":"ease-out-cubic","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/number-value/format.ts","summary":"","tags":{},"kind":"function","signature":"(t: number) => number"},{"name":"formatNumber","slug":"format-number","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/number-value/format.ts","summary":"Locale-aware number formatting (currency, percent, compact, units via Intl options).","tags":{},"kind":"function","signature":"(value: number, config?: NumberFormatConfig) => string"},{"name":"formatTrend","slug":"format-trend","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/trend-chip/trend.ts","summary":"Signed percent text from a percentage value: 12.5 -> \"+12.5%\" (es-PE).","tags":{},"kind":"function","signature":"(value: number, locale?: string, maximumFractionDigits?: number) => string"},{"name":"icons","slug":"icons","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/icon/icon-map.ts","summary":"Optional name registry for `<Icon name>`. Pass any lucide component via `icon` to bypass it.","tags":{},"kind":"constant","signature":"{ grid: LucideIcon; calendar: LucideIcon; folder: LucideIcon; users: LucideIcon; pen: LucideIcon; file: LucideIcon; coin: LucideIcon; shield: LucideIcon; calcul"},{"name":"trendDirection","slug":"trend-direction","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/trend-chip/trend.ts","summary":"Direction of a change; values within `epsilon` of zero are flat.","tags":{},"kind":"function","signature":"(value: number, epsilon?: number) => TrendDirection"},{"name":"trendTone","slug":"trend-tone","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/trend-chip/trend.ts","summary":"Good/bad reading of a direction. `invert` is for metrics where lower is better (cancelaciones).","tags":{},"kind":"function","signature":"(direction: TrendDirection, invert?: boolean) => TrendTone"},{"name":"tweenValue","slug":"tween-value","category":"atoms","subpath":"atoms","importPath":"@jcsoftdev/ui/atoms","declarationFile":"atoms/number-value/format.ts","summary":"Value between `from` and `to` at linear `progress` (0..1), eased.","tags":{},"kind":"function","signature":"(from: number, to: number, progress: number, ease?: (t: number) => number) => number"},{"name":"BRAND_PALETTES","slug":"brand_palettes","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/palettes.ts","summary":"The first seven mirror the library accent palettes (fill, second tone and deep ink);\nthe rest are classic barbershop colorways. Marks keep their own colors, they never\nfollow the surrounding `data-accent`.","tags":{},"kind":"constant","signature":"readonly BrandPalette[]"},{"name":"contentColor","slug":"content-color","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/palettes.ts","summary":"The palette ink over pale fills, white over dark ones.","tags":{},"kind":"function","signature":"(fills: string[], ink: string) => string"},{"name":"copyText","slug":"copy-text","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/export.ts","summary":"","tags":{},"kind":"function","signature":"(text: string) => Promise<void>"},{"name":"createRng","slug":"create-rng","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/rng.ts","summary":"Small deterministic PRNG (mulberry32): the same seed always yields the same sequence.","tags":{},"kind":"function","signature":"(seed: number) => () => number"},{"name":"DEFAULT_FORGE_VALUE","slug":"default_forge_value","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/logo-forge.tsx","summary":"","tags":{},"kind":"constant","signature":"LogoForgeValue"},{"name":"downloadBlob","slug":"download-blob","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/export.ts","summary":"","tags":{},"kind":"function","signature":"(blob: Blob, filename: string) => void"},{"name":"escapeXml","slug":"escape-xml","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"function","signature":"(value: string) => string"},{"name":"fileSlug","slug":"file-slug","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/export.ts","summary":"Browser-only helpers behind the Logo Forge export buttons.","tags":{},"kind":"function","signature":"(name: string) => string"},{"name":"findGlyph","slug":"find-glyph","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/glyphs.ts","summary":"","tags":{},"kind":"function","signature":"(id: GlyphId) => Glyph"},{"name":"findPalette","slug":"find-palette","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/palettes.ts","summary":"","tags":{},"kind":"function","signature":"(id: string) => BrandPalette"},{"name":"FONT_STACK","slug":"font_stack","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"constant","signature":"\"ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif\""},{"name":"forgeOptions","slug":"forge-options","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/logo-forge.tsx","summary":"Turns the editor state into generator options.","tags":{},"kind":"function","signature":"(value: LogoForgeValue) => MarkOptions"},{"name":"generateMark","slug":"generate-mark","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"function","signature":"(options: MarkOptions) => MarkDescription"},{"name":"generateVariations","slug":"generate-variations","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"A deterministic page of `count` variations around `base`: the name, tagline, layout and\nwordmark stay, while shape, monogram, palette, fill and seed change. `page` shuffles to the\nnext set.","tags":{},"kind":"function","signature":"(base: MarkOptions, count?: number, page?: number) => MarkOptions[]"},{"name":"getInitials","slug":"get-initials","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/initials.ts","summary":"Initials of a business name: first letter of each significant word, accents removed\n(the Ñ is kept), articles and prepositions skipped. When the name has fewer words than\n`count`, the first word lends its next letters (\"Don Lucho\" with 3 gives \"DLO\").","tags":{},"kind":"function","signature":"(name: string, count?: number) => string"},{"name":"GLYPH_IDS","slug":"glyph_ids","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/glyphs.ts","summary":"","tags":{},"kind":"constant","signature":"readonly GlyphId[]"},{"name":"GLYPHS","slug":"glyphs","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/glyphs.ts","summary":"Our own simple geometric paths; no third-party icon data.","tags":{},"kind":"constant","signature":"readonly Glyph[]"},{"name":"hashString","slug":"hash-string","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/rng.ts","summary":"FNV-1a over UTF-16 code units; stable across runtimes.","tags":{},"kind":"function","signature":"(input: string) => number"},{"name":"luminance","slug":"luminance","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/palettes.ts","summary":"WCAG relative luminance of a hex color; other formats read as mid-dark.","tags":{},"kind":"function","signature":"(color: string) => number"},{"name":"MARK_FILLS","slug":"mark_fills","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"constant","signature":"readonly [\"solid\", \"gradient\", \"outline\"]"},{"name":"MARK_LAYOUTS","slug":"mark_layouts","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"constant","signature":"readonly [\"icon\", \"horizontal\", \"stacked\"]"},{"name":"MARK_SHAPES","slug":"mark_shapes","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"","tags":{},"kind":"constant","signature":"readonly [\"circle\", \"squircle\", \"shield\", \"hexagon\", \"badge\", \"ribbon\", \"none\"]"},{"name":"pick","slug":"pick","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/rng.ts","summary":"","tags":{},"kind":"function","signature":"<T>(rng: () => number, items: readonly T[]) => T"},{"name":"safeColor","slug":"safe-color","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/palettes.ts","summary":"Accepts hex, rgb()/hsl() and plain color names only; anything else falls back.","tags":{},"kind":"function","signature":"(value: string | undefined, fallback: string) => string"},{"name":"serializeMark","slug":"serialize-mark","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/generate.ts","summary":"Standalone SVG document string. Every text and attribute value is XML-escaped.","tags":{},"kind":"function","signature":"(mark: MarkDescription) => string"},{"name":"svgBlob","slug":"svg-blob","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/export.ts","summary":"","tags":{},"kind":"function","signature":"(svg: string) => Blob"},{"name":"svgToPngBlob","slug":"svg-to-png-blob","category":"brand","subpath":"brand","importPath":"@jcsoftdev/ui/brand","declarationFile":"brand/export.ts","summary":"Rasterizes an SVG string through a canvas. `scale` multiplies the intrinsic size.","tags":{},"kind":"function","signature":"(svg: string, width: number, height: number, scale?: number) => Promise<Blob>"},{"name":"activeFilterCount","slug":"active-filter-count","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"","tags":{},"kind":"function","signature":"(filters: CrossfilterFilters) => number"},{"name":"addUnits","slug":"add-units","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"`time` moved by `count` calendar units (daylight saving safe for days and above).","tags":{},"kind":"function","signature":"(time: number, unit: CalendarUnit, count: number) => number"},{"name":"allDates","slug":"all-dates","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/category-axis.ts","summary":"True when every category is a Date, so a time scale makes sense.","tags":{},"kind":"function","signature":"(categories: readonly XValue[]) => boolean"},{"name":"alluvialGraph","slug":"alluvial-graph","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Turns stage-by-stage category flows into sankey nodes and links: one node per\ncategory per stage (pinned to its column), the same color across stages, in\ncategory order. Categories with no flow at a stage are left out. Draw with\n`relax: false` and `align: \"left\"` to keep the order.","tags":{},"kind":"function","signature":"(input: AlluvialInput) => { nodes: SankeyNodeInput[]; links: SankeyLinkInput[]; }"},{"name":"alluvialNodeId","slug":"alluvial-node-id","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Node id of a category at a stage: `\"2:vip\"`.","tags":{},"kind":"function","signature":"(stage: number, category: string) => string"},{"name":"ancestorIds","slug":"ancestor-ids","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Ids of the ancestors of `node`, root first (the node itself excluded).","tags":{},"kind":"function","signature":"(node: TreeChartNode) => string[]"},{"name":"ancestors","slug":"ancestors","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Root first, `node` last.","tags":{},"kind":"function","signature":"(node: HierarchyNode) => HierarchyNode[]"},{"name":"angleOf","slug":"angle-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Angle of the vector (cx, cy) -> (x, y), in [0, TAU).","tags":{},"kind":"function","signature":"(cx: number, cy: number, x: number, y: number) => number"},{"name":"appendBars","slug":"append-bars","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-stats.ts","summary":"Adds live bars to a series: a bar with the same date as the last one\nreplaces it (the candle still forming), a newer bar is appended, an older\none is ignored. `maxBars` drops the oldest bars so a long stream stays bounded.","tags":{},"kind":"function","signature":"(data: readonly StockBar[], incoming: StockBar | readonly StockBar[], maxBars?: number) => StockBar[]"},{"name":"applyMatrix","slug":"apply-matrix","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"","tags":{},"kind":"function","signature":"(matrix: Matrix, v: Vec3) => Vec3"},{"name":"arcLine","slug":"arc-line","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Open centre-line arc, meant to be stroked (`strokeLinecap=\"round\"` gives\nthe rounded ends). Used by progress rings, tracks and gauge bands.","tags":{},"kind":"function","signature":"(cx: number, cy: number, radius: number, startAngle: number, endAngle: number) => string"},{"name":"arcPath","slug":"arc-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Closed path of an annular sector (a pie wedge when `innerRadius` is 0),\nwith optional rounded corners. The corners are circles tangent to both the\narc and the radial edge, so rounding never changes the gap between slices.","tags":{},"kind":"function","signature":"(spec: ArcSpec) => string"},{"name":"areaPath","slug":"area-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Closed area between a top and a bottom edge sampled at the same x positions\n(`bottom[i]` pairs with `top[i]`). A `null` in `top` breaks the area.","tags":{},"kind":"function","signature":"(top: ReadonlyArray<Point | null>, bottom: ReadonlyArray<Point>, curve?: Curve) => string"},{"name":"aspectRatio","slug":"aspect-ratio","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Width / height ratio, always >= 1. Infinite for degenerate rectangles.","tags":{},"kind":"function","signature":"(rect: Rect) => number"},{"name":"assignLanes","slug":"assign-lanes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/timeline-chart/timeline-lanes.ts","summary":"Packs overlapping intervals into the fewest lanes: items are placed in\nstart order into the first lane that is already free. Intervals that only\ntouch (one ends when the next starts) share a lane.","tags":{},"kind":"function","signature":"(items: ReadonlyArray<Interval>) => LaneAssignment"},{"name":"assignUnits","slug":"assign-units","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Category of each position when `counts` are laid one after the other.","tags":{},"kind":"function","signature":"(counts: readonly number[]) => number[]"},{"name":"averageTrueRange","slug":"average-true-range","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-transforms.ts","summary":"Average true range over the last `period` bars (simple mean of the true ranges).","tags":{},"kind":"function","signature":"(data: readonly StockBar[], period?: number) => number"},{"name":"bandScale","slug":"band-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/band.ts","summary":"","tags":{},"kind":"function","signature":"({ count, range, paddingInner, paddingOuter, }: BandScaleOptions) => BandScale"},{"name":"BARBER_SILHOUETTES","slug":"barber_silhouettes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-icons.ts","summary":"Barbershop silhouettes drawn for this library.","tags":{},"kind":"constant","signature":"readonly [\"scissors\", \"comb\", \"mustache\", \"pole\", \"chair\", \"bottle\"]"},{"name":"barPath","slug":"bar-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Bar rounded only at its value end, the way the eye reads the bar's length.","tags":{},"kind":"function","signature":"(x: number, y: number, width: number, height: number, radius: number, end: BarEnd) => string"},{"name":"beeswarm","slug":"beeswarm","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Beeswarm layout: offsets perpendicular to the value axis so that no two\ncircles overlap. Circles are placed in value order; each one takes the free\noffset closest to the axis, tested against the circles already placed that\nare close enough along the axis to touch it. Returns one offset per item,\nin the input order.","tags":{},"kind":"function","signature":"(items: readonly SwarmItem[], options?: SwarmOptions) => number[]"},{"name":"binCounts","slug":"bin-counts","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Counts `values` into the bins delimited by ascending `edges`.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, edges: readonly number[]) => Bin[]"},{"name":"binEdges","slug":"bin-edges","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Bin edges for `values`: a width and a start aligned to it.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, options?: BinOptions) => number[]"},{"name":"binIndex","slug":"bin-index","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Index of the bin of `value`: bins are `[edge i, edge i+1)`, the last one includes its upper edge. -1 outside.","tags":{},"kind":"function","signature":"(edges: readonly number[], value: number) => number"},{"name":"binRecords","slug":"bin-records","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Count per bin of a numeric dimension, over the records that pass every OTHER filter.","tags":{},"kind":"function","signature":"<T>(records: readonly T[], accessors: Accessors<T>, filters: CrossfilterFilters, dimension: string, edges: readonly number[]) => number[]"},{"name":"binsInRange","slug":"bins-in-range","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Indices of the bins a range filter covers (a bin is covered when it overlaps the range).","tags":{},"kind":"function","signature":"(edges: readonly number[], min: number, max: number) => [number, number] | null"},{"name":"blendRings","slug":"blend-rings","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"RingPoint-wise blend of two rings of equal length: `t` 0 gives `from`, 1 gives `to`.","tags":{},"kind":"function","signature":"(from: readonly RingPoint[], to: readonly RingPoint[], t: number) => RingPoint[]"},{"name":"bollinger","slug":"bollinger","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Simple average ± `k` population standard deviations of the same window.","tags":{},"kind":"function","signature":"(values: IndicatorInput, period?: number, k?: number) => BollingerBands"},{"name":"boxStats","slug":"box-stats","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Five-number summary plus mean and Tukey outliers. `whisker` is the fence\nmultiplier `k` (1.5 by default); `Infinity` makes the whiskers reach min and max.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, whisker?: number) => BoxStats | null"},{"name":"boxTooltipRows","slug":"box-tooltip-rows","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/marks.tsx","summary":"Tooltip rows for a five-number summary.","tags":{},"kind":"function","signature":"(stats: BoxStats, labels: DistributionLabels, format: ValueFormatter, color: string, showMean?: boolean) => TooltipRow[]"},{"name":"boxValueText","slug":"box-value-text","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/marks.tsx","summary":"One-line summary of a box for `aria-valuetext`.","tags":{},"kind":"function","signature":"(name: string, stats: BoxStats, labels: DistributionLabels, format: ValueFormatter) => string"},{"name":"branchColor","slug":"branch-color","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Base color of a node: its own `color`, otherwise the palette slot of the\nbranch it belongs to below `focus`, so the open level always shows several hues.","tags":{},"kind":"function","signature":"(node: HierarchyNode, focus: HierarchyNode) => string"},{"name":"breakCycles","slug":"break-cycles","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Splits the links into an acyclic set and the links that close a cycle.\nOrders the nodes with the greedy feedback-arc-set heuristic of Eades, Lin\nand Smyth, weighted by value: sinks go to the end, sources to the front,\notherwise the node with the largest outflow minus inflow goes next. Links\nthat point backwards in that order are the ones removed, so a small return\nflow (e.g. \"comes back to book again\") is cut rather than a main flow.","tags":{},"kind":"function","signature":"(nodeIds: readonly string[], links: readonly SankeyLinkInput[]) => { kept: SankeyLinkInput[]; cyclic: SankeyLinkInput[]; }"},{"name":"bubbleRadiusScale","slug":"bubble-radius-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/xy-points.tsx","summary":"Bubbles shrink in narrow frames (down to 55%) so they keep some separation.","tags":{},"kind":"function","signature":"(width: number) => number"},{"name":"buildCategoryAxis","slug":"build-category-axis","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/category-axis.ts","summary":"Turns categories into pixel positions, ticks and hit-testing for charts\nthat share a horizontal category or time axis.","tags":{},"kind":"function","signature":"(categories: readonly XValue[], width: number, { mode, format, paddingInner, padding, tickCount, }: CategoryAxisOptions) => CategoryAxis"},{"name":"buildHierarchy","slug":"build-hierarchy","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Turns nested data into linked nodes with summed values. Zero, negative and\nnon-finite branches are dropped, since they have no area to draw.","tags":{},"kind":"function","signature":"(datum: HierarchyDatum, { sort }?: BuildHierarchyOptions) => HierarchyNode"},{"name":"buildTopology","slug":"build-topology","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/build-topology.ts","summary":"Builds a TopoJSON topology from lon/lat polygons. Rings are cut at the\npoints where the set of neighbours changes (junctions), so a border shared\nby two regions becomes ONE arc referenced by both. Each arc is simplified\nonce with its end points fixed, which keeps neighbours glued together: no\ngaps or overlaps can open along a shared border however coarse the\ntolerance. Used by the data build script; also exported for tests.","tags":{},"kind":"function","signature":"(features: readonly GeoFeature[], { object, quantization, tolerance, minArea }: BuildTopologyOptions) => Topology"},{"name":"buildTreeModel","slug":"build-tree-model","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Builds the node model. `loaded` holds children fetched lazily, keyed by the\nnode's path id; they take the place of an empty `children`.","tags":{},"kind":"function","signature":"(data: TreeChartDatum, loaded?: ReadonlyMap<string, readonly TreeChartDatum[]>) => TreeModel"},{"name":"calendarGrid","slug":"calendar-grid","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/calendar-layout.ts","summary":"Lays days out like a contribution calendar: one column per week (Monday\nfirst), one row per weekday. Days between `from` and `to` without an entry\nget `null`; days outside are left `undefined`.","tags":{},"kind":"function","signature":"(days: readonly CalendarDay[], from?: Date, to?: Date) => CalendarGrid"},{"name":"categoryGroupSpans","slug":"category-group-spans","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/category-groups.ts","summary":"Pixel span of each group along the category axis. A group covers the slots\nof its categories (`step` wide, centred on `positions`). Groups beyond the\ncategory count are dropped and the last one is cut short.","tags":{},"kind":"function","signature":"(groups: readonly CategoryGroup[], positions: readonly number[], step: number) => CategoryGroupSpan[]"},{"name":"categoryLayout","slug":"category-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/layout.ts","summary":"Geometry for charts with a category axis and a continuous value axis\n(box plots, violins, rainclouds, beeswarms). Pure.","tags":{},"kind":"function","signature":"(input: CategoryLayoutInput) => CategoryLayout"},{"name":"CHART_PALETTE","slug":"chart_palette","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Series colors. The first series always wears the brand (`accent-word`, a\nreadable tone of the active `data-accent` palette); the rest come from the\ncategorical `chart-cat-*` tokens, tuned separately for light and dark.\nValues are CSS `var()` references, so apply them through `style`, never as\nSVG presentation attributes.","tags":{},"kind":"constant","signature":"readonly [\"var(--accent-word)\", \"var(--chart-cat-1)\", \"var(--chart-cat-2)\", \"var(--chart-cat-3)\", \"var(--chart-cat-4)\", \"var(--chart-cat-5)\", \"var(--chart-cat-6"},{"name":"ChartSyncStore","slug":"chart-sync-store","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/sync-store.ts","summary":"A set of named channels. `ChartSyncProvider` scopes one; charts outside a provider share a global one.","tags":{},"kind":"class","signature":"typeof ChartSyncStore"},{"name":"chordLayout","slug":"chord-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/chord.ts","summary":"","tags":{},"kind":"function","signature":"(matrix: ReadonlyArray<readonly number[]>, { padAngle, startAngle, sortGroups, sortSubgroups, }?: ChordOptions) => ChordLayout"},{"name":"chordsOf","slug":"chords-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/chord.ts","summary":"Ribbons that touch a group (as source or target).","tags":{},"kind":"function","signature":"(layout: ChordLayout, group: number) => Chord[]"},{"name":"clampView","slug":"clamp-view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"Keeps the map from being lost: its content box (`content`, in zoom 1 pixels)\nmust stay inside the `width` x `height` viewport on each axis, or, when it is\nbigger than the viewport, cover it, with `margin` pixels of slack.","tags":{},"kind":"function","signature":"(view: MapView, width: number, height: number, content: Bounds, limits?: ViewLimits, margin?: number) => MapView"},{"name":"clean","slug":"clean","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"Rounds away binary noise such as 0.30000000000000004.","tags":{},"kind":"function","signature":"(value: number) => number"},{"name":"clearFilters","slug":"clear-filters","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Clears one dimension, or all of them.","tags":{},"kind":"function","signature":"(filters: CrossfilterFilters, dimension?: string) => CrossfilterFilters"},{"name":"clipRingToHemisphere","slug":"clip-ring-to-hemisphere","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"A closed ring in view coordinates cut to the visible hemisphere (z >= 0). Where the ring\nleaves and re-enters the visible side, the cut follows the horizon circle instead of a\nstraight chord, so a continent half behind the globe keeps its round edge.\nReturns `null` when the ring is entirely hidden.","tags":{},"kind":"function","signature":"(ring: readonly Vec3[], arcStep?: number) => Vec3[] | null"},{"name":"clockTicks","slug":"clock-ticks","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/timeline-chart/timeline-lanes.ts","summary":"Round clock ticks (every 15 min ... 1 day, aligned to local midnight) for a\nspan of hours, at most about `count` of them.","tags":{},"kind":"function","signature":"(start: number, end: number, count?: number) => ClockTick[]"},{"name":"clusterPoints","slug":"cluster-points","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/cluster.ts","summary":"Greedy screen-distance clustering: the heaviest unassigned point claims\nevery unassigned point closer than `distance`; the cluster sits at the\nvalue-weighted centre of its members. Points are bucketed on a grid of\n`distance`, so the cost stays near-linear. Deterministic for equal input.","tags":{},"kind":"function","signature":"(items: readonly ClusterInput[], distance: number) => Cluster[]"},{"name":"computeLayout","slug":"compute-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/layout.ts","summary":"Computes every pixel of a cartesian chart: margins, scales, ticks, paths,\nbars, labels and annotations. Pure, so it is memoised by the component and\nhover never recomputes it.","tags":{},"kind":"function","signature":"(input: LayoutInput) => CartesianLayout"},{"name":"createAxisMap","slug":"create-axis-map","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Piecewise-linear map between data values and pixels, given matching samples (e.g. the center of\neach category and its index or time). Outside the samples it continues the nearest segment.","tags":{},"kind":"function","signature":"(pixels: readonly number[], values: readonly number[]) => AxisMap"},{"name":"createRawProjection","slug":"create-raw-projection","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/projection.ts","summary":"Creates a raw projection:\n- `equirectangular`: plate carrée (x = lon, y = -lat) with an optional standard parallel;\n- `mercator`: conformal, latitudes clamped to ±85.05°;\n- `equalEarth`: area preserving, pleasant for world maps;\n- `fitted`: equirectangular with the standard parallel at the middle of the area, so a country keeps its shape\n  (use with `fitProjection`, which also picks the centre).","tags":{},"kind":"function","signature":"(kind: ProjectionKind, { centerLon, parallel }?: RawProjectionOptions) => RawProjection"},{"name":"createRegionIndex","slug":"create-region-index","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/match.ts","summary":"Looks a record up by the id or by the name of a region.","tags":{},"kind":"function","signature":"<T extends { id: string; }>(items: readonly T[]) => (feature: { id: string; name: string; }) => T | undefined"},{"name":"criticalPath","slug":"critical-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Critical path method over finish-to-start dependencies. Each leaf task keeps\nits duration; tasks without predecessors start at their own start date and the\nrest as soon as every predecessor ends (a dependency on a parent means all of\nits leaves), so waiting gaps in the plan do not count. A forward\npass finds the earliest dates and the project end, a backward pass the latest\nones; tasks whose slack is within `tolerance` form the critical path. Tasks\ncaught in a dependency cycle are left out.","tags":{},"kind":"function","signature":"(tasks: readonly GanttTaskLike[], tolerance?: number) => CriticalPath"},{"name":"cursorAction","slug":"cursor-action","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"","tags":{},"kind":"function","signature":"(tool: \"ruler\" | \"ink\", key: \" \" | \"Enter\" | \"Escape\", points: readonly DataPoint[], cursor: DataPoint) => CursorAction"},{"name":"curveCommands","slug":"curve-commands","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Commands through `points`. The first command is `M`, or `L` when `join` is\ntrue, so the run can extend a path already in progress (areas).","tags":{},"kind":"function","signature":"(points: readonly Point[], curve: Curve, join?: boolean) => string"},{"name":"datetimeColumnLabels","slug":"datetime-column-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/datetime-columns.ts","summary":"Column labels for a heatmap whose columns are consecutive points in time.\nSpans of two days or more are labelled only at calendar boundaries (Mondays,\nfirst of the month, January) on the column closest to each boundary, the way\na continuous time axis would; shorter spans label every column with its clock\ntime and leave the thinning to the grid. Other columns get `null`.","tags":{},"kind":"function","signature":"(dates: ReadonlyArray<Date | number>, maxLabels?: number) => Array<string | null>"},{"name":"DAY_MS","slug":"day_ms","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"","tags":{},"kind":"constant","signature":"86400000"},{"name":"dayKey","slug":"day-key","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Local midnight key of a date, for holiday lookups.","tags":{},"kind":"function","signature":"(time: number) => number"},{"name":"decodeArcs","slug":"decode-arcs","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/topojson.ts","summary":"Minimal TopoJSON decoder for area objects. Arcs are stored quantized and\ndelta-encoded; `decodeArcs` expands them once to absolute [lon, lat].","tags":{},"kind":"function","signature":"(topology: Topology) => Position[][]"},{"name":"DECORATIVE","slug":"decorative","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/a11y.ts","summary":"Spread on purely visual SVG groups and text that screen readers get from the data table instead.","tags":{},"kind":"constant","signature":"{ readonly \"aria-hidden\": true; }"},{"name":"DEFAULT_CHORD_LABELS","slug":"default_chord_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/chord-chart/chord-chart.tsx","summary":"","tags":{},"kind":"constant","signature":"ChordLabels"},{"name":"DEFAULT_CROSSFILTER_LABELS","slug":"default_crossfilter_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter.tsx","summary":"","tags":{},"kind":"constant","signature":"CrossfilterLabels"},{"name":"DEFAULT_EXPORT_TEXTS","slug":"default_export_texts","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export-menu.tsx","summary":"","tags":{},"kind":"constant","signature":"ExportTexts"},{"name":"DEFAULT_GLOBE_LABELS","slug":"default_globe_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/globe-chart/globe-chart.tsx","summary":"","tags":{},"kind":"constant","signature":"GlobeLabels"},{"name":"DEFAULT_HEATMAP_LABELS","slug":"default_heatmap_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/heatmap-grid.tsx","summary":"","tags":{},"kind":"constant","signature":"HeatmapLabels"},{"name":"DEFAULT_HIERARCHY_LABELS","slug":"default_hierarchy_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"","tags":{},"kind":"constant","signature":"HierarchyLabels"},{"name":"DEFAULT_INK_LABELS","slug":"default_ink_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/ink-layer.tsx","summary":"","tags":{},"kind":"constant","signature":"InkLabels"},{"name":"DEFAULT_LABELS","slug":"default_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/types.ts","summary":"","tags":{},"kind":"constant","signature":"ChartLabels"},{"name":"DEFAULT_LIMITS","slug":"default_limits","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"","tags":{},"kind":"constant","signature":"ViewLimits"},{"name":"DEFAULT_MAP_LABELS","slug":"default_map_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/map-labels.ts","summary":"","tags":{},"kind":"constant","signature":"MapLabels"},{"name":"DEFAULT_SANKEY_LABELS","slug":"default_sankey_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/sankey-chart/sankey-chart.tsx","summary":"","tags":{},"kind":"constant","signature":"SankeyLabels"},{"name":"DEFAULT_SCALE_COLORS","slug":"default_scale_colors","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"","tags":{},"kind":"constant","signature":"Required<ScaleColors>"},{"name":"DEFAULT_STAT_LABELS","slug":"default_stat_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/labels.ts","summary":"","tags":{},"kind":"constant","signature":"StatLabels"},{"name":"DEFAULT_STOCK_RANGES","slug":"default_stock_ranges","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-chart.tsx","summary":"1W, 1M, 3M, 6M, 1Y, All. Pass Spanish labels (\"1S\", \"1A\", \"Todo\") through `ranges`.","tags":{},"kind":"constant","signature":"readonly TimeRangePreset[]"},{"name":"DEFAULT_STOCK_TOOLS","slug":"default_stock_tools","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-drawings.ts","summary":"","tags":{},"kind":"constant","signature":"readonly StockTool[]"},{"name":"DEFAULT_TREE_LABELS","slug":"default_tree_labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-chart.tsx","summary":"","tags":{},"kind":"constant","signature":"TreeLabels"},{"name":"defaultBrickSize","slug":"default-brick-size","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-transforms.ts","summary":"Brick size used when none is given: the ATR(14), never below 0.01.","tags":{},"kind":"function","signature":"(data: readonly StockBar[]) => number"},{"name":"defaultCategoryLabel","slug":"default-category-label","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/category-axis.ts","summary":"Short default label: \"6 oct\" for dates, the value itself otherwise.","tags":{},"kind":"function","signature":"(value: XValue) => string"},{"name":"defaultMapHeight","slug":"default-map-height","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/use-map-geometry.ts","summary":"Height that suits `map` at `width`: its own projected height / width ratio, so a tall country gets a tall\nbox and a world map a wide one (within 220 and 640 px).","tags":{},"kind":"function","signature":"(map: GeoMap, width: number, projection?: ProjectionKind) => number"},{"name":"defaultXLabel","slug":"default-x-label","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/layout.ts","summary":"Default category label: Spanish short dates, grouped numbers, strings as given.","tags":{},"kind":"function","signature":"(value: XValue) => string"},{"name":"degToRad","slug":"deg-to-rad","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"","tags":{},"kind":"function","signature":"(degrees: number) => number"},{"name":"dendrogramLayout","slug":"dendrogram-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-radial.ts","summary":"Dendrogram (cluster layout): like the tidy tree, but every leaf is drawn on\nthe last level, so the leaves line up and the branches read as a hierarchy\nof groupings. Internal nodes are centred over their first and last child.","tags":{},"kind":"function","signature":"(root: TreeLayoutInput, { direction, siblingGap, levelGap }?: TreeLayoutOptions) => TreeLayout"},{"name":"descendants","slug":"descendants","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Pre-order list: `node`, then its subtree.","tags":{},"kind":"function","signature":"(node: HierarchyNode) => HierarchyNode[]"},{"name":"describeNode","slug":"describe-node","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Spoken summary of a node for the live region and `aria-valuetext`.","tags":{},"kind":"function","signature":"(node: HierarchyNode, focus: HierarchyNode, format: ValueFormatter) => string"},{"name":"DIRECTION_COLORS","slug":"direction_colors","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Direction of change: `chart-up` and `chart-down` tokens, `chart-total` when flat or a total.","tags":{},"kind":"constant","signature":"{ readonly up: \"var(--chart-up)\"; readonly down: \"var(--chart-down)\"; readonly flat: \"var(--chart-total)\"; }"},{"name":"directionOf","slug":"direction-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"`up` / `down` / `flat` for a change; changes within `epsilon` count as flat.","tags":{},"kind":"function","signature":"(delta: number, epsilon?: number) => ChartDirection"},{"name":"divergingColor","slug":"diverging-color","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Diverging scale: `low` below `center`, `mid` at it, `high` above.","tags":{},"kind":"function","signature":"(value: number, [min, max]: readonly [number, number], center?: number, colors?: ScaleColors) => ColorStop"},{"name":"downloadPng","slug":"download-png","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export.ts","summary":"Rasterizes through an `<img>` and a canvas; `scale` 2 gives retina sharpness.","tags":{},"kind":"function","signature":"(input: SVGSVGElement | readonly SVGSVGElement[], { fileName, scale, ...options }: ExportOptions & { scale?: number; }) => Promise<void>"},{"name":"downloadSvg","slug":"download-svg","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export.ts","summary":"","tags":{},"kind":"function","signature":"(input: SVGSVGElement | readonly SVGSVGElement[], { fileName, ...options }: ExportOptions) => void"},{"name":"downsample","slug":"downsample","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/downsample.ts","summary":"LTTB over `{ x, y }` points: at most `threshold` points that keep the visual shape.","tags":{},"kind":"function","signature":"<T extends SamplePoint>(points: readonly T[], threshold: number) => T[]"},{"name":"dragRotation","slug":"drag-rotation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"New rotation after dragging `dx`, `dy` pixels: the surface follows the pointer (one disc\nradius is one radian), so a small globe turns faster per pixel than a big one.","tags":{},"kind":"function","signature":"(rotation: GlobeRotation, dx: number, dy: number, radius: number) => GlobeRotation"},{"name":"EASE_OUT","slug":"ease_out","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"","tags":{},"kind":"constant","signature":"\"cubic-bezier(.22,1,.36,1)\""},{"name":"easeOutCubic","slug":"ease-out-cubic","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"Cubic ease-out for `requestAnimationFrame` transitions, `t` in 0..1.","tags":{},"kind":"function","signature":"(t: number) => number"},{"name":"EDGE_SAMPLES","slug":"edge_samples","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"Samples per edge: four edges, so a ring holds `4 * EDGE_SAMPLES` points.","tags":{},"kind":"constant","signature":"20"},{"name":"edgeColorOf","slug":"edge-color-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Color of the edge that enters `node`.","tags":{},"kind":"function","signature":"(node: TreeChartNode, mode: TreeEdgeColor) => string"},{"name":"ema","slug":"ema","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Exponential moving average with smoothing `2 / (period + 1)`. It is seeded\nwith the simple average of the first `period` numbers, so leading nulls\n(e.g. another indicator's warm-up) are skipped.","tags":{},"kind":"function","signature":"(values: IndicatorInput, period: number) => IndicatorSeries"},{"name":"EMPTY_INK","slug":"empty_ink","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"","tags":{},"kind":"constant","signature":"InkState"},{"name":"estimateTextWidth","slug":"estimate-text-width","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/axes.tsx","summary":"Approximate rendered width of a tick label at 11px (tabular figures).","tags":{},"kind":"function","signature":"(text: string, fontSize?: number) => number"},{"name":"evenEdges","slug":"even-edges","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Bin edges (`count + 1` of them) that split `[min, max]` evenly.","tags":{},"kind":"function","signature":"(min: number, max: number, count: number) => number[]"},{"name":"explodeBins","slug":"explode-bins","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/dot-stack.ts","summary":"Stacks for every bin with one shared radius (the smallest that makes the\nfullest bin fit), so all the dots of a histogram look alike.","tags":{},"kind":"function","signature":"(bins: readonly DotStackInput[], options?: DotStackOptions) => { radius: number; stacks: DotPosition[][]; }"},{"name":"exportFileName","slug":"export-file-name","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export.ts","summary":"File name from a chart title: lower case, accents removed, dashes, with the extension.","tags":{},"kind":"function","signature":"(title: string, extension: \"svg\" | \"png\") => string"},{"name":"extent","slug":"extent","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"Min and max of the finite numbers in `values`, or null when there are none.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>) => [number, number] | null"},{"name":"fadeIn","slug":"fade-in","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"Fades an element in.","tags":{},"kind":"function","signature":"(element: Element, duration?: number, delay?: number) => void"},{"name":"FALLBACK_HEIGHT","slug":"fallback_height","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-chart-size.ts","summary":"Height used before the first measurement when a chart fills its parent.","tags":{},"kind":"constant","signature":"300"},{"name":"FALLBACK_WIDTH","slug":"fallback_width","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-chart-size.ts","summary":"Width used for the server render and the first client paint before measuring.","tags":{},"kind":"constant","signature":"640"},{"name":"featurePositions","slug":"feature-positions","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/geo-path.ts","summary":"Every outer-ring vertex of the features, for fitting a projection.","tags":{},"kind":"function","signature":"(features: readonly GeoFeature[]) => Position[]"},{"name":"fibLevels","slug":"fib-levels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-drawings.ts","summary":"Retracement levels between two prices: ratio 0 sits at `a`, ratio 1 at `b`.","tags":{},"kind":"function","signature":"(a: number, b: number) => FibLevel[]"},{"name":"filterRecords","slug":"filter-records","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Records that pass every filter. `exclude` leaves one dimension's own filter out, which is how\ncrossfilter keeps a chart stable while you interact with it.","tags":{},"kind":"function","signature":"<T>(records: readonly T[], accessors: Accessors<T>, filters: CrossfilterFilters, exclude?: string) => T[]"},{"name":"findNode","slug":"find-node","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"","tags":{},"kind":"function","signature":"(root: HierarchyNode, id: string) => HierarchyNode | null"},{"name":"fitLabel","slug":"fit-label","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Label that fits in `maxWidth`: the full text, a shortened one with an\nellipsis, or `null` when not even four characters fit.","tags":{},"kind":"function","signature":"(text: string, maxWidth: number, fontSize?: number) => string | null"},{"name":"fitLaneHeight","slug":"fit-lane-height","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/timeline-chart/timeline-lanes.ts","summary":"Lane height that makes the rows fill `available` exactly:\n`sum(count * (lane + gap) - gap + 2 * rowPad) = available`, clamped to\n`[min, max]`.","tags":{},"kind":"function","signature":"({ counts, available, gap, rowPad, min, max, }: FitLaneInput) => number"},{"name":"fitProjection","slug":"fit-projection","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/projection.ts","summary":"Projects `positions` and scales them to fill `width` x `height` (minus\npadding) keeping the aspect ratio, centred. This is what makes a map fill\nits exact parent: the same data fits a 320 px card and a full dashboard\npanel. For `fitted` the centre meridian and the standard parallel come\nfrom the extent itself.","tags":{},"kind":"function","signature":"(kind: ProjectionKind, positions: readonly Position[], width: number, height: number, { padding }?: FitOptions) => Projection"},{"name":"fitRadius","slug":"fit-radius","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/dot-stack.ts","summary":"Largest radius at which `count` dots fit a `width` x `height` box, or the minimum radius.","tags":{},"kind":"function","signature":"(input: DotStackInput, options?: DotStackOptions) => number"},{"name":"fitUnitGrid","slug":"fit-unit-grid","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Picks the column count that gives the largest units inside `width` x\n`height`. When the size is capped, the widest layout wins (fewer rows).","tags":{},"kind":"function","signature":"({ width, height, gap, maxSize, maxColumns, rowsFor, columns: fixed, }: UnitGridOptions) => UnitGridFit"},{"name":"fitView","slug":"fit-view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-pan-zoom.ts","summary":"View that shows a `contentWidth` x `contentHeight` drawing centred in a\n`width` x `height` viewport, `padding` from the edges, never enlarged past `maxFit`.","tags":{},"kind":"function","signature":"(contentWidth: number, contentHeight: number, width: number, height: number, { padding, minZoom, maxFit }?: { padding?: number | undefined; minZoom?: number | undefined; maxFit?: number | undefined; }) => PanZoomView"},{"name":"foldText","slug":"fold-text","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Lower-case text without accents, for forgiving searches.","tags":{},"kind":"function","signature":"(text: string) => string"},{"name":"formatClock","slug":"format-clock","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/timeline-chart/timeline-lanes.ts","summary":"\"09:30\" in 24-hour time.","tags":{},"kind":"function","signature":"(value: number | Date) => string"},{"name":"formatCompact","slug":"format-compact","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"1234 -> \"1,2 mil\"; 2500000 -> \"2,5 M\". Values under 1000 keep their digits.","tags":{},"kind":"function","signature":"(value: number, options?: CompactFormatOptions) => string"},{"name":"formatCurrency","slug":"format-currency","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"\"S/ 1 234.50\"","tags":{},"kind":"function","signature":"(value: number, options?: CurrencyFormatOptions) => string"},{"name":"formatDate","slug":"format-date","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/time.ts","summary":"\"lun 6 oct 2026\": the full label used by tooltips and the data table.","tags":{},"kind":"function","signature":"(value: Date | number) => string"},{"name":"formatDuration","slug":"format-duration","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Elapsed time as a short text: \"3 d\", \"2.5 h\", \"40 min\".","tags":{},"kind":"function","signature":"(ms: number) => string"},{"name":"formatNumber","slug":"format-number","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"\"12 345.68\"","tags":{},"kind":"function","signature":"(value: number, options?: NumberFormatOptions) => string"},{"name":"formatPercent","slug":"format-percent","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"0.125 -> \"12.5%\"","tags":{},"kind":"function","signature":"(value: number, options?: PercentFormatOptions) => string"},{"name":"freedmanDiaconisWidth","slug":"freedman-diaconis-width","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Freedman–Diaconis bin width: `2 · IQR · n^(-1/3)`; 0 when the IQR is 0.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>) => number"},{"name":"fromVec","slug":"from-vec","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Unit vector to `[lon, lat]` in degrees.","tags":{},"kind":"function","signature":"([x, y, z]: Vec3) => Position"},{"name":"fullCategoryLabel","slug":"full-category-label","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/category-axis.ts","summary":"Long label for tooltips and tables: \"mar 6 oct 2026\" for dates.","tags":{},"kind":"function","signature":"(value: XValue) => string"},{"name":"funnelStages","slug":"funnel-stages","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Stage geometry along one axis: each stage spans its slice of `length`,\nstarts as wide as its own value and ends as wide as the next stage, so the\noutline is continuous. Widths are proportional to value.","tags":{},"kind":"function","signature":"(values: readonly number[], options: FunnelOptions) => FunnelStage[]"},{"name":"GANTT_ZOOM_ORDER","slug":"gantt_zoom_order","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"","tags":{},"kind":"constant","signature":"readonly GanttZoom[]"},{"name":"GANTT_ZOOMS","slug":"gantt_zooms","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"","tags":{},"kind":"constant","signature":"Record<GanttZoom, GanttZoomLevel>"},{"name":"ganttDomain","slug":"gantt-domain","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Visible window for a zoom: the tasks padded by one `pad` unit on each side, on unit boundaries.","tags":{},"kind":"function","signature":"(times: readonly number[], zoom: GanttZoom) => [number, number]"},{"name":"ganttHeader","slug":"gantt-header","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Both header rows of a zoom level.","tags":{},"kind":"function","signature":"(scale: GanttScale, zoom: GanttZoom, options?: HeaderLabelOptions) => GanttHeader"},{"name":"ganttRows","slug":"gantt-rows","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Depth-first rows of the task tree, children right after their parent in\ninput order. Parents roll up the dates and the duration-weighted progress\nof all their descendants; children of collapsed parents are left out.\nTasks whose parent is missing become roots.","tags":{},"kind":"function","signature":"<T extends GanttTaskLike>(tasks: readonly T[], collapsed?: ReadonlySet<string>) => GanttRow<T>[]"},{"name":"ganttScale","slug":"gantt-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Linear date → x scale. The zoom fixes the density; when the timeline would\nbe narrower than `minWidth` it stretches so it always fills its pane.","tags":{},"kind":"function","signature":"(domain: readonly [number, number], zoom: GanttZoom, minWidth?: number) => GanttScale"},{"name":"gaussianKde","slug":"gaussian-kde","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Gaussian kernel density estimate, evaluated on an even grid. The curve\nintegrates to ~1 over the real line, so it can share an axis with a\nhistogram drawn as a density.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, options?: KdeOptions) => DensityPoint[]"},{"name":"geometryExtent","slug":"geometry-extent","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/geo-path.ts","summary":"Extent of the outer boundary of a geometry in lon/lat.","tags":{},"kind":"function","signature":"(geometry: AreaGeometry) => Bounds"},{"name":"geometryPath","slug":"geometry-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/geo-path.ts","summary":"SVG path (`d`) of an area: one closed subpath per ring. Consecutive points\nthat land on the same pixel (at `precision` decimals) are merged, so the\nstring stays short even at low zoom. Use with `fill-rule: evenodd` for holes.","tags":{},"kind":"function","signature":"(geometry: AreaGeometry, project: Project, precision?: number) => string"},{"name":"geometryRings","slug":"geometry-rings","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/topojson.ts","summary":"All rings of a geometry, flattened (outer rings and holes).","tags":{},"kind":"function","signature":"(geometry: AreaGeometry) => Position[][]"},{"name":"GLOBE_MAX_LAT","slug":"globe_max_lat","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Maximum latitude of the view center: the poles themselves are a singular view.","tags":{},"kind":"constant","signature":"89"},{"name":"globeArc","slug":"globe-arc","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Points of the great circle from `a` to `b` as world vectors, optionally lifted off the surface\n(`lift` is the extra radius at the middle, as a fraction of the globe radius) so an arc\nseems to fly over the globe.","tags":{},"kind":"function","signature":"(a: Position, b: Position, steps?: number, lift?: number) => Vec3[]"},{"name":"globeLinePieces","slug":"globe-line-pieces","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Visible stretches of a polyline of world vectors, projected: a path leaving the visible\nhemisphere is cut at the horizon so lines never wrap behind the globe.","tags":{},"kind":"function","signature":"(line: readonly Vec3[], rotation: GlobeRotation, disc: GlobeDisc) => Array<Array<[number, number]>>"},{"name":"globeRingsPath","slug":"globe-rings-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"SVG path of rings drawn on the globe. `rings` hold precomputed world vectors (`toVec`), so\nturning the globe is one matrix product per vertex. Use with `fill-rule: evenodd`.","tags":{},"kind":"function","signature":"(rings: ReadonlyArray<readonly Vec3[]>, rotation: GlobeRotation, disc: GlobeDisc) => string"},{"name":"graticuleLines","slug":"graticule-lines","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Meridians and parallels every `step` degrees, as polylines of `[lon, lat]`.","tags":{},"kind":"function","signature":"(step?: number, resolution?: number) => Position[][]"},{"name":"greatCircle","slug":"great-circle","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/routes.ts","summary":"Points of the great circle (the shortest path on the globe) from `a` to `b`, `steps + 1` of\nthem, as `[lon, lat]`. The path is cut into pieces where it crosses the antimeridian, so a\nprojected line never streaks across the whole map.","tags":{},"kind":"function","signature":"(a: Position, b: Position, steps?: number) => Position[][]"},{"name":"greatCircleDistance","slug":"great-circle-distance","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/routes.ts","summary":"Angular length of the great circle between two positions, in degrees.","tags":{},"kind":"function","signature":"(a: Position, b: Position) => number"},{"name":"gridCell","slug":"grid-cell","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Cell of the `index`-th unit. \"row\" fills left to right from the top row;\n\"column\" fills bottom to top from the left column (the classic waffle).","tags":{},"kind":"function","signature":"(index: number, columns: number, rows: number, order?: GridOrder) => { row: number; column: number; }"},{"name":"gridColumns","slug":"grid-columns","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/chart-grid/grid-math.ts","summary":"Columns that fit a container: as many as keep every panel at least\n`minPanelWidth` wide (gaps included), never more than `maxColumns` or\n`count`, never fewer than one.","tags":{},"kind":"function","signature":"(width: number, count: number, { minPanelWidth, maxColumns, gap }: GridColumnsOptions) => number"},{"name":"groupAt","slug":"group-at","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/chord.ts","summary":"Index of the group whose arc contains `angle`, or -1 (in the padding or outside).","tags":{},"kind":"function","signature":"(layout: ChordLayout, angle: number) => number"},{"name":"groupLeaves","slug":"group-leaves","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Folds runs of leaf siblings into one group node, so a manager with twenty\napprentices shows \"20 apprentices\" instead of twenty cards. A node is\ngrouped when it has at least `min` leaf children; the group starts collapsed\nand expands to the original leaves. Nodes with other children keep them.","tags":{},"kind":"function","signature":"(data: TreeChartDatum, min: number, label?: (count: number) => string) => TreeChartDatum"},{"name":"groupRecords","slug":"group-records","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Totals per value of `dimension`, over the records that pass every OTHER filter.","tags":{},"kind":"function","signature":"<T>(records: readonly T[], accessors: Accessors<T>, filters: CrossfilterFilters, dimension: string, { value, keys }?: GroupOptions<T>) => Group[]"},{"name":"groupSeed","slug":"group-seed","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/points.ts","summary":"Seed of one box or violin, so every group gets its own stable jitter.","tags":{},"kind":"function","signature":"(seed: number, category: number, series: number) => number"},{"name":"headerCells","slug":"header-cells","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Cells of one header row, clipped to the scale.","tags":{},"kind":"function","signature":"(scale: GanttScale, unit: CalendarUnit, options?: HeaderLabelOptions) => HeaderCell[]"},{"name":"heatmapScale","slug":"heatmap-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/heatmap-scale.ts","summary":"Builds the color function of a heatmap from its options and every finite value.","tags":{},"kind":"function","signature":"(values: readonly number[], { scale, domain, center, colors, ranges }: HeatmapScaleOptions) => HeatmapScale"},{"name":"heightOf","slug":"height-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Number of levels below `node` (0 for a leaf).","tags":{},"kind":"function","signature":"(node: HierarchyNode) => number"},{"name":"heikinAshi","slug":"heikin-ashi","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-transforms.ts","summary":"Heikin-Ashi candles: each bar opens at the midpoint of the previous HA bar\nand closes at the average of the raw bar, which smooths the trend.\nOne output bar per input bar, same dates and volume.","tags":{},"kind":"function","signature":"(data: readonly StockBar[]) => StockBar[]"},{"name":"hexAt","slug":"hex-at","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/hex-tile-map/hex-layout.ts","summary":"Index of the tile whose hexagon contains the point, or -1.","tags":{},"kind":"function","signature":"(centers: ReadonlyArray<readonly [number, number]>, size: number, x: number, y: number) => number"},{"name":"hexLayout","slug":"hex-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/hex-layout.ts","summary":"","tags":{},"kind":"function","signature":"({ rows, columns, width, height }: HexLayoutInput) => HexLayout"},{"name":"hexNeighbors","slug":"hex-neighbors","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/hex-tile-map/hex-layout.ts","summary":"Ids of the tiles that share an edge with `tile` (odd-r offset neighbours).","tags":{},"kind":"function","signature":"(tile: HexTile, tiles: readonly HexTile[]) => string[]"},{"name":"hexPath","slug":"hex-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/hex-layout.ts","summary":"Closed path of a pointy-top hexagon centred at `(cx, cy)`.","tags":{},"kind":"function","signature":"(cx: number, cy: number, radius: number) => string"},{"name":"hexPoints","slug":"hex-points","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/hex-tile-map/hex-layout.ts","summary":"The six corners of a pointy-top hexagon as an SVG `points` value; `inset` shrinks it for the gap.","tags":{},"kind":"function","signature":"(cx: number, cy: number, size: number, inset?: number) => string"},{"name":"HIERARCHY_FRAME_CLASS","slug":"hierarchy_frame_class","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Class for the `ChartFrame` of a hierarchy chart: makes it a size container\n(`@container/chart`) so the header and legend below can react to its width.","tags":{},"kind":"constant","signature":"\"@container/chart\""},{"name":"hierarchyKey","slug":"hierarchy-key","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Keyboard handling shared by the hierarchy charts: arrows move between the\nchildren of the focused node, Enter opens the active one, Escape goes up.\nReturns the next active index, or `undefined` when the key is not handled.","tags":{},"kind":"function","signature":"(key: string, active: number | null, count: number) => \"drill\" | \"up\" | number | undefined"},{"name":"histogram","slug":"histogram","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Bins `values` with the chosen rule.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, options?: BinOptions) => BinnedHistogram"},{"name":"HOUR_MS","slug":"hour_ms","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"","tags":{},"kind":"constant","signature":"3600000"},{"name":"IDENTITY_VIEW","slug":"identity_view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"","tags":{},"kind":"constant","signature":"MapView"},{"name":"initialCollapsed","slug":"initial-collapsed","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Ids collapsed at first: nodes flagged `collapsed`, and every node at `initialDepth`.","tags":{},"kind":"function","signature":"(model: TreeModel, initialDepth: number) => Set<string>"},{"name":"initials","slug":"initials","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"\"AR\" for \"Ana Rojas\", \"K\" for \"Kevin\".","tags":{},"kind":"function","signature":"(name: string) => string"},{"name":"inkOn","slug":"ink-on","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Text color readable on a `tint(color, percent)` fill.","tags":{},"kind":"function","signature":"(percent: number) => string"},{"name":"inkPath","slug":"ink-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"The pen path of a stroke given in pixels: thinned, smoothed, then splined.","tags":{},"kind":"function","signature":"(points: readonly PixelPoint[], minDistance?: number) => string"},{"name":"inkReducer","slug":"ink-reducer","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"","tags":{},"kind":"function","signature":"(state: InkState, action: InkAction) => InkState"},{"name":"interpolateView","slug":"interpolate-view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"","tags":{},"kind":"function","signature":"(from: PartitionView, to: PartitionView, t: number) => PartitionView"},{"name":"invertOrthographic","slug":"invert-orthographic","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"The `[lon, lat]` under a screen pixel, or `null` outside the disc.","tags":{},"kind":"function","signature":"(x: number, y: number, rotation: GlobeRotation, { cx, cy, radius }: GlobeDisc) => Position | null"},{"name":"isSelected","slug":"is-selected","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"True when `value` is inside the dimension's filter (or the dimension has none).","tags":{},"kind":"function","signature":"(filters: CrossfilterFilters, dimension: string, value: DimensionValue) => boolean"},{"name":"isUnitIconName","slug":"is-unit-icon-name","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-icons.ts","summary":"","tags":{},"kind":"function","signature":"(value: unknown) => value is UnitIconName"},{"name":"jitterValues","slug":"jitter-values","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/points.ts","summary":"Deterministic jitter for raw observations. `reach(value)` is the largest\nabsolute offset in pixels at that value (a violin passes its density\nprofile, a box a constant), so the dots follow the shape they sit in.\nNon-finite values are dropped. The same seed always yields the same layout.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, seed: number, reach: number | ((value: number) => number)) => JitteredValue[]"},{"name":"keyRotation","slug":"key-rotation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Rotation after an arrow key: left and right turn the globe, up and down tilt it.","tags":{},"kind":"function","signature":"(rotation: GlobeRotation, key: string, step?: number) => GlobeRotation | null"},{"name":"labelAnchor","slug":"label-anchor","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/geo-path.ts","summary":"A point well inside the region, for its label: the point of the largest\npolygon farthest from every edge (a coarse \"pole of inaccessibility\": grid\nsearch, then two refinements). Better than the centroid for crescents such\nas Lima or Chile.","tags":{},"kind":"function","signature":"(geometry: AreaGeometry) => Position"},{"name":"largestRemainder","slug":"largest-remainder","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Shares `total` whole units between weights so they add up exactly\n(largest remainder method). Negative or missing weights count as zero; all\nzero weights get nothing.","tags":{},"kind":"function","signature":"(weights: readonly number[], total: number) => number[]"},{"name":"layoutHexGrid","slug":"layout-hex-grid","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/hex-tile-map/hex-layout.ts","summary":"Largest hexagons that fit `tiles` in a `width` x `height` area, centered.","tags":{},"kind":"function","signature":"(tiles: readonly Pick<HexTile, \"row\" | \"col\">[], width: number, height: number) => HexGrid"},{"name":"levelStrength","slug":"level-strength","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"Strength (0-100) of the branch hue for a partition cell (sunburst ring or\nicicle band): strong next to the open node, lighter further out, with a small\nspread between siblings so neighbours stay distinguishable.","tags":{},"kind":"function","signature":"(node: HierarchyNode, focus: HierarchyNode) => number"},{"name":"linearRegression","slug":"linear-regression","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Ordinary least squares fit `y = slope · x + intercept`; null below two distinct x.","tags":{},"kind":"function","signature":"(points: ReadonlyArray<{ x: number; y: number; }>) => Regression | null"},{"name":"linearScale","slug":"linear-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"","tags":{},"kind":"function","signature":"({ domain, range, nice, tickCount, }: LinearScaleOptions) => ContinuousScale"},{"name":"linearTicks","slug":"linear-ticks","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"Evenly spaced round values inside `[min, max]`.","tags":{},"kind":"function","signature":"(min: number, max: number, count?: number) => number[]"},{"name":"linePath","slug":"line-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Line through the points; `null` entries break the line.","tags":{},"kind":"function","signature":"(points: ReadonlyArray<Point | null>, curve?: Curve) => string"},{"name":"logScale","slug":"log-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/log.ts","summary":"Base-10 logarithmic scale, extended to whole decades.","tags":{},"kind":"function","signature":"({ domain, range }: LogScaleOptions) => ContinuousScale"},{"name":"lttbIndices","slug":"lttb-indices","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/downsample.ts","summary":"Indices LTTB keeps from `points` (ascending, always including the first and\nlast). The shape is preserved: every bucket keeps the point forming the\nlargest triangle with the point already kept and the average of the next bucket.\nReturns every index when `threshold` is not smaller than the input or below 3.","tags":{},"kind":"function","signature":"(points: readonly SamplePoint[], threshold: number) => number[]"},{"name":"macd","slug":"macd","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Moving average convergence divergence, 12 / 26 / 9 by default.","tags":{},"kind":"function","signature":"(values: IndicatorInput, fast?: number, slow?: number, signalPeriod?: number) => MacdResult"},{"name":"mapFeatures","slug":"map-features","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/use-map-geometry.ts","summary":"Decoded features of a map (once per map object, not per render).","tags":{},"kind":"function","signature":"(map: GeoMap) => GeoFeature[]"},{"name":"matchesFilter","slug":"matches-filter","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"","tags":{},"kind":"function","signature":"(filter: CrossfilterFilter, value: DimensionValue) => boolean"},{"name":"matchKey","slug":"match-key","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/match.ts","summary":"Lowercase, accent-free key so \"Áncash\", \"ancash\" and \"ANCASH\" join.","tags":{},"kind":"function","signature":"(text: string) => string"},{"name":"mean","slug":"mean","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"","tags":{},"kind":"function","signature":"(values: readonly number[]) => number"},{"name":"measureRange","slug":"measure-range","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-drawings.ts","summary":"What a drag between two anchors measures.","tags":{},"kind":"function","signature":"(times: readonly number[], a: StockAnchor, b: StockAnchor) => Measurement"},{"name":"measureSegment","slug":"measure-segment","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Difference between two points of the chart, in data units.","tags":{},"kind":"function","signature":"(a: DataPoint, b: DataPoint) => Measure"},{"name":"MERCATOR_MAX_LAT","slug":"mercator_max_lat","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/projection.ts","summary":"Web Mercator cannot show the poles; latitudes are clamped here.","tags":{},"kind":"constant","signature":"85.0511287798"},{"name":"mondayOf","slug":"monday-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/calendar-layout.ts","summary":"Monday on or before `date`.","tags":{},"kind":"function","signature":"(date: Date) => Date"},{"name":"MONOCHROME_BASE","slug":"monochrome_base","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Base hue of a monochrome chart: the active brand accent.","tags":{},"kind":"constant","signature":"\"var(--accent-word)\""},{"name":"monochromeByValue","slug":"monochrome-by-value","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Shades for `values`, darkest on the largest value, so rank reads as\nintensity. Returns one color per input, in input order.","tags":{},"kind":"function","signature":"(values: readonly number[], base?: string) => string[]"},{"name":"monochromeShade","slug":"monochrome-shade","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Shade `step` of `count` in one hue: step 0 is the full color, the last\nstep the palest tint (40%), mixed towards the surface so it works in both\nthemes. `count` of 1 gives the full color.","tags":{},"kind":"function","signature":"(step: number, count: number, base?: string) => string"},{"name":"monotoneTangents","slug":"monotone-tangents","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Tangents for a monotone cubic through `points` (Fritsch–Butland): the curve\nnever overshoots between two samples, so a peak in the data is a peak on screen.","tags":{},"kind":"function","signature":"(points: readonly Point[]) => number[]"},{"name":"moveCursor","slug":"move-cursor","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"One arrow-key step of the crosshair in data units: a category on index axes (a fiftieth of the\nwindow on time axes) and a fiftieth of the value window vertically; `big` moves five times as far.\nIt never leaves the window. On a horizontal plot (`horizontal`) left and right move the value and\nup and down the category (down is the next one, as the categories run top to bottom).","tags":{},"kind":"function","signature":"(cursor: DataPoint, key: CursorKey, big: boolean, domain: CursorDomain, horizontal?: boolean) => DataPoint"},{"name":"nearestPoint","slug":"nearest-point","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/layout.ts","summary":"Index of the item closest to `(x, y)` within `radius` pixels, or null.\nLinear scan: distribution charts hold hundreds of marks, not millions.","tags":{},"kind":"function","signature":"(points: ReadonlyArray<{ x: number; y: number; r?: number; } | null>, x: number, y: number, radius?: number) => number | null"},{"name":"niceDomain","slug":"nice-domain","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"Widens `[min, max]` so both ends land on a tick. A flat domain gets some room.","tags":{},"kind":"function","signature":"(min: number, max: number, count?: number) => [number, number]"},{"name":"niceRadarMax","slug":"nice-radar-max","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/radar-chart/radar-chart.tsx","summary":"Rounds `value` up to a tidy multiple so `levels` rings land on round numbers.","tags":{},"kind":"function","signature":"(value: number, levels: number) => number"},{"name":"NO_FILTERS","slug":"no_filters","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"","tags":{},"kind":"constant","signature":"Readonly<Record<string, CrossfilterFilter>>"},{"name":"nodePath","slug":"node-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"\"Miraflores › Kevin\" relative to `from` (excluded).","tags":{},"kind":"function","signature":"(node: HierarchyNode, from?: HierarchyNode) => string"},{"name":"nodeTooltipRows","slug":"node-tooltip-rows","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"","tags":{},"kind":"function","signature":"(node: HierarchyNode, focus: HierarchyNode, format: ValueFormatter, labels: HierarchyLabels, color: string) => TooltipRow[]"},{"name":"nonWorkingSpans","slug":"non-working-spans","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Contiguous spans of non-working days inside the domain: days whose weekday\n(0 = Sunday) is not in `workingDays`, plus `holidays`.","tags":{},"kind":"function","signature":"(domain: readonly [number, number], workingDays: readonly number[], holidays?: ReadonlyArray<Date | number>) => Array<[number, number]>"},{"name":"normalize","slug":"normalize","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Clamped position of `value` in [min, max], 0-1.","tags":{},"kind":"function","signature":"(value: number, min: number, max: number) => number"},{"name":"normalizeAngle","slug":"normalize-angle","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Wraps any angle into [0, TAU).","tags":{},"kind":"function","signature":"(angle: number) => number"},{"name":"normalizeRotation","slug":"normalize-rotation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Keeps a rotation valid: longitude wrapped, latitude clamped.","tags":{},"kind":"function","signature":"(rotation: GlobeRotation) => GlobeRotation"},{"name":"normalPdf","slug":"normal-pdf","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Standard normal density scaled to `mean` and `sd`.","tags":{},"kind":"function","signature":"(x: number, m?: number, sd?: number) => number"},{"name":"packDots","slug":"pack-dots","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/dot-stack.ts","summary":"Dot-plot stack for one bin: dots fill rows from the baseline up, each row\ncentred in the lane. A row never exceeds the lane width.","tags":{},"kind":"function","signature":"(count: number, width: number, radius: number, gap?: number) => DotPosition[]"},{"name":"panelWidth","slug":"panel-width","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/chart-grid/grid-math.ts","summary":"Width of one panel for a container width and a column count.","tags":{},"kind":"function","signature":"(width: number, columns: number, gap?: number) => number"},{"name":"parliamentLayout","slug":"parliament-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Seats of a hemicycle. Rows are auto-computed for the seat count (or fixed\nwith `rows`), each row gets seats in proportion to its length, and the\nresult is sorted left to right so assigning groups in order draws wedges.","tags":{},"kind":"function","signature":"(total: number, { rows: fixedRows, innerRatio }?: { rows?: number; innerRatio?: number; }) => ParliamentLayout"},{"name":"parliamentRows","slug":"parliament-rows","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Fewest arcs that hold `seats` without crowding.","tags":{},"kind":"function","signature":"(seats: number, innerRatio?: number) => number"},{"name":"partitionLayout","slug":"partition-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Adjacency partition: every node gets a slice of its parent's span\nproportional to its value. The root spans [0, 1]. Depth is the other axis\n(rings in a sunburst, bands in an icicle).","tags":{},"kind":"function","signature":"(root: HierarchyNode) => Map<string, PartitionSpan>"},{"name":"PATTERN_NAMES","slug":"pattern_names","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/patterns.ts","summary":"","tags":{},"kind":"constant","signature":"readonly [\"stripes\", \"stripes-reverse\", \"dots\", \"crosshatch\", \"grid\", \"zigzag\", \"checks\", \"diamonds\", \"waves\"]"},{"name":"patternAt","slug":"pattern-at","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/patterns.ts","summary":"Cycles the built-in designs, handy for \"one pattern per series\" charts.","tags":{},"kind":"function","signature":"(index: number) => PatternName"},{"name":"patternFill","slug":"pattern-fill","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/patterns.ts","summary":"Paint value that fills a mark with the pattern of `id`.","tags":{},"kind":"function","signature":"(id: string) => string"},{"name":"patternId","slug":"pattern-id","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/patterns.ts","summary":"Id safe for `url(#id)`: letters, digits, dashes and underscores only.","tags":{},"kind":"function","signature":"(scope: string, key: string) => string"},{"name":"PERU_HEX_TILES","slug":"peru_hex_tiles","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/hex-tile-map/hex-layout.ts","summary":"Peru as 25 tiles (24 departments + Callao), north-west at the top left and the\nsouth-east at the bottom right, with the Pacific coast down the left edge.\nLima is the department; the metropolitan area of the choropleth map belongs to it.","tags":{},"kind":"constant","signature":"readonly HexTile[]"},{"name":"pickLabels","slug":"pick-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/waterfall-chart/waterfall-layout.ts","summary":"Which labels to draw: left to right, a label is kept unless it overlaps an\nalready kept one horizontally while sitting less than `lineHeight` away\nvertically. Labels wider than their bar still show whenever the neighbours\nare far enough above or below, or the gap between them is wide enough.","tags":{},"kind":"function","signature":"(boxes: readonly WaterfallLabelBox[], gap?: number, lineHeight?: number) => boolean[]"},{"name":"PICTOGRAM_SILHOUETTES","slug":"pictogram_silhouettes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-icons.ts","summary":"Human figures and everyday silhouettes for pictograms, in gallery order.","tags":{},"kind":"constant","signature":"readonly [\"person\", \"woman\", \"child\", \"heart\", \"tree\", \"house\", \"car\", \"star\", \"drop\", \"clock\", \"pin\"]"},{"name":"pixelToPlot","slug":"pixel-to-plot","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Data point under a plot-relative pixel, clamped to the plot box.","tags":{},"kind":"function","signature":"(plot: PlotAxes, pixel: PixelPoint) => DataPoint"},{"name":"plotDomain","slug":"plot-domain","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Visible data window of a plot, for the keyboard cursor.","tags":{},"kind":"function","signature":"(plot: PlotAxes) => CursorDomain"},{"name":"plotToPixel","slug":"plot-to-pixel","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Plot-relative pixel of a data point, whichever way the plot is laid out.","tags":{},"kind":"function","signature":"(plot: PlotAxes, point: DataPoint) => PixelPoint"},{"name":"pointScale","slug":"point-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/band.ts","summary":"","tags":{},"kind":"function","signature":"({ count, range, padding }: PointScaleOptions) => BandScale"},{"name":"polarPoint","slug":"polar-point","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Point at `radius` from (cx, cy) in the direction of `angle`.","tags":{},"kind":"function","signature":"(cx: number, cy: number, radius: number, angle: number) => Point"},{"name":"popUnits","slug":"pop-units","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-glyph.tsx","summary":"Pops every `[data-unit]` in document order: a short scale-and-fade with a\nstagger that keeps the whole sequence under about a second.","tags":{},"kind":"function","signature":"(root: Element, { duration, budget }?: { duration?: number | undefined; budget?: number | undefined; }) => void"},{"name":"positionsExtent","slug":"positions-extent","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/projection.ts","summary":"Extent of a set of positions: [west, south, east, north].","tags":{},"kind":"function","signature":"(positions: Iterable<Position>) => [number, number, number, number] | null"},{"name":"progressFractions","slug":"progress-fractions","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Fill of each of `count` units sharing `max`: a 4.5 rating out of 5 stars is\n`[1, 1, 1, 1, 0.5]`. The value is clamped to `[0, max]` and rounded to `step`.","tags":{},"kind":"function","signature":"(value: number, max: number, count: number, step?: number) => number[]"},{"name":"projectOrthographic","slug":"project-orthographic","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Orthographic projection of `[lon, lat]`, or `null` on the far side of the globe.","tags":{},"kind":"function","signature":"(position: Position, rotation: GlobeRotation, disc: GlobeDisc) => [number, number] | null"},{"name":"projectSpan","slug":"project-span","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Position of a span inside a view: x in 0-1 of the view (may fall outside), level relative to it.","tags":{},"kind":"function","signature":"(span: PartitionSpan, depth: number, view: PartitionView) => { x0: number; x1: number; level: number; }"},{"name":"quantile","slug":"quantile","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Quantile `p` of unsorted values.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>, p: number) => number"},{"name":"quantileSorted","slug":"quantile-sorted","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Quantile `p` (0-1) of an ascending array, interpolating linearly between the\ntwo closest ranks (the \"type 7\" definition used by most spreadsheets).","tags":{},"kind":"function","signature":"(sorted: readonly number[], p: number) => number"},{"name":"raceItems","slug":"race-items","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/bar-chart/bar-race.ts","summary":"State at a fractional frame `position`: values move linearly, ranks follow a\nsmoothstep so a bar glides into its new row instead of jumping.","tags":{},"kind":"function","signature":"(frames: readonly RaceFrame[], position: number) => RaceItem[]"},{"name":"radialEdgePath","slug":"radial-edge-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-radial.ts","summary":"Edge between two points of a radial layout. `curved` bends smoothly from the\nparent's ring to the child's, `step` leaves radially, runs along the middle\nring and enters radially, `straight` is a line.","tags":{},"kind":"function","signature":"(parent: { x: number; y: number; }, child: { x: number; y: number; }, center: { x: number; y: number; }, style?: TreeEdgeStyle) => string"},{"name":"radialTreeLayout","slug":"radial-tree-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-radial.ts","summary":"Radial tidy tree: the root sits in the centre, each level on its own ring,\nleaves share the angle evenly and every parent points at the middle of its\nleaves. Rings are pushed outwards until the boxes of a ring fit side by side.","tags":{},"kind":"function","signature":"(root: TreeLayoutInput, { levelGap, siblingGap, startAngle, sweep }?: RadialLayoutOptions) => TreeLayout"},{"name":"radToDeg","slug":"rad-to-deg","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"","tags":{},"kind":"function","signature":"(radians: number) => number"},{"name":"rangeColor","slug":"range-color","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Fill of a stepped range: its own `color`, a `tone` (its ink at 55% over the\nsurface, readable with ink text in both themes), or a step of the brand\nscale by position.","tags":{},"kind":"function","signature":"(range: ColorRange, index: number, count: number) => ColorStop"},{"name":"rangeIndex","slug":"range-index","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Index of the first range containing `value`, or -1.","tags":{},"kind":"function","signature":"(value: number, ranges: readonly ColorRange[]) => number"},{"name":"rangeOfBins","slug":"range-of-bins","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Interval covered by bins `from..to` (inclusive indices), as a range filter value.","tags":{},"kind":"function","signature":"(edges: readonly number[], from: number, to: number) => [number, number]"},{"name":"rangeWindow","slug":"range-window","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/time-range.ts","summary":"Inclusive index window `[from, last]` for a preset over ascending `dates`:\nthe first date on or after the last date minus the preset. Always spans at\nleast two points when the data has them.","tags":{},"kind":"function","signature":"(dates: ReadonlyArray<Date | number>, preset: Pick<TimeRangePreset, \"unit\" | \"count\">) => [number, number]"},{"name":"ranksOf","slug":"ranks-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/bar-chart/bar-race.ts","summary":"Rank of every value, 0 for the largest; ties keep the entity order.","tags":{},"kind":"function","signature":"(values: readonly number[]) => number[]"},{"name":"rebase","slug":"rebase","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Change relative to the value at `base` (0.1 = +10%), for comparing series\nthat live on different scales. Null when the base is missing or zero.","tags":{},"kind":"function","signature":"(values: IndicatorInput, base: number) => IndicatorSeries"},{"name":"rectRing","slug":"rect-ring","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"Rectangle as a clockwise polygon starting at the top-left corner:\ntop edge, right edge, bottom edge, left edge.","tags":{},"kind":"function","signature":"(x0: number, y0: number, x1: number, y1: number, samples?: number) => RingPoint[]"},{"name":"renko","slug":"renko","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-transforms.ts","summary":"Renko bricks from the closes. A brick is added every time the close moves a\nfull `brickSize` past the last brick's top (up) or bottom (down); a reversal\ntherefore needs one brick more than a continuation, which filters the noise.\nEach brick is a bar without wicks dated at the bar that completed it; the\nvolume of the bars in between goes to the first brick they produced.","tags":{},"kind":"function","signature":"(data: readonly StockBar[], brickSize?: number) => StockBar[]"},{"name":"resolveAxes","slug":"resolve-axes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/axis-stack.ts","summary":"Axes in drawing order. `yAxis` and `rightAxis` are sugar for the axes with\nid \"left\" and \"right\"; `extra` entries merge into those or add more axes\n(on the right unless they say otherwise). Axes no series uses are dropped,\nand the first remaining one is the primary axis (grid, zero line, bars).","tags":{},"kind":"function","signature":"(yAxis: ValueAxisOptions, rightAxis: ValueAxisOptions, extra: readonly CartesianAxisSpec[], used: ReadonlySet<string>) => ResolvedAxis[]"},{"name":"resolveAxisFormat","slug":"resolve-axis-format","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"Shorter variant for axis ticks: currency drops the cents and turns compact\nfrom ten thousand up (\"S/ 12 mil\"); plain numbers turn compact from 10 000.","tags":{},"kind":"function","signature":"(format: ValueFormat | undefined) => ValueFormatter"},{"name":"resolveDistributionLabels","slug":"resolve-distribution-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/labels.ts","summary":"","tags":{},"kind":"function","signature":"(labels?: Partial<DistributionLabels>) => DistributionLabels"},{"name":"resolveDrawingHeight","slug":"resolve-drawing-height","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/drawing-height.ts","summary":"Height of the drawing: the measured slot when filling, `width / aspectRatio`\nwhen a ratio is given, else the pixel height. Never below `min`.","tags":{},"kind":"function","signature":"(input: ResolveHeightInput, min?: number) => number"},{"name":"resolveFormat","slug":"resolve-format","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/format.ts","summary":"Turns a `ValueFormat` into a function. Undefined means plain numbers.","tags":{},"kind":"function","signature":"(format: ValueFormat | undefined) => ValueFormatter"},{"name":"resolveHeatmapLabels","slug":"resolve-heatmap-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/heatmap-chart/heatmap-grid.tsx","summary":"","tags":{},"kind":"function","signature":"(labels?: Partial<HeatmapLabels>) => HeatmapLabels"},{"name":"resolveHierarchyLabels","slug":"resolve-hierarchy-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"","tags":{},"kind":"function","signature":"(labels?: Partial<HierarchyLabels>) => HierarchyLabels"},{"name":"resolveLabels","slug":"resolve-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/types.ts","summary":"","tags":{},"kind":"function","signature":"(labels?: Partial<ChartLabels>) => ChartLabels"},{"name":"resolveMapLabels","slug":"resolve-map-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/map-labels.ts","summary":"","tags":{},"kind":"function","signature":"(labels?: Partial<MapLabels>) => MapLabels"},{"name":"resolvePattern","slug":"resolve-pattern","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/patterns.ts","summary":"The tile of a named design or of a custom pattern (custom tiles are clamped to a sane size).","tags":{},"kind":"function","signature":"(pattern: ChartPattern) => PatternTile"},{"name":"resolveRoutes","slug":"resolve-routes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/bubble-map/bubble-map.tsx","summary":"","tags":{},"kind":"function","signature":"(routes: readonly MapRoute[], points: readonly MapPoint[]) => ResolvedRoute[]"},{"name":"resolveUnitShape","slug":"resolve-unit-shape","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-icons.ts","summary":"","tags":{},"kind":"function","signature":"(icon: UnitIcon) => ResolvedUnitShape"},{"name":"revealClip","slug":"reveal-clip","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"Reveals children left to right by scaling a clip rectangle.","tags":{},"kind":"function","signature":"(element: Element, duration?: number, delay?: number) => void"},{"name":"revealPoint","slug":"reveal-point","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"Pans the view the least that brings the zoom 1 point (`x`, `y`) inside the viewport.","tags":{},"kind":"function","signature":"(view: MapView, x: number, y: number, width: number, height: number, margin?: number) => MapView"},{"name":"ribbonPath","slug":"ribbon-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/chord.ts","summary":"Closed ribbon between the two ends of a chord at `radius`: along the source\narc, a curve through the centre to the target arc, along it, and back. A\nchord from a group to itself is a single loop.","tags":{},"kind":"function","signature":"(chord: Chord, radius: number, cx?: number, cy?: number) => string"},{"name":"ringArea","slug":"ring-area","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/simplify.ts","summary":"Signed area of a ring (shoelace); positive when counter-clockwise in a y-up plane.","tags":{},"kind":"function","signature":"(ring: readonly PlanePoint[]) => number"},{"name":"ringCenter","slug":"ring-center","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"Mean of the polygon's points; for these convex-ish shapes it sits inside the shape.","tags":{},"kind":"function","signature":"(points: readonly RingPoint[]) => RingPoint"},{"name":"ringPath","slug":"ring-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"Closed SVG path through the points. Empty for fewer than three points.","tags":{},"kind":"function","signature":"(points: readonly RingPoint[]) => string"},{"name":"roundedPolyline","slug":"rounded-polyline","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"SVG path through orthogonal points with corners rounded by up to `radius`.","tags":{},"kind":"function","signature":"(points: readonly Point[], radius?: number) => string"},{"name":"roundedRectPath","slug":"rounded-rect-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Rectangle with an independent radius per corner, clamped to fit.","tags":{},"kind":"function","signature":"(x: number, y: number, width: number, height: number, radii: CornerRadii) => string"},{"name":"roundToStep","slug":"round-to-step","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Rounds to the nearest multiple of `step` (e.g. 0.5 for half stars). No step, no rounding.","tags":{},"kind":"function","signature":"(value: number, step?: number) => number"},{"name":"routeArcPath","slug":"route-arc-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/routes.ts","summary":"SVG path of a quadratic arc.","tags":{},"kind":"function","signature":"(a: readonly [number, number], b: readonly [number, number], bend?: number) => string"},{"name":"routeControl","slug":"route-control","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/routes.ts","summary":"Control point of a quadratic curve from `a` to `b`: the midpoint pushed sideways by `bend`\ntimes the distance (0 is a straight line, 0.25 a soft arch). With y pointing down a positive\n`bend` bulges to the left of the travel direction.","tags":{},"kind":"function","signature":"(a: readonly [number, number], b: readonly [number, number], bend?: number) => [number, number]"},{"name":"routeDependency","slug":"route-dependency","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Finish-to-start arrow from the end of a predecessor (`from`) to the start\nof its successor (`to`), with right angles only. When the successor starts\nfar enough to the right the link steps down once; otherwise it leaves to\nthe right, turns back along the row gutter and enters from the left.","tags":{},"kind":"function","signature":"(from: Point, to: Point, { gap, rowHeight }: RouteOptions) => Point[]"},{"name":"routePolylinePath","slug":"route-polyline-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/routes.ts","summary":"SVG path of a polyline given as separate pieces (`greatCircle` output once projected).","tags":{},"kind":"function","signature":"(pieces: ReadonlyArray<ReadonlyArray<readonly [number, number]>>) => string"},{"name":"rsi","slug":"rsi","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Relative strength index with Wilder smoothing: the first average gain and\nloss are plain means of `period` changes, later ones are\n`(previous * (period - 1) + current) / period`. 100 when there are no losses.","tags":{},"kind":"function","signature":"(values: IndicatorInput, period?: number) => IndicatorSeries"},{"name":"sankeyDiff","slug":"sankey-diff","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Merges the flows of two periods by `source -> target` (repeated pairs are\nsummed). A flow missing in a period counts as 0 there. The merged `value` is\nthe larger one, which is what the layout reserves; `before`/`after` are\nwhat is drawn on top of it.","tags":{},"kind":"function","signature":"(before: readonly SankeyLinkInput[], after: readonly SankeyLinkInput[]) => SankeyDiffLink[]"},{"name":"sankeyFlowOf","slug":"sankey-flow-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Ids of the links and nodes upstream and downstream of a node (the node included).","tags":{},"kind":"function","signature":"(node: SankeyNode) => { nodes: Set<string>; links: Set<string>; }"},{"name":"sankeyLayout","slug":"sankey-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Lays out a sankey diagram in a `width` x `height` box.","tags":{},"kind":"function","signature":"(nodesInput: readonly SankeyNodeInput[], linksInput: readonly SankeyLinkInput[], options: SankeyOptions) => SankeyGraph"},{"name":"sankeyLinkPath","slug":"sankey-link-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"Centre line of a link band, drawn with `stroke-width = link.width`.","tags":{},"kind":"function","signature":"(link: Pick<SankeyLink, \"source\" | \"target\" | \"y0\" | \"y1\">) => string"},{"name":"sankeyTraceOf","slug":"sankey-trace-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/sankey.ts","summary":"The path through a link: the link itself, everything that feeds its source\n(upstream) and everything its target feeds (downstream).","tags":{},"kind":"function","signature":"(link: SankeyLink) => { nodes: Set<string>; links: Set<string>; }"},{"name":"scaleGradient","slug":"scale-gradient","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"CSS gradient for a legend bar of a continuous scale.","tags":{},"kind":"function","signature":"(kind: \"sequential\" | \"diverging\", colors?: ScaleColors, direction?: string) => string"},{"name":"searchTree","slug":"search-tree","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Nodes whose name, subtitle or badge contains every word of `query`, in\npre-order (document order). An empty query matches nothing.","tags":{},"kind":"function","signature":"(model: TreeModel, query: string) => TreeChartNode[]"},{"name":"sectorPath","slug":"sector-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Annular sector (\"donut slice\") path. Angles in radians, 0 at twelve\no'clock, clockwise. `padAngle` trims both ends; a full turn draws a ring.","tags":{},"kind":"function","signature":"(cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, padAngle?: number) => string"},{"name":"sectorRing","slug":"sector-ring","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/shape-morph.ts","summary":"Annular sector as a polygon with the same edge order as `rectRing`: the\nouter arc plays the top edge, the end radius the right edge, the inner arc\nthe bottom edge and the start radius the left edge. Angles in radians, 0 at\ntwelve o'clock, clockwise.","tags":{},"kind":"function","signature":"(cx: number, cy: number, r0: number, r1: number, a0: number, a1: number, samples?: number) => RingPoint[]"},{"name":"seededRandom","slug":"seeded-random","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Deterministic pseudo-random numbers in [0, 1) (mulberry32), so jitter is stable across renders.","tags":{},"kind":"function","signature":"(seed: number) => () => number"},{"name":"segments","slug":"segments","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/path.ts","summary":"Splits a sequence at `null` gaps into drawable runs.","tags":{},"kind":"function","signature":"(points: ReadonlyArray<Point | null>) => Point[][]"},{"name":"selectRegions","slug":"select-regions","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/topojson.ts","summary":"A map restricted to some regions (by id), e.g. only Lima and Callao out of\nPeru. The projection is fitted to what is left, so the view zooms into it.\nArcs are shared, not copied.","tags":{},"kind":"function","signature":"(map: GeoMap, ids: readonly string[]) => GeoMap"},{"name":"sequentialColor","slug":"sequential-color","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Sequential scale: `mid` (empty) to `high`.","tags":{},"kind":"function","signature":"(value: number, [min, max]: readonly [number, number], colors?: ScaleColors) => ColorStop"},{"name":"serializeSvg","slug":"serialize-svg","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export.ts","summary":"Serializes one drawing, or several stacked vertically (e.g. a sticky header and its body).","tags":{},"kind":"function","signature":"(input: SVGSVGElement | readonly SVGSVGElement[], { background, gap, leading }?: SerializeOptions) => SerializedSvg"},{"name":"seriesColor","slug":"series-color","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Color for the series at `index`, unless the series brings its own.","tags":{},"kind":"function","signature":"(index: number, override?: string) => string"},{"name":"setRangeFilter","slug":"set-range-filter","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"","tags":{},"kind":"function","signature":"(filters: CrossfilterFilters, dimension: string, range: readonly [number, number] | null) => CrossfilterFilters"},{"name":"sharedDomain","slug":"shared-domain","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/chart-grid/grid-math.ts","summary":"One domain for every panel, so the same height means the same value everywhere.","tags":{},"kind":"function","signature":"(extents: ReadonlyArray<Extent | null | undefined>, { nice, includeZero, tickCount }?: SharedDomainOptions) => [number, number] | null"},{"name":"sharedSampleIndices","slug":"shared-sample-indices","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/downsample.ts","summary":"Indices to keep so several series that share one category axis stay aligned:\nthe union of the LTTB picks of each series (computed on its non-null values),\nplus the neighbours of every gap so a gap is never bridged. Ascending.\n`null` means the data is small enough and nothing should be dropped.","tags":{},"kind":"function","signature":"(series: ReadonlyArray<ReadonlyArray<number | null>>, threshold: number) => number[] | null"},{"name":"shareOf","slug":"share-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy-chart.tsx","summary":"","tags":{},"kind":"function","signature":"(node: HierarchyNode, of: HierarchyNode) => number"},{"name":"shiftDate","slug":"shift-date","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/time-range.ts","summary":"`date` moved back by `count` units, in local calendar time (months clamp to the last day).","tags":{},"kind":"function","signature":"(date: Date, unit: Exclude<TimeRangeUnit, \"all\">, count: number) => Date"},{"name":"shortMonth","slug":"short-month","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/time.ts","summary":"Short Spanish month without the period Intl appends (\"oct\", not \"oct.\").","tags":{},"kind":"function","signature":"(date: Date) => string"},{"name":"shortWeekday","slug":"short-weekday","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/time.ts","summary":"Short Spanish weekday without the trailing period (\"lun\").","tags":{},"kind":"function","signature":"(date: Date) => string"},{"name":"signed","slug":"signed","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"A signed number with its sign always shown: \"+4\", \"-2.5\", \"0\".","tags":{},"kind":"function","signature":"(value: number, format?: (value: number) => string) => string"},{"name":"silvermanBandwidth","slug":"silverman-bandwidth","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Silverman's rule of thumb for a Gaussian kernel:\n`0.9 · min(sd, IQR / 1.34) · n^(-1/5)`. Falls back to the other spread\nmeasure when one of them is zero, and to 1 for constant data.","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>) => number"},{"name":"simplifyLine","slug":"simplify-line","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/simplify.ts","summary":"Douglas-Peucker line simplification (iterative, so long coastlines cannot\noverflow the stack). The first and last points are always kept, which is\nwhat lets neighbouring regions keep sharing their borders: each shared arc\nis simplified once, with fixed ends. Points farther than `tolerance` from the\nsimplified line are never dropped.","tags":{},"kind":"function","signature":"<P extends PlanePoint>(points: readonly P[], tolerance: number) => P[]"},{"name":"sliceAngles","slug":"slice-angles","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Splits [startAngle, endAngle] proportionally to `values`. Non-finite and\nnon-positive values get a zero-width slice. A slice narrower than the gap\ncollapses onto its middle instead of inverting.","tags":{},"kind":"function","signature":"(values: readonly number[], options?: SliceOptions) => ArcSlice[]"},{"name":"slotAt","slug":"slot-at","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Index of the equal-width slot centred on `offset + i * TAU / count` that `angle` falls in.","tags":{},"kind":"function","signature":"(angle: number, count: number, offset?: number) => number"},{"name":"sma","slug":"sma","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Simple moving average over `period` points; null until a full window of numbers exists.","tags":{},"kind":"function","signature":"(values: IndicatorInput, period: number) => IndicatorSeries"},{"name":"smoothPath","slug":"smooth-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"SVG path through the points as a Catmull-Rom spline converted to cubic Béziers: smooth, passing\nthrough every point. One point becomes a dot, two a straight line.","tags":{},"kind":"function","signature":"(points: readonly PixelPoint[]) => string"},{"name":"smoothPoints","slug":"smooth-points","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Moving average over three points, `passes` times; the ends stay where the pen started and stopped.","tags":{},"kind":"function","signature":"<P extends PixelPoint>(points: readonly P[], passes?: number) => P[]"},{"name":"snapTime","slug":"snap-time","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Rounds `time` to the nearest hour (`step` under a day) or the nearest local midnight.","tags":{},"kind":"function","signature":"(time: number, step: number) => number"},{"name":"sortedFinite","slug":"sorted-finite","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Finite values, sorted ascending (a new array).","tags":{},"kind":"function","signature":"(values: Iterable<number | null | undefined>) => number[]"},{"name":"spinRotation","slug":"spin-rotation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Rotation after `seconds` of the idle spin at `speed` degrees per second (eastwards view drift).","tags":{},"kind":"function","signature":"(rotation: GlobeRotation, seconds: number, speed: number) => GlobeRotation"},{"name":"spreadLabels","slug":"spread-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"Vertical collision avoidance for a column of labels. Returns the adjusted\ncentres in the original order: labels are pushed down until they clear the\none above, then pushed back up from `max`, so nothing overlaps and the\ncolumn stays inside [min, max]. A column taller than the room keeps its\norder and starts at `min`.","tags":{},"kind":"function","signature":"(boxes: readonly LabelBox[], min: number, max: number, gap?: number) => number[]"},{"name":"spreadSlopeLabels","slug":"spread-slope-labels","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/slope-chart/label-layout.ts","summary":"Moves labels apart so neighbours keep at least `gap` pixels between their\ncenters, staying inside `[min, max]` and keeping their original order.\nOverlapping pairs are pushed apart symmetrically, so a cluster spreads\naround the center of mass instead of drifting down. When the labels cannot\nfit at all, they are spread evenly over the whole range.\n\nReturns positions in the same order as the input.","tags":{},"kind":"function","signature":"(positions: ReadonlyArray<number>, gap: number, min: number, max: number) => number[]"},{"name":"squarify","slug":"squarify","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Squarified treemap: splits `rect` into one rectangle per value, areas\nproportional to the values, keeping them as close to squares as possible.\nRows are laid along the shorter side and grow while the worst aspect ratio\nof the row improves. Pass values largest first for the best result; the\noutput keeps the input order. Zero values get an empty rectangle.","tags":{},"kind":"function","signature":"(values: readonly number[], rect: Rect) => Rect[]"},{"name":"stackAxes","slug":"stack-axes","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/axis-stack.ts","summary":"Margins and offsets for axes that stack outward from the plot on each side,\nin the order given. The left margin never drops below `minLeft`; with no\nright axis the right margin is `rightFallback` (room for the last x label).","tags":{},"kind":"function","signature":"(slots: readonly AxisSlot[], { minLeft, rightFallback }: { minLeft: number; rightFallback: number; }) => AxisStack"},{"name":"stackLayers","slug":"stack-layers","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/stack.ts","summary":"Stacks series on top of each other per index. Positive values grow up from\nzero, negative values grow down, so diverging data stays readable. In\n`percent` mode every index is normalised to a 0-1 share of its absolute total.","tags":{},"kind":"function","signature":"(series: ReadonlyArray<ReadonlyArray<number | null>>, mode: Exclude<StackMode, \"none\">) => StackLayer[]"},{"name":"stackLayout","slug":"stack-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/export.ts","summary":"Offsets of drawings stacked top to bottom, and the size of the whole stack.","tags":{},"kind":"function","signature":"(sizes: ReadonlyArray<{ width: number; height: number; }>, gap?: number) => { positions: Array<{ x: number; y: number; }>; width: number; height: number; }"},{"name":"standardDeviation","slug":"standard-deviation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Sample standard deviation (n - 1 in the denominator); 0 below two values.","tags":{},"kind":"function","signature":"(values: readonly number[]) => number"},{"name":"startCursor","slug":"start-cursor","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Where the crosshair appears when a plot is focused: the middle of the window.","tags":{},"kind":"function","signature":"(domain: CursorDomain) => DataPoint"},{"name":"startOf","slug":"start-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/gantt.ts","summary":"Start of the calendar unit holding `time`, in local time. Weeks start on Monday.","tags":{},"kind":"function","signature":"(time: number, unit: CalendarUnit) => number"},{"name":"stitchRing","slug":"stitch-ring","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/topojson.ts","summary":"Walks the arc list of one ring; `~i` is arc `i` backwards. Shared end points are not repeated.","tags":{},"kind":"function","signature":"(arcs: readonly Position[][], indices: readonly number[]) => Position[]"},{"name":"stockStats","slug":"stock-stats","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/stock-stats.ts","summary":"Summary numbers of a price series: returns, volatility, extremes and the\nmaximum drawdown. Returns `null` for an empty series. Pure and headless: it\ndoes not read the chart, so it works on the visible slice or on all the data.","tags":{},"kind":"function","signature":"(data: readonly StockBar[], periodsPerYear?: number) => StockStats | null"},{"name":"streamLayout","slug":"stream-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stream-graph/stream-layout.ts","summary":"Baseline-shifted stacking for stream graphs. Negative and missing values\ncount as zero. Offsets:\n- `zero`: ordinary stacked area from 0.\n- `silhouette`: centered, so the shape is symmetric around 0.\n- `wiggle`: baseline moves to minimize the slope of the streams (Byron and\n  Wattenberg), then the whole shape is re-centered around 0.\n- `expand`: shares of 100% from 0 to 1.","tags":{},"kind":"function","signature":"(series: ReadonlyArray<ReadonlyArray<number | null>>, offset?: StreamOffset, order?: StreamOrder) => StreamLayout"},{"name":"streamOrder","slug":"stream-order","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stream-graph/stream-layout.ts","summary":"Stacking order. `inside-out` puts the streams that peak earliest/latest on\nthe outside and the biggest in the middle, which keeps the silhouette calm;\n`ascending` puts the smallest total at the bottom.","tags":{},"kind":"function","signature":"(data: ReadonlyArray<ReadonlyArray<number>>, order: StreamOrder) => number[]"},{"name":"sturgesBinCount","slug":"sturges-bin-count","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/stats.ts","summary":"Sturges' rule: `ceil(log2 n) + 1` bins.","tags":{},"kind":"function","signature":"(count: number) => number"},{"name":"subtreeSize","slug":"subtree-size","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"Every node below `node`.","tags":{},"kind":"function","signature":"(node: TreeChartNode) => number"},{"name":"syncKeyOf","slug":"sync-key-of","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/sync-store.ts","summary":"","tags":{},"kind":"function","signature":"(value: XValue) => SyncKey"},{"name":"TAU","slug":"tau","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/polar.ts","summary":"","tags":{},"kind":"constant","signature":"number"},{"name":"thinPoints","slug":"thin-points","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/ink.ts","summary":"Drops points closer than `minDistance` to the previous kept one; the last point is always kept.","tags":{},"kind":"function","signature":"<P extends PixelPoint>(points: readonly P[], minDistance: number) => P[]"},{"name":"thinTicks","slug":"thin-ticks","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/axes.tsx","summary":"Drops labels that would collide, keeping an even rhythm (every 2nd, 3rd, ...)\nso the first label always stays.","tags":{},"kind":"function","signature":"(ticks: readonly AxisTick[], gap?: number) => AxisTick[]"},{"name":"tickStep","slug":"tick-step","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/linear.ts","summary":"Step between ticks: 1, 2 or 5 times a power of ten, close to `span / count`.","tags":{},"kind":"function","signature":"(min: number, max: number, count: number) => number"},{"name":"timeScale","slug":"time-scale","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/time.ts","summary":"","tags":{},"kind":"function","signature":"({ domain, range }: TimeScaleOptions) => TimeScale"},{"name":"timeTicks","slug":"time-ticks","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/scales/time.ts","summary":"Calendar-aligned ticks (local midnight, Mondays, first of the month, January)\nwith es-PE labels. Picks the finest interval that keeps at most `count` ticks.","tags":{},"kind":"function","signature":"(start: number, end: number, count?: number) => TimeTick[]"},{"name":"tint","slug":"tint","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/color-scale.ts","summary":"Mixes `percent`% of `color` into `base` (the surface by default).","tags":{},"kind":"function","signature":"(color: string, percent: number, base?: string) => string"},{"name":"toggleValue","slug":"toggle-value","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter-engine.ts","summary":"Adds the value to a set filter, or removes it; a set that becomes empty clears the dimension.","tags":{},"kind":"function","signature":"(filters: CrossfilterFilters, dimension: string, value: DimensionValue) => CrossfilterFilters"},{"name":"TONE_COLORS","slug":"tone_colors","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/palette.ts","summary":"Stroke/text color and soft fill for annotations and status marks.","tags":{},"kind":"constant","signature":"Record<ChartTone, { ink: string; soft: string; }>"},{"name":"tooltipFit","slug":"tooltip-fit","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/layout.ts","summary":"Keeps the tooltip inside narrow frames: below 480 px it flips at the middle\nand its width is capped to half the container (`cqw`, the chart frame is a\nsize container).","tags":{},"kind":"function","signature":"(width: number) => { containerWidth: number; className?: string; }"},{"name":"tooltipLeft","slug":"tooltip-left","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tooltip.tsx","summary":"Left edge of a tooltip `width` wide next to anchor `x`, kept inside `containerWidth`.","tags":{},"kind":"function","signature":"(x: number, width: number, containerWidth: number, side?: \"left\" | \"right\") => number"},{"name":"toPolar","slug":"to-polar","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-radial.ts","summary":"Angle (0 at twelve o'clock, clockwise) and distance of a point around `center`.","tags":{},"kind":"function","signature":"(point: { x: number; y: number; }, center: { x: number; y: number; }) => { angle: number; radius: number; }"},{"name":"topologyFeatures","slug":"topology-features","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/topojson.ts","summary":"Regions of a topology object as lon/lat features. Returns `[]` for an unknown object.","tags":{},"kind":"function","signature":"(topology: Topology, object: string) => GeoFeature[]"},{"name":"toScreen","slug":"to-screen","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"Screen position of a point drawn at zoom 1.","tags":{},"kind":"function","signature":"(view: MapView, x: number, y: number) => [number, number]"},{"name":"toVec","slug":"to-vec","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"`[lon, lat]` in degrees to a unit vector.","tags":{},"kind":"function","signature":"([lon, lat]: Position) => Vec3"},{"name":"toXY","slug":"to-xy","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/geometry.ts","summary":"`[value, cross]` to screen `x,y`, swapping axes for horizontal charts.","tags":{},"kind":"function","signature":"(horizontal: boolean, value: number, cross: number) => string"},{"name":"treeEdgePath","slug":"tree-edge-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-layout.ts","summary":"SVG path from a parent box to a child box. `curved` is a cubic S-curve,\n`step` an orthogonal elbow with rounded corners (`radius`), `straight` a line.","tags":{},"kind":"function","signature":"(parent: Box, child: Box, direction: TreeDirection, style?: TreeEdgeStyle, radius?: number) => string"},{"name":"treeKeyMove","slug":"tree-key-move","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-layout.ts","summary":"Maps an arrow key to a tree move relative to the drawing: in a top-down\nchart Down goes to the first child and Right to the next sibling; in a\nleft-to-right chart Right goes to the child and Down to the next sibling.","tags":{},"kind":"function","signature":"(key: string, direction: TreeDirection) => TreeMove | null"},{"name":"treeLayout","slug":"tree-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-layout.ts","summary":"Tidy layout of a tree: parents centred over their children, no two boxes\non the same level closer than `siblingGap`, levels `levelGap` apart. Boxes\nof one level share the same depth band (the tallest box of the level).","tags":{},"kind":"function","signature":"(root: TreeLayoutInput, options?: TreeLayoutOptions) => TreeLayout"},{"name":"treemapLayout","slug":"treemap-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/hierarchy.ts","summary":"Nested squarified layout of `root`'s subtree inside `rect`. Cells are\nreturned parents before children, so painting in order nests correctly.","tags":{},"kind":"function","signature":"(root: HierarchyNode, rect: Rect, { maxDepth, gap, padding, headerHeight, minGroupSize }?: TreemapOptions) => TreemapCell[]"},{"name":"treeNeighbor","slug":"tree-neighbor","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-layout.ts","summary":"Node reached from `id` by `move` among the laid-out (visible) nodes.\nSiblings stop at the ends; `child` goes to the middle child, which sits\nright under the parent. Returns `id` itself when there is nowhere to go.","tags":{},"kind":"function","signature":"(nodes: readonly Pick<TreeLayoutNode, \"id\" | \"parentId\">[], id: string, move: TreeMove) => string"},{"name":"treePathToRoot","slug":"tree-path-to-root","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/tree-layout.ts","summary":"Ids from the root down to `id` (inclusive), following `parentId`.","tags":{},"kind":"function","signature":"(nodes: readonly Pick<TreeLayoutNode, \"id\" | \"parentId\">[], id: string) => string[]"},{"name":"truncateLabel","slug":"truncate-label","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/layout.ts","summary":"Shortens `label` with an ellipsis so it fits `maxWidth` pixels at `fontSize`.","tags":{},"kind":"function","signature":"(label: string, maxWidth: number, fontSize?: number) => string"},{"name":"unionExtent","slug":"union-extent","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/chart-grid/grid-math.ts","summary":"Smallest range covering every extent; null when none is finite.","tags":{},"kind":"function","signature":"(extents: ReadonlyArray<Extent | null | undefined>) => [number, number] | null"},{"name":"UNIT_FRAME_CLASS","slug":"unit_frame_class","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-glyph.tsx","summary":"Unit charts make their frame a named container, so the HTML around the\ndrawing follows the chart width instead of the viewport.","tags":{},"kind":"constant","signature":"\"@container/units\""},{"name":"UNIT_ICONS","slug":"unit_icons","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-icons.ts","summary":"","tags":{},"kind":"constant","signature":"{ readonly person: { readonly path: \"M12 2.5a4 4 0 1 1 0 8a4 4 0 1 1 0-8zM4.5 21.5v-2.8c0-3.6 3.3-6.2 7.5-6.2s7.5 2.6 7.5 6.2v2.8z\"; readonly labelY: 17.5; }; r"},{"name":"UNIT_LEGEND_CLASS","slug":"unit_legend_class","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/unit-glyph.tsx","summary":"Legend under the drawing in narrow containers, at its requested place from `@sm` up.","tags":{},"kind":"constant","signature":"\"order-last @sm/units:order-none\""},{"name":"unitCount","slug":"unit-count","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"23 people at 5 per icon -> 4 full icons and a 0.6 icon.","tags":{},"kind":"function","signature":"(value: number, perUnit?: number) => UnitCount"},{"name":"unitFractions","slug":"unit-fractions","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Fill of every unit a value takes: `unitFractions(23, 5)` -> `[1, 1, 1, 1, 0.6]`.","tags":{},"kind":"function","signature":"(value: number, perUnit?: number) => number[]"},{"name":"useAnimatedNumber","slug":"use-animated-number","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"Eases a displayed number towards `target` (cubic ease-out). Starts from\n`from` on mount, then from wherever it currently is when `target` changes.\nReturns `target` at once under `prefers-reduced-motion` or `disabled`.","tags":{},"kind":"hook","signature":"(target: number, { from, duration, disabled, }?: { from?: number; duration?: number; disabled?: boolean; }) => number"},{"name":"useAnimatedView","slug":"use-animated-view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-drill.ts","summary":"Animates a partition view (the zoom window of a sunburst or icicle) towards\n`target` with `requestAnimationFrame`. Jumps straight there when disabled,\nunder `prefers-reduced-motion`, or on the server.","tags":{},"kind":"hook","signature":"(target: PartitionView, { disabled, duration }?: { disabled?: boolean; duration?: number; }) => PartitionView"},{"name":"useCategoryExplorer","slug":"use-category-explorer","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/category-explorer.tsx","summary":"Hover and keyboard cursor for charts whose marks belong to categories\n(units, cells, seats, rows). The pointer finds the category through the\nnearest `[data-category]` ancestor of the hovered mark, so no mark needs its\nown handlers; the keyboard moves between available categories.","tags":{},"kind":"hook","signature":"({ count, isAvailable, anchor, }: CategoryExplorerOptions) => CategoryExplorer"},{"name":"useChartInk","slug":"use-chart-ink","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/ink-layer.tsx","summary":"State and overlay of the ruler and freehand-ink tools. Marks are kept in data units, so they stay on\ntheir data when the chart is resized, and are drawn inside the chart SVG, so the existing SVG and PNG\nexport includes them. The ruler measures the distance between two points as Δx and Δy; the pen draws\na smoothed freehand path.","tags":{},"kind":"hook","signature":"({ color, tool: initialTool, labels: labelsProp, }?: UseChartInkOptions) => ChartInk"},{"name":"useChartSize","slug":"use-chart-size","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-chart-size.ts","summary":"Tracks the content box of an element with a ResizeObserver. Renders with\nthe fallback size on the server and until the first measurement.","tags":{},"kind":"hook","signature":"<T extends HTMLElement>(fallback?: ChartSize) => [RefObject<T | null>, ChartSize]"},{"name":"useChartSync","slug":"use-chart-sync","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/cartesian/sync.tsx","summary":"Subscribes to a sync channel; with no `syncId` it is inert and never re-renders.","tags":{},"kind":"hook","signature":"(syncId: string | undefined) => ChartSync"},{"name":"useChartWidth","slug":"use-chart-width","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-chart-size.ts","summary":"Width only (kept for charts that do not need the height).","tags":{},"kind":"hook","signature":"<T extends HTMLElement>(fallbackWidth?: number) => [RefObject<T | null>, number]"},{"name":"useCrossfilter","slug":"use-crossfilter","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/crossfilter/crossfilter.tsx","summary":"The shared dataset and filters of the nearest `CrossfilterProvider`.","tags":{},"kind":"hook","signature":"<T = unknown>() => CrossfilterApi<T>"},{"name":"useDistributionLegend","slug":"use-distribution-legend","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/use-legend.tsx","summary":"Colors, legend toggling and highlight for a list of series. The legend shows\nby default when there is more than one series; `legend` forces it on/off or\npicks its position. A top legend moves below the plot in frames narrower\nthan `@md` (the chart root must be an `@container`).","tags":{},"kind":"hook","signature":"<T extends LegendSource>(series: readonly T[], legend: boolean | \"top\" | \"bottom\" | undefined, shape?: LegendShape) => DistributionLegend<T>"},{"name":"useDrill","slug":"use-drill","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-drill.ts","summary":"Builds the hierarchy once per data set and keeps the focused (zoomed) node.\nDrilling into a leaf does nothing; a stale focus falls back to the root.","tags":{},"kind":"hook","signature":"(data: HierarchyDatum, sort?: boolean, onFocusChange?: (node: HierarchyNode) => void) => DrillState"},{"name":"useEntryAnimation","slug":"use-entry-animation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"Plays an entry animation once per `replayKey` with the Web Animations API.\n`play` receives the root element and starts whatever animations it needs.\nNothing runs under `prefers-reduced-motion`, on the server, or in browsers\nwithout `Element.animate`, so the static final state is always the default.","tags":{},"kind":"hook","signature":"<T extends Element>(ref: RefObject<T | null>, play: (root: T) => void, { disabled, replayKey }?: EntryAnimationOptions) => void"},{"name":"useIndexNavigation","slug":"use-index-navigation","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-index-navigation.ts","summary":"Active-item state for charts made of discrete items (slices, axes, stages).\nOne source of truth for pointer hover and keyboard focus, so the tooltip,\nthe highlight and `aria-valuetext` always agree. `ref` goes on the\npositioned container: `hover` stores the pointer relative to it.","tags":{},"kind":"hook","signature":"<T extends HTMLElement = HTMLDivElement>(count: number, { wrap }?: IndexNavigationOptions) => { ref: React.RefObject<T | null>; active: number | null; pointer: { x: number; y: number; } | null; setActive: React.Dispatch<React.SetStateAction<number | null>>; hover: (index: number, event: { clientX: number; clientY: number; }) => void; leave: () => void; sliderProps: { onKeyDown: (event: KeyboardEve"},{"name":"useIsomorphicLayoutEffect","slug":"use-isomorphic-layout-effect","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-chart-size.ts","summary":"Layout effect in the browser, plain effect on the server (no SSR warning).","tags":{},"kind":"hook","signature":"(effect: React.EffectCallback, deps?: React.DependencyList) => void"},{"name":"useMapGeometry","slug":"use-map-geometry","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/use-map-geometry.ts","summary":"Fits `map` into `width` x `height`. Recomputes paths only when the box, the\nmap or the projection changes, never on hover, zoom or pan (those only move\na transform).","tags":{},"kind":"hook","signature":"(map: GeoMap, width: number, height: number, { projection, padding }?: { projection?: ProjectionKind; padding?: number; }) => MapGeometry"},{"name":"useMapView","slug":"use-map-view","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/use-map-view.ts","summary":"Zoom and pan state of a map: wheel, drag, two-finger pinch, and imperative\n`zoomBy` / `fit` / `focusBox` for buttons, keyboard and cluster clicks. The\nview is always clamped so the map cannot be lost, and transitions are\ndriven in JS (not CSS) so every layer, including the screen-space bubbles\nand labels, moves in step. Instant under `prefers-reduced-motion`.","tags":{},"kind":"hook","signature":"<E extends Element>({ width, height, content, gestures, wheelZoom, minZoom, maxZoom, animate, }: UseMapViewOptions) => { ref: RefObject<E | null>; view: MapView; dragging: boolean; wasDragged: () => boolean; zoomBy: (factor: number, cx?: number, cy?: number) => void; fit: () => void; panBy: (dx: number, dy: number) => void; focusBox: (box: Bounds) => void; animateTo: (target: MapView) => void; can"},{"name":"usePanZoom","slug":"use-pan-zoom","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-pan-zoom.ts","summary":"Pan (drag), zoom (wheel, pinch, buttons) for an element that holds a\ntransformed stage. Pointer capture starts only once a drag passes a few\npixels, so clicks on content inside the stage still work; `wasDrag()` tells\na click handler to ignore the click that ends a drag.","tags":{},"kind":"hook","signature":"<T extends HTMLElement>({ minZoom, maxZoom, wheel, }?: UsePanZoomOptions) => { ref: React.RefObject<T | null>; view: PanZoomView; setView: (next: PanZoomView, { user }?: { user?: boolean; }) => void; zoomBy: (factor: number, around?: { x: number; y: number; }) => void; interacting: boolean; userMoved: React.RefObject<boolean>; wasDrag: () => boolean; handlers: { onPointerDown: (event: PointerEvent"},{"name":"useReducedMotion","slug":"use-reduced-motion","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/motion.ts","summary":"True when the user asked the OS for less motion. False on the server.","tags":{},"kind":"hook","signature":"() => boolean"},{"name":"useSeriesState","slug":"use-series-state","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-series-state.ts","summary":"Legend-driven visibility and highlight, shared by every chart type.","tags":{},"kind":"hook","signature":"(initialHidden?: readonly string[]) => SeriesState"},{"name":"useStockStream","slug":"use-stock-stream","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/stock-chart/use-stock-stream.ts","summary":"State for a live price series. `appendData` takes one bar or several: a bar\nwith the date of the last one replaces it (the candle still forming), a\nnewer one is appended. A StockChart whose window ends at the last bar\nfollows the new bars on its own.","tags":{},"kind":"hook","signature":"(initial: readonly StockBar[], options?: StockStreamOptions) => { data: readonly StockBar[]; appendData: (incoming: StockBar | readonly StockBar[]) => void; reset: (next: readonly StockBar[]) => void; }"},{"name":"viewFitting","slug":"view-fitting","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"View that frames a box given in zoom 1 pixels inside the viewport.","tags":{},"kind":"function","signature":"(box: Bounds, width: number, height: number, { padding, maxZoom }?: { padding?: number; maxZoom?: number; }) => MapView"},{"name":"viewMatrix","slug":"view-matrix","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Rows of the view basis: east, north and the direction towards the viewer at the rotation's\ncenter. Applying it to a world vector gives view coordinates (x right, y up, z towards the viewer).","tags":{},"kind":"function","signature":"({ lon, lat }: GlobeRotation) => Matrix"},{"name":"viewToScreen","slug":"view-to-screen","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"View coordinates to screen pixels (y grows downwards).","tags":{},"kind":"function","signature":"(v: Vec3, { cx, cy, radius }: GlobeDisc) => [number, number]"},{"name":"violinPath","slug":"violin-path","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/geometry.ts","summary":"Closed outline of a (half) violin from a density curve.","tags":{},"kind":"function","signature":"({ density: curve, map, center, halfWidth, maxDensity, horizontal, side, domain, }: ViolinPathInput) => string"},{"name":"visibleMax","slug":"visible-max","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/bar-chart/bar-race.ts","summary":"Largest value among the `limit` bars that are on screen at this moment.","tags":{},"kind":"function","signature":"(items: readonly RaceItem[], limit: number) => number"},{"name":"visibleTree","slug":"visible-tree","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/tree-chart/tree-model.ts","summary":"The part of the tree that is visible, as layout input.","tags":{},"kind":"function","signature":"(root: TreeChartNode, collapsed: ReadonlySet<string>, size: (node: TreeChartNode) => { width: number; height: number; }) => TreeLayoutInput"},{"name":"vwap","slug":"vwap","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/indicators.ts","summary":"Volume weighted average price anchored at `from`: running sum of the\ntypical price `(high + low + close) / 3` times volume, over the running\nvolume. Points before the anchor, or before any volume, are null.","tags":{},"kind":"function","signature":"(bars: readonly VolumeBar[], from?: number) => IndicatorSeries"},{"name":"waffleCounts","slug":"waffle-counts","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/units.ts","summary":"Cells per category in a waffle of `cells` cells. Without `total` the\ncategories fill the whole grid; with a `total` larger than their sum, the\nremainder stays empty (e.g. 62 of 100 chairs taken).","tags":{},"kind":"function","signature":"(values: readonly number[], cells: number, total?: number) => number[]"},{"name":"waterfallLayout","slug":"waterfall-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/waterfall-chart/waterfall-layout.ts","summary":"Running totals for a list of steps. Missing values count as 0.","tags":{},"kind":"function","signature":"(steps: ReadonlyArray<WaterfallStep>) => WaterfallLayout"},{"name":"wrapLon","slug":"wrap-lon","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/globe.ts","summary":"Longitude wrapped into [-180, 180).","tags":{},"kind":"function","signature":"(lon: number) => number"},{"name":"xyLayout","slug":"xy-layout","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/distribution/layout.ts","summary":"Two continuous axes (scatter, bubble, histogram). Pure.","tags":{},"kind":"function","signature":"(input: XYLayoutInput) => XYLayout"},{"name":"zoomAround","slug":"zoom-around","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/core/use-pan-zoom.ts","summary":"Scales `view` by `factor` keeping the screen point `px, py` fixed.","tags":{},"kind":"function","signature":"(view: PanZoomView, factor: number, px: number, py: number, minZoom: number, maxZoom: number) => PanZoomView"},{"name":"zoomAt","slug":"zoom-at","category":"charts","subpath":"charts","importPath":"@jcsoftdev/ui/charts","declarationFile":"charts/maps/geo/view.ts","summary":"Multiplies the zoom by `factor` keeping the screen point (`cx`, `cy`) fixed.","tags":{},"kind":"function","signature":"(view: MapView, factor: number, cx: number, cy: number, limits?: ViewLimits) => MapView"},{"name":"addChild","slug":"add-child","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"Adds `child` at the end of the group `groupId`.","tags":{},"kind":"function","signature":"(root: FilterGroup, groupId: string, child: FilterNode) => FilterGroup"},{"name":"aggregateValues","slug":"aggregate-values","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Aggregates numeric values; `count` counts non-empty values. Null when nothing to aggregate.","tags":{},"kind":"function","signature":"(values: readonly CellValue[], kind: AggregateKind) => number | null"},{"name":"ancestorsOf","slug":"ancestors-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/file-tree/model.ts","summary":"Ancestors of `id`, root first; empty when unknown.","tags":{},"kind":"function","signature":"(nodes: FileTreeNode[], id: string) => string[]"},{"name":"applyAdvancedFilter","slug":"apply-advanced-filter","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], node: FilterGroup | undefined) => T[]"},{"name":"BlockCache","slug":"block-cache","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/data-source.ts","summary":"Fixed-size blocks of rows fetched on demand. Loaded blocks beyond `maxBlocks` are evicted least\nrecently used first, never the ones in the range being shown.","tags":{},"kind":"class","signature":"typeof BlockCache"},{"name":"buildDisplayRows","slug":"build-display-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Flattens rows into what the grid renders: with `groupBy`, a group row per distinct value (by\nlevel, carrying the count and the column aggregates of all its rows) followed by its children\nunless its key is in `collapsed`. Groups follow the sort rule of their column, ascending\notherwise; rows keep the order they come in.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], groupBy: readonly string[], collapsed: ReadonlySet<string>, rowKey: (row: T) => string, sort?: readonly SortRule[]) => DisplayRow<T>[]"},{"name":"buildHeaderGroups","slug":"build-header-groups","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/column-groups.ts","summary":"One list of cells per header level, outermost first. Adjacent columns with the same path up to\na level share a cell; columns without a group at that level get blank cells. Spans never cross\na `breaks` index (pinned zone edges, where the table adds its filler cell).","tags":{},"kind":"function","signature":"(paths: readonly (readonly string[])[], breaks?: readonly number[]) => HeaderGroupCell[][]"},{"name":"buildPivot","slug":"build-pivot","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/pivot.ts","summary":"","tags":{},"kind":"function","signature":"<T>(data: readonly T[], columns: readonly DataGridColumn<T>[], config: PivotConfig) => PivotResult"},{"name":"buildSheet","slug":"build-sheet","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Finds every formula cell, links the dependency graph and evaluates the sheet.","tags":{},"kind":"function","signature":"(input: SheetInput) => FormulaSheet"},{"name":"buildTreeRows","slug":"build-tree-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/tree.ts","summary":"Depth-first flattening. Children keep the order of `rows` (sort before calling). A collapsed\nnode hides its subtree unless `forceExpand` is on. Parents carry the aggregates of every leaf\nbelow them. Cycles are cut where they close.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], options: TreeOptions<T> & { expanded: ReadonlySet<string>; forceExpand?: boolean; }) => TreeResult<T>"},{"name":"canRedo","slug":"can-redo","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"","tags":{},"kind":"function","signature":"(state: HistoryState<unknown>) => boolean"},{"name":"canUndo","slug":"can-undo","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"","tags":{},"kind":"function","signature":"(state: HistoryState<unknown>) => boolean"},{"name":"cellAddress","slug":"cell-address","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"`B3` for row 2, column 1 (0-based).","tags":{},"kind":"function","signature":"(r: number, c: number) => string"},{"name":"cellToNumber","slug":"cell-to-number","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Finite number of a numeric-like cell value (dates become their time), null otherwise.","tags":{},"kind":"function","signature":"(value: CellValue) => number | null"},{"name":"cellToTime","slug":"cell-to-time","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Epoch milliseconds of a date-like cell value, null when it is not one.","tags":{},"kind":"function","signature":"(value: CellValue) => number | null"},{"name":"checkedSetValues","slug":"checked-set-values","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Checked values of a set filter: every option while the filter is inactive.","tags":{},"kind":"function","signature":"(options: readonly string[], filter: FilterValue | undefined) => Set<string>"},{"name":"clampWidth","slug":"clamp-width","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(width: number, column: DataGridColumn<T>) => number"},{"name":"columnAlign","slug":"column-align","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => ColumnAlign"},{"name":"columnIndex","slug":"column-index","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"A -> 0, AA -> 26; -1 when the text is not a column label.","tags":{},"kind":"function","signature":"(label: string) => number"},{"name":"columnLabel","slug":"column-label","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"0 -> A, 25 -> Z, 26 -> AA.","tags":{},"kind":"function","signature":"(index: number) => string"},{"name":"commandSize","slug":"command-size","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"Number of cells or rows a command touches (for announcements).","tags":{},"kind":"function","signature":"<R>(command: HistoryCommand<R>) => number"},{"name":"compareValues","slug":"compare-values","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Ascending order; empty values always go last (callers keep them last in descending too).","tags":{},"kind":"function","signature":"(a: CellValue, b: CellValue) => number"},{"name":"computeAggregates","slug":"compute-aggregates","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[]) => Record<string, number | null>"},{"name":"computeVariableWindow","slug":"compute-variable-window","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"Windowing for rows of different heights (detail panels between data rows). Same contract as\n`computeVirtualWindow`, with `heights` instead of a fixed `rowHeight`.","tags":{},"kind":"function","signature":"(input: { heights: readonly number[]; viewportHeight: number; scrollTop: number; overscan?: number; }) => VariableWindow"},{"name":"computeVirtualWindow","slug":"compute-virtual-window","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"","tags":{},"kind":"function","signature":"({ count, rowHeight, viewportHeight, scrollTop, overscan, }: VirtualWindowInput) => VirtualWindow"},{"name":"countActiveFilters","slug":"count-active-filters","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"(filters: Filters) => number"},{"name":"countConditions","slug":"count-conditions","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"(node: FilterNode) => number"},{"name":"createHistory","slug":"create-history","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"","tags":{},"kind":"function","signature":"<R = unknown>(depth?: number) => HistoryState<R>"},{"name":"DEFAULT_DATA_GRID_LABELS","slug":"default_data_grid_labels","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/labels.ts","summary":"","tags":{},"kind":"constant","signature":"DataGridLabels"},{"name":"DEFAULT_HISTORY_DEPTH","slug":"default_history_depth","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"","tags":{},"kind":"constant","signature":"100"},{"name":"defaultWidth","slug":"default-width","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Starting width: the column's own or the type default, never narrower than its header. A user can still resize below it.","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => number"},{"name":"describeFilter","slug":"describe-filter","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"Readable summary, for example `(Barbero es Luis Y Total > 30)`.","tags":{},"kind":"function","signature":"<T>(node: FilterNode, columns: readonly DataGridColumn<T>[], words: { and: string; or: string; operators: Record<FilterOperator, string>; }) => string"},{"name":"dirtyCells","slug":"dirty-cells","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Cells that must be recalculated after `key` changes: itself and everything that reads it.","tags":{},"kind":"function","signature":"(sheet: Pick<FormulaSheet, \"dependents\">, key: number) => Set<number>"},{"name":"displayValue","slug":"display-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"The value a grid cell shows: formula results as plain values, errors as their code.","tags":{},"kind":"function","signature":"(sheet: FormulaSheet, r: number, c: number) => CellValue | undefined"},{"name":"distinctValues","slug":"distinct-values","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Distinct select-filter values of a column, sorted.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], column: DataGridColumn<T>) => string[]"},{"name":"downloadCSV","slug":"download-csv","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/data-grid.tsx","summary":"Starts a CSV download in the browser (no-op on the server).","tags":{},"kind":"function","signature":"(filename: string, csv: string) => void"},{"name":"downloadFile","slug":"download-file","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/data-grid.tsx","summary":"Starts a file download in the browser (no-op on the server).","tags":{},"kind":"function","signature":"(filename: string, data: BlobPart, type: string) => void"},{"name":"dropIndex","slug":"drop-index","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/kanban/model.ts","summary":"Insert index for a pointer at `y`, from the vertical midpoints of the cards left in a column.","tags":{},"kind":"function","signature":"(midpoints: number[], y: number) => number"},{"name":"emptyGroup","slug":"empty-group","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"(logic?: FilterLogic, id?: string) => FilterGroup"},{"name":"evaluateCondition","slug":"evaluate-condition","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(row: T, condition: FilterCondition, columns: readonly DataGridColumn<T>[]) => boolean"},{"name":"evaluateFormula","slug":"evaluate-formula","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Evaluates a parsed formula to a single value (a bare range is an error, like in a cell).","tags":{},"kind":"function","signature":"(ast: FormulaNode, ctx: EvalContext) => FormulaValue"},{"name":"evaluateNode","slug":"evaluate-node","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(row: T, node: FilterNode, columns: readonly DataGridColumn<T>[]) => boolean"},{"name":"extendRange","slug":"extend-range","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/range.ts","summary":"Moves the focus corner by `dr` / `dc` inside the limits (Shift + arrows).","tags":{},"kind":"function","signature":"(range: CellRange, dr: number, dc: number, limits: { minR: number; maxR: number; minC: number; maxC: number; }) => CellRange"},{"name":"fillColumnWidths","slug":"fill-column-widths","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Widths that fill `available` pixels: when the columns add up to less (`reserved` is the width of\nfixed extras such as the selection column), the leftover goes to the flexible columns in\nproportion to `growWeight`. Nothing shrinks below the current width, a column stops at its\n`maxWidth`, and a column the user resized (width other than `defaultWidth`) keeps its width.\nWithout flexible columns, or when the content is already wider, `widths` comes back unchanged.","tags":{},"kind":"function","signature":"<T>(columns: readonly DataGridColumn<T>[], widths: Readonly<Record<string, number>>, available: number, reserved?: number) => Record<string, number>"},{"name":"filterKindOf","slug":"filter-kind-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => FilterKind"},{"name":"filterRows","slug":"filter-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Keeps rows that pass every column filter and, when `search` is given, contain every word of\nit in some searchable column (raw or formatted text, accents ignored).","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], filters: Filters, search?: string) => T[]"},{"name":"flattenTree","slug":"flatten-tree","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/file-tree/model.ts","summary":"Rows currently visible, in display order, given the set of expanded folder ids.","tags":{},"kind":"function","signature":"(nodes: FileTreeNode[], expanded: ReadonlySet<string>) => FlatRow[]"},{"name":"folderIds","slug":"folder-ids","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/file-tree/model.ts","summary":"Ids of every folder (used to expand all by default).","tags":{},"kind":"function","signature":"(nodes: FileTreeNode[]) => string[]"},{"name":"formatAggregate","slug":"format-aggregate","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Formats an aggregate with the column formatter; counts are plain integers.","tags":{},"kind":"function","signature":"<T>(value: number | null, kind: AggregateKind, column: DataGridColumn<T>) => string"},{"name":"formatCellValue","slug":"format-cell-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(value: CellValue, column: DataGridColumn<T>) => string"},{"name":"FORMULA_FUNCTIONS","slug":"formula_functions","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Names of the functions a formula may call.","tags":{},"kind":"constant","signature":"readonly string[]"},{"name":"formulaError","slug":"formula-error","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"","tags":{},"kind":"function","signature":"(code: ErrorCode) => FormulaError"},{"name":"FormulaError","slug":"formula-error","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"","tags":{},"kind":"class","signature":"typeof FormulaError"},{"name":"formulaText","slug":"formula-text","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"","tags":{},"kind":"function","signature":"(value: FormulaValue) => string"},{"name":"getCellValue","slug":"get-cell-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(row: T, column: DataGridColumn<T>) => CellValue"},{"name":"gridToSheet","slug":"grid-to-sheet","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/xlsx-export.ts","summary":"Sheet with one column per grid column (header text, typed values) and one row per grid row.\nNumbers stay numbers, dates stay dates; pass the rows and columns as the CSV export does.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], name: string) => XlsxSheet"},{"name":"groupPathOf","slug":"group-path-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/column-groups.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => string[]"},{"name":"growWeight","slug":"grow-weight","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Share of the leftover width a column takes: `grow`, else 1 for text columns and 0 for the rest.","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => number"},{"name":"headerFitWidth","slug":"header-fit-width","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Width the uppercase header label needs next to its sort and menu buttons.","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => number"},{"name":"inRange","slug":"in-range","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/range.ts","summary":"","tags":{},"kind":"function","signature":"(range: CellRange | null, r: number, c: number) => boolean"},{"name":"insertDetailRows","slug":"insert-detail-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"Inserts a detail row after every data row whose key is in `expanded`.","tags":{},"kind":"function","signature":"<T>(rows: readonly DisplayRow<T>[], expanded: ReadonlySet<string>, heightOf: (row: T) => number) => DisplayRow<T>[]"},{"name":"invertCommand","slug":"invert-command","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"The command that cancels `command`.","tags":{},"kind":"function","signature":"<R>(command: HistoryCommand<R>) => HistoryCommand<R>"},{"name":"isConditionActive","slug":"is-condition-active","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"A condition counts once it has what its operator needs.","tags":{},"kind":"function","signature":"(condition: FilterCondition) => boolean"},{"name":"isErrorText","slug":"is-error-text","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Whether a displayed value is the text of a formula error.","tags":{},"kind":"function","signature":"(value: CellValue) => value is ErrorCode"},{"name":"isFilterActive","slug":"is-filter-active","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"(filter: FilterValue | undefined) => boolean"},{"name":"isFormulaError","slug":"is-formula-error","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"","tags":{},"kind":"function","signature":"(value: unknown) => value is FormulaError"},{"name":"isFormulaText","slug":"is-formula-text","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"","tags":{},"kind":"function","signature":"(value: unknown) => value is string"},{"name":"isNodeActive","slug":"is-node-active","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"Empty groups and incomplete conditions are ignored; a group with no active child matches all.","tags":{},"kind":"function","signature":"(node: FilterNode) => boolean"},{"name":"isNoop","slug":"is-noop","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"A command that changes nothing is not worth an undo step.","tags":{},"kind":"function","signature":"<R>(command: HistoryCommand<R>) => boolean"},{"name":"isoDayBounds","slug":"iso-day-bounds","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Epoch milliseconds of an ISO `yyyy-mm-dd` day, local midnight or the end of that day.","tags":{},"kind":"function","signature":"(iso: string, endOfDay: boolean) => number | null"},{"name":"isPivotValid","slug":"is-pivot-valid","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/pivot.ts","summary":"","tags":{},"kind":"function","signature":"<T>(config: PivotConfig | undefined, columns: readonly DataGridColumn<T>[]) => config is PivotConfig"},{"name":"keyboardDelta","slug":"keyboard-delta","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/resizable/model.ts","summary":"Keyboard step in percent for a separator key, or null when the key is not handled.","tags":{},"kind":"function","signature":"(key: string, orientation: \"horizontal\" | \"vertical\", shift?: boolean, step?: number) => number | null"},{"name":"keyboardTarget","slug":"keyboard-target","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/kanban/model.ts","summary":"Where a grabbed card goes for an arrow key: sideways keeps the row, vertical reorders.","tags":{},"kind":"function","signature":"(columns: KanbanColumnData[], cardId: string, key: KanbanKey) => { columnId: string; index: number; } | null"},{"name":"lineRootMargin","slug":"line-root-margin","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/scrolly/scrolly-logic.ts","summary":"The `rootMargin` that shrinks the observed area to a thin band at `offset`, to wake up when a step crosses the line.","tags":{},"kind":"function","signature":"(offset: number) => string"},{"name":"locateCard","slug":"locate-card","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/kanban/model.ts","summary":"","tags":{},"kind":"function","signature":"(columns: KanbanColumnData[], cardId: string) => { columnId: string; index: number; } | null"},{"name":"matchesFilter","slug":"matches-filter","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"<T>(value: CellValue, filter: FilterValue, column: DataGridColumn<T>) => boolean"},{"name":"MAX_COLUMN_WIDTH","slug":"max_column_width","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"constant","signature":"640"},{"name":"MIN_COLUMN_WIDTH","slug":"min_column_width","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"constant","signature":"60"},{"name":"moveCard","slug":"move-card","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/kanban/model.ts","summary":"Moves a card. `toIndex` is the position in the target column AFTER the card is removed from\nits origin, clamped to the column. Returns null when nothing changes (unknown ids, same spot,\nor a blocked drop), so callers can skip the update.","tags":{},"kind":"function","signature":"(columns: KanbanColumnData[], cardId: string, toColumnId: string, toIndex: number, options?: MoveOptions) => { columns: KanbanColumnData[]; move: KanbanMove; } | null"},{"name":"moveColumn","slug":"move-column","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Moves `id` one step (`delta` -1 / +1) in `order`.","tags":{},"kind":"function","signature":"(order: readonly string[], id: string, delta: number) => string[]"},{"name":"moveColumnTo","slug":"move-column-to","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Moves `id` before or after `targetId` (drag and drop).","tags":{},"kind":"function","signature":"(order: readonly string[], id: string, targetId: string, place: \"before\" | \"after\") => string[]"},{"name":"moveRowBy","slug":"move-row-by","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"Moves a row one step (keyboard).","tags":{},"kind":"function","signature":"(order: readonly string[], key: string, delta: number) => string[]"},{"name":"moveRowTo","slug":"move-row-to","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"Moves a row before or after another one (drag and drop).","tags":{},"kind":"function","signature":"(order: readonly string[], key: string, targetKey: string, place: \"before\" | \"after\") => string[]"},{"name":"nearestIndex","slug":"nearest-index","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/carousel/model.ts","summary":"Index of the slide whose left edge is closest to `scrollLeft`.","tags":{},"kind":"function","signature":"(scrollLeft: number, offsets: number[]) => number"},{"name":"newCondition","slug":"new-condition","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => FilterCondition"},{"name":"newFilterId","slug":"new-filter-id","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"(prefix?: string) => string"},{"name":"NO_PINNED_ROWS","slug":"no_pinned_rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"","tags":{},"kind":"constant","signature":"PinnedRows"},{"name":"normalizeSizes","slug":"normalize-sizes","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/resizable/model.ts","summary":"Initial layout in percent summing to 100. Panels without a default share what the others\nleave; then every panel is clamped to its constraint and the difference is spread over the\npanels that still have room.","tags":{},"kind":"function","signature":"(defaults: Array<number | undefined>, constraints: PanelConstraint[]) => number[]"},{"name":"normalizeText","slug":"normalize-text","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Lower case, without accents, so \"peluqueria\" finds \"Peluquería\".","tags":{},"kind":"function","signature":"(text: string) => string"},{"name":"operatorNeedsValue","slug":"operator-needs-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"(operator: FilterOperator) => boolean"},{"name":"operatorsFor","slug":"operators-for","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => FilterOperator[]"},{"name":"pageCount","slug":"page-count","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"","tags":{},"kind":"function","signature":"(total: number, pageSize: number) => number"},{"name":"pageStep","slug":"page-step","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"Rows that fit in the viewport: the PageUp/PageDown step.","tags":{},"kind":"function","signature":"(rowHeight: number, viewportHeight: number) => number"},{"name":"parseAddress","slug":"parse-address","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Reads `B3`, `$B$3` or `R3C2`; null for anything else.","tags":{},"kind":"function","signature":"(text: string) => CellRef | null"},{"name":"parseFormula","slug":"parse-formula","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Parses a formula; the leading `=` is optional. Syntax problems are reported, not thrown.","tags":{},"kind":"function","signature":"(text: string) => ParseResult"},{"name":"parseLooseNumber","slug":"parse-loose-number","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/grid-edit.ts","summary":"A number from pasted text such as `S/ 1,234.50`, `12,5` or `-3`: currency marks and spaces are\ndropped, a lone comma followed by one or two digits is a decimal comma, other commas group\nthousands. Null when no number can be read.","tags":{},"kind":"function","signature":"(text: string) => number | null"},{"name":"parseStoredLayout","slug":"parse-stored-layout","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"","tags":{},"kind":"function","signature":"(raw: string | null) => Partial<GridLayout> | null"},{"name":"parseTSV","slug":"parse-tsv","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/grid-edit.ts","summary":"Parses tab separated text (the clipboard format of spreadsheets): quoted fields may hold tabs,\nquotes (`\"\"`) and line breaks. One trailing line break is ignored.","tags":{},"kind":"function","signature":"(text: string) => string[][]"},{"name":"pickActiveStep","slug":"pick-active-step","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/scrolly/scrolly-logic.ts","summary":"The step a reader is on: the one that contains the trigger `line` (a y coordinate). In a gap\nbetween steps the previous one stays active; above the first step it is the first, below the\nlast one it is the last. `-1` only when there are no steps.","tags":{},"kind":"function","signature":"(rects: readonly StepRect[], line: number) => number"},{"name":"pinnedSideOf","slug":"pinned-side-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"","tags":{},"kind":"function","signature":"(pinned: PinnedRows, key: string) => RowPinSide | null"},{"name":"PIVOT_TOTAL_ID","slug":"pivot_total_id","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/pivot.ts","summary":"","tags":{},"kind":"constant","signature":"\"pivot:total\""},{"name":"pivotColumns","slug":"pivot-columns","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/pivot.ts","summary":"Grid columns of a pivot: one per row field, one per pivot key and a trailing total.","tags":{},"kind":"function","signature":"<T>(columns: readonly DataGridColumn<T>[], config: PivotConfig, result: PivotResult, totalHeader: string) => DataGridColumn<PivotRow>[]"},{"name":"pivotFooter","slug":"pivot-footer","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/pivot.ts","summary":"Footer values for the pivot columns (exact for every aggregate kind).","tags":{},"kind":"function","signature":"(result: PivotResult) => Record<string, number | null>"},{"name":"planFill","slug":"plan-fill","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/grid-edit.ts","summary":"Cells a fill writes and where each value comes from: `down` copies the first row, `right` the first column.","tags":{},"kind":"function","signature":"(bounds: { r0: number; r1: number; c0: number; c1: number; }, direction: FillDirection) => FillTarget[]"},{"name":"planPaste","slug":"plan-paste","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/grid-edit.ts","summary":"Cells a paste writes. A single value pasted over a larger selection fills it; otherwise the\nblock lands from the top-left corner and is cut at the grid limits.","tags":{},"kind":"function","signature":"(table: readonly (readonly string[])[], origin: { r: number; c: number; }, limits: { maxR: number; maxC: number; }, selection?: { r0: number; r1: number; c0: number; c1: number; } | null) => CellTarget[]"},{"name":"precedentsOf","slug":"precedents-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Cells the formula at (r, c) reads, as `[row, col]` pairs.","tags":{},"kind":"function","signature":"(sheet: FormulaSheet, r: number, c: number) => Array<[number, number]>"},{"name":"pushCommand","slug":"push-command","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"Records a command; the redo branch is dropped and the oldest commands past `depth` fall off.","tags":{},"kind":"function","signature":"<R>(state: HistoryState<R>, command: HistoryCommand<R>) => HistoryState<R>"},{"name":"rangeBetween","slug":"range-between","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Ids between `anchor` and `target` (inclusive) in display order; just `target` without anchor.","tags":{},"kind":"function","signature":"(ids: readonly string[], anchor: string | null, target: string) => string[]"},{"name":"rangeBounds","slug":"range-bounds","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/range.ts","summary":"","tags":{},"kind":"function","signature":"(range: CellRange) => RangeBounds"},{"name":"rangeStats","slug":"range-stats","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/range.ts","summary":"Count, sum, average, min and max of the numbers in a range (`undefined` skips the cell).","tags":{},"kind":"function","signature":"(bounds: RangeBounds, valueAt: (r: number, c: number) => CellValue | undefined) => RangeStats"},{"name":"rangeToTSV","slug":"range-to-tsv","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/range.ts","summary":"Tab separated text of a range. `textAt` returns null for cells that do not belong to the data\n(group rows, selection column); rows and columns made only of those are left out.","tags":{},"kind":"function","signature":"(bounds: RangeBounds, textAt: (r: number, c: number) => string | null) => string"},{"name":"rawToFormulaValue","slug":"raw-to-formula-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"A raw cell as a formula operand: dates are ISO text, anything unreadable is empty.","tags":{},"kind":"function","signature":"(value: CellValue) => FormulaValue"},{"name":"reconcileLayout","slug":"reconcile-layout","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Reconciles a stored layout with the current columns: unknown ids drop, new ones append.","tags":{},"kind":"function","signature":"<T>(columns: readonly DataGridColumn<T>[], stored: Partial<GridLayout> | null, fallback: GridLayout) => GridLayout"},{"name":"redoCommand","slug":"redo-command","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"Moves the last undone command back to the past; null when there is nothing to redo.","tags":{},"kind":"function","signature":"<R>(state: HistoryState<R>) => HistoryStep<R> | null"},{"name":"referencesOf","slug":"references-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Every cell a formula reads, ranges expanded; references and ranges outside the sheet are left out (they evaluate to #REF!).","tags":{},"kind":"function","signature":"(ast: FormulaNode, rows: number, cols: number) => number[]"},{"name":"removeNode","slug":"remove-node","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"Removes the node with `id`; the root itself stays.","tags":{},"kind":"function","signature":"(root: FilterGroup, id: string) => FilterGroup"},{"name":"resizePair","slug":"resize-pair","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/resizable/model.ts","summary":"Moves the boundary between panel `index` and `index + 1` by `delta` percent. The pair keeps\nits combined size and both panels stay inside their min/max; other panels are untouched.","tags":{},"kind":"function","signature":"(sizes: number[], constraints: PanelConstraint[], index: number, delta: number) => number[]"},{"name":"sameCellValue","slug":"same-cell-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/grid-edit.ts","summary":"Whether an edited value equals the previous one (numbers by identity, the rest by text).","tags":{},"kind":"function","signature":"(value: CellValue, previous: CellValue) => boolean"},{"name":"scrollLeftToReveal","slug":"scroll-left-to-reveal","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"Horizontal scroll that reveals a scrolling (unpinned) column at `[left, left + width)` without\nit hiding under the pinned columns of either edge.","tags":{},"kind":"function","signature":"(left: number, width: number, viewportWidth: number, scrollLeft: number, pinnedLeft: number, pinnedRight: number) => number"},{"name":"scrollTopToReveal","slug":"scroll-top-to-reveal","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"Scroll position that brings row `index` fully into view, moving as little as possible.","tags":{},"kind":"function","signature":"(index: number, rowHeight: number, viewportHeight: number, scrollTop: number) => number"},{"name":"scrollTopToRevealSpan","slug":"scroll-top-to-reveal-span","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/virtual.ts","summary":"Like `scrollTopToReveal` for a row at any `top` with any `height`, keeping it clear of rows that\nstay on screen on their own (pinned rows): `insetTop` / `insetBottom` px of the viewport.","tags":{},"kind":"function","signature":"(top: number, height: number, viewportHeight: number, scrollTop: number, insetTop?: number, insetBottom?: number) => number"},{"name":"searchOptions","slug":"search-options","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Options that contain the search text (accents and case ignored).","tags":{},"kind":"function","signature":"(options: readonly string[], query: string) => string[]"},{"name":"selectKey","slug":"select-key","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Value used by the select filter and by grouping: dates by day, booleans as Sí / No, the rest as text.","tags":{},"kind":"function","signature":"<T>(value: CellValue, column: DataGridColumn<T>) => string"},{"name":"SET_NONE","slug":"set_none","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Select-filter value that matches no row: \"nothing checked\" in a set filter.","tags":{},"kind":"constant","signature":"\"\\0none\""},{"name":"setHistoryDepth","slug":"set-history-depth","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"Shrinks (or grows) the depth, trimming the oldest commands.","tags":{},"kind":"function","signature":"<R>(state: HistoryState<R>, depth: number) => HistoryState<R>"},{"name":"sheetValue","slug":"sheet-value","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Result of a cell, formulas evaluated.","tags":{},"kind":"function","signature":"(sheet: FormulaSheet, r: number, c: number) => FormulaValue"},{"name":"shiftFormula","slug":"shift-formula","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula.ts","summary":"Moves the relative references of a formula by `dr` rows and `dc` columns, the way a spreadsheet\ndoes when a formula is filled down or right; `$` references stay. Text outside references is\nkept as typed. A reference pushed off the sheet becomes `#REF!`.","tags":{},"kind":"function","signature":"(text: string, dr: number, dc: number) => string"},{"name":"sortRows","slug":"sort-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Stable multi-column sort. Rules whose column is unknown are skipped.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], sort: readonly SortRule[]) => T[]"},{"name":"splitPinnedRows","slug":"split-pinned-rows","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"Pulls the pinned data rows out of the flat display list, in pin order. Ids that are no longer\nshown (filtered out, removed) are skipped.","tags":{},"kind":"function","signature":"<T>(display: readonly DisplayRow<T>[], pinned: PinnedRows) => { top: DisplayRow<T>[]; middle: DisplayRow<T>[]; bottom: DisplayRow<T>[]; }"},{"name":"stepIndex","slug":"step-index","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/carousel/model.ts","summary":"Next slide index; wraps when `loop`, otherwise stays at the ends.","tags":{},"kind":"function","signature":"(index: number, count: number, direction: 1 | -1, loop: boolean) => number"},{"name":"stepProgress","slug":"step-progress","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/scrolly/scrolly-logic.ts","summary":"Scroll progress through a step, 0 when its top meets the line and 1 when its bottom does.","tags":{},"kind":"function","signature":"(rect: StepRect, line: number) => number"},{"name":"summarizeHistory","slug":"summarize-history","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"","tags":{},"kind":"function","signature":"(state: HistoryState<unknown>) => HistorySummary"},{"name":"toCSV","slug":"to-csv","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"CSV with a header row. Numbers stay raw (`1234.5`), dates become `yyyy-mm-dd`, the rest uses\nthe column formatter. Fields with quotes, separators or line breaks are quoted.","tags":{},"kind":"function","signature":"<T>(rows: readonly T[], columns: readonly DataGridColumn<T>[], options?: CsvOptions) => string"},{"name":"togglePinnedRow","slug":"toggle-pinned-row","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"Pins `key` to `side`, or unpins it when it is already there. Moving sides keeps one entry.","tags":{},"kind":"function","signature":"(pinned: PinnedRows, key: string, side: RowPinSide) => PinnedRows"},{"name":"toggleSetMember","slug":"toggle-set-member","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/rows.ts","summary":"","tags":{},"kind":"function","signature":"(set: ReadonlySet<string>, key: string) => Set<string>"},{"name":"toggleSetValues","slug":"toggle-set-values","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Checks or unchecks `values` in a set filter and returns the new filter: `undefined` when every\noption ends up checked (no filtering), the `SET_NONE` marker when none is.","tags":{},"kind":"function","signature":"(options: readonly string[], filter: FilterValue | undefined, values: readonly string[], checked: boolean) => FilterValue | undefined"},{"name":"toggleSort","slug":"toggle-sort","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/model.ts","summary":"Header click: asc, then desc, then off. Without `additive` the column becomes the only rule;\nwith it (Shift) the column is added, flipped or removed keeping the other rules.","tags":{},"kind":"function","signature":"(sort: readonly SortRule[], id: string, additive: boolean) => SortRule[]"},{"name":"treeStep","slug":"tree-step","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/file-tree/model.ts","summary":"WAI-ARIA tree navigation: what a key does on the row `currentId`.","tags":{},"kind":"function","signature":"(rows: FlatRow[], currentId: string, key: TreeKey) => TreeStep"},{"name":"triggerLine","slug":"trigger-line","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/scrolly/scrolly-logic.ts","summary":"Viewport coordinate of the trigger line: `offset` is its fraction (0 top, 1 bottom) of the scroll area.","tags":{},"kind":"function","signature":"(areaTop: number, areaHeight: number, offset: number) => number"},{"name":"typeahead","slug":"typeahead","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/file-tree/model.ts","summary":"Next row whose name starts with `query`, searching after `currentId` and wrapping.","tags":{},"kind":"function","signature":"(rows: FlatRow[], currentId: string, query: string) => string | null"},{"name":"undoCommand","slug":"undo-command","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/history.ts","summary":"Moves the last command to the redo branch; null when there is nothing to undo.","tags":{},"kind":"function","signature":"<R>(state: HistoryState<R>) => HistoryStep<R> | null"},{"name":"updateCell","slug":"update-cell","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/formula-sheet.ts","summary":"Sets one cell and recalculates only what depends on it. Returns a new sheet; the previous one\nis left untouched.","tags":{},"kind":"function","signature":"(sheet: FormulaSheet, r: number, c: number, raw: CellValue, cache?: ParseCache) => FormulaSheet"},{"name":"updateNode","slug":"update-node","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"Replaces the node with `id` (immutably).","tags":{},"kind":"function","signature":"(root: FilterGroup, id: string, fn: (node: FilterNode) => FilterNode) => FilterGroup"},{"name":"valueKindOf","slug":"value-kind-of","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/filter-builder.ts","summary":"","tags":{},"kind":"function","signature":"<T>(column: DataGridColumn<T>) => ValueKind"},{"name":"wipStatus","slug":"wip-status","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/kanban/model.ts","summary":"","tags":{},"kind":"function","signature":"(count: number, limit?: number) => WipStatus"},{"name":"withAncestors","slug":"with-ancestors","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/tree.ts","summary":"Keeps `matches` plus every ancestor of a match, in the order of `all`, so a filtered tree\nstill shows the path to each hit.","tags":{},"kind":"function","signature":"<T>(all: readonly T[], matches: readonly T[], options: TreeOptions<T>) => T[]"},{"name":"xlsxFilename","slug":"xlsx-filename","category":"containers","subpath":"containers","importPath":"@jcsoftdev/ui/containers","declarationFile":"containers/data-grid/xlsx-export.ts","summary":"File name with the `.xlsx` extension.","tags":{},"kind":"function","signature":"(name: string) => string"},{"name":"clampValue","slug":"clamp-value","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"","tags":{},"kind":"function","signature":"(value: number, min: number, max: number) => number"},{"name":"EMOJI_CATEGORIES","slug":"emoji_categories","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/emoji-picker/emoji-data.ts","summary":"Small curated set, kept in its own module so apps that never open a picker do not ship it.","tags":{},"kind":"constant","signature":"EmojiCategory[]"},{"name":"gridMove","slug":"grid-move","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/emoji-picker/model.ts","summary":"Next index in a grid of `count` cells and `columns` columns for an arrow/Home/End key.\nVertical moves that would leave the grid stay in place; the last row may be short.","tags":{},"kind":"function","signature":"(key: string, index: number, columns: number, count: number) => number"},{"name":"keyboardValue","slug":"keyboard-value","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"Next value for a slider key, or null when the key is not handled.","tags":{},"kind":"function","signature":"(key: string, current: number, min: number, max: number, step: number, page: number) => number | null"},{"name":"nearestThumb","slug":"nearest-thumb","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"Thumb a pointer press should grab: the closest one; on a tie, the one the press is outside of.","tags":{},"kind":"function","signature":"(values: RangeValue, target: number) => 0 | 1"},{"name":"ratingFromPointer","slug":"rating-from-pointer","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/rating/model.ts","summary":"Rating under the pointer: the left half of a star counts as .5 when halves are allowed.","tags":{},"kind":"function","signature":"(index: number, offsetRatio: number, max: number, precision?: 0.5 | 1) => number"},{"name":"ratingKey","slug":"rating-key","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/rating/model.ts","summary":"Next rating for a keyboard key, or null when the key is not handled.","tags":{},"kind":"function","signature":"(key: string, current: number, max: number, precision?: 0.5 | 1) => number | null"},{"name":"ratioOf","slug":"ratio-of","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"Position of a value along the track, 0..1.","tags":{},"kind":"function","signature":"(value: number, min: number, max: number) => number"},{"name":"roundRating","slug":"round-rating","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/rating/model.ts","summary":"Rounds a value to the nearest `precision` (1 = whole stars, 0.5 = halves) inside [0, max].","tags":{},"kind":"function","signature":"(value: number, max: number, precision?: 0.5 | 1) => number"},{"name":"searchEmojis","slug":"search-emojis","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/emoji-picker/model.ts","summary":"Entries whose name contains every word of the query (accents and case ignored).","tags":{},"kind":"function","signature":"(categories: EmojiCategory[], query: string) => EmojiEntry[]"},{"name":"setRangeThumb","slug":"set-range-thumb","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"Moves one thumb of a range, never crossing the other one and keeping `minGap` between them.","tags":{},"kind":"function","signature":"(values: RangeValue, index: 0 | 1, next: number, min: number, max: number, step: number, minGap?: number) => RangeValue"},{"name":"snapToStep","slug":"snap-to-step","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"Snaps to the nearest multiple of `step` counted from `min` (or from 0 when `min` is not\nfinite), kept inside [min, max]. Either bound may be infinite.","tags":{},"kind":"function","signature":"(value: number, min: number, max: number, step: number) => number"},{"name":"starFill","slug":"star-fill","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/rating/model.ts","summary":"Fill of star `index` (0-based) for a rating: 0, 0.5 or 1.","tags":{},"kind":"function","signature":"(index: number, rating: number) => 0 | 0.5 | 1"},{"name":"valueFromRatio","slug":"value-from-ratio","category":"forms","subpath":"forms","importPath":"@jcsoftdev/ui/forms","declarationFile":"forms/slider/model.ts","summary":"","tags":{},"kind":"function","signature":"(ratio: number, min: number, max: number, step: number) => number"},{"name":"pickActive","slug":"pick-active","category":"navigation","subpath":"navigation","importPath":"@jcsoftdev/ui/navigation","declarationFile":"navigation/floating-toc/model.ts","summary":"Active section from the headings currently intersecting the observation band: the first\nvisible one in document order. When none is visible the previous active one stays, so the\nhighlight never blinks off between two headings.","tags":{},"kind":"function","signature":"(order: readonly string[], visible: ReadonlySet<string>, previous: string | null) => string | null"},{"name":"restoreFocusOnClose","slug":"restore-focus-on-close","category":"overlays","subpath":"overlays","importPath":"@jcsoftdev/ui/overlays","declarationFile":"overlays/focus-return/focus-return.tsx","summary":"Compose inside `onCloseAutoFocus` of a `*.Content`. Does nothing if the caller\nalready prevented the event, or if no previous focus was captured (the overlay\nwas opened by its own `Trigger`, which Radix restores by itself).","tags":{},"kind":"function","signature":"(event: AutoFocusEvent, focusRef: FocusRef | null) => void"},{"name":"useCapturePreviousFocus","slug":"use-capture-previous-focus","category":"overlays","subpath":"overlays","importPath":"@jcsoftdev/ui/overlays","declarationFile":"overlays/focus-return/focus-return.tsx","summary":"Radix can only return focus to the opener of a Dialog/Drawer when that opener\nis the component's own `Trigger`. Controlled overlays (`open`/`onOpenChange`\ndriven by a parent, no `Trigger`) would leave focus orphaned on `<body>`.\n\nThe active element is captured during RENDER, in the same commit where `open`\nflips to `true`, before Radix's inner focus scope moves focus into the content.","tags":{},"kind":"hook","signature":"(open: boolean | undefined) => FocusRef"},{"name":"usePreviousFocus","slug":"use-previous-focus","category":"overlays","subpath":"overlays","importPath":"@jcsoftdev/ui/overlays","declarationFile":"overlays/focus-return/focus-return.tsx","summary":"","tags":{},"kind":"hook","signature":"() => FocusRef | null"},{"name":"htmlToText","slug":"html-to-text","category":"rich-text","subpath":"rich-text","importPath":"@jcsoftdev/ui/rich-text","declarationFile":"rich-text/sanitize.ts","summary":"Plain text of sanitized HTML, used to detect an empty editor.","tags":{},"kind":"function","signature":"(html: string) => string"},{"name":"isSafeUrl","slug":"is-safe-url","category":"rich-text","subpath":"rich-text","importPath":"@jcsoftdev/ui/rich-text","declarationFile":"rich-text/sanitize.ts","summary":"True for http(s), mailto, tel and scheme-less (relative or fragment) URLs.","tags":{},"kind":"function","signature":"(raw: string) => boolean"},{"name":"richTextContentClass","slug":"rich-text-content-class","category":"rich-text","subpath":"rich-text","importPath":"@jcsoftdev/ui/rich-text","declarationFile":"rich-text/rich-text-editor.tsx","summary":"Typography for editor and read-only content; preflight resets lists and headings.","tags":{},"kind":"constant","signature":"\"text-body text-ink [&_a]:text-accent-ink [&_a]:underline [&_blockquote]:border-line-strong [&_blockquote]:border-l-2 [&_blockquote]:pl-3 [&_blockquote]:text-in"},{"name":"sanitizeHtml","slug":"sanitize-html","category":"rich-text","subpath":"rich-text","importPath":"@jcsoftdev/ui/rich-text","declarationFile":"rich-text/sanitize.ts","summary":"Returns safe, balanced HTML containing only the editor's vocabulary.","tags":{},"kind":"function","signature":"(input: string) => string"},{"name":"APP_SHELL_BREAKPOINT","slug":"app_shell_breakpoint","category":"shell","subpath":"shell","importPath":"@jcsoftdev/ui/shell","declarationFile":"shell/app-shell/app-shell.tsx","summary":"Container width (px) below which the shell is compact: the sidebar becomes a drawer.","tags":{},"kind":"constant","signature":"900"},{"name":"useAppShell","slug":"use-app-shell","category":"shell","subpath":"shell","importPath":"@jcsoftdev/ui/shell","declarationFile":"shell/app-shell/app-shell.tsx","summary":"`null` outside an `AppShell`; otherwise whether the shell is narrower than 900 px.","tags":{},"kind":"hook","signature":"() => AppShellState | null"},{"name":"cn","slug":"cn","category":"utils","subpath":"utils","importPath":"@jcsoftdev/ui/utils","declarationFile":"utils/cn.ts","summary":"Merge class names, resolving conflicting Tailwind utilities (last one wins).","tags":{},"kind":"function","signature":"(...inputs: ClassValue[]) => string"},{"name":"usePrefersReducedMotion","slug":"use-prefers-reduced-motion","category":"utils","subpath":"utils","importPath":"@jcsoftdev/ui/utils","declarationFile":"utils/reduced-motion.ts","summary":"True when the user asked the OS for reduced motion; false during SSR.","tags":{},"kind":"hook","signature":"() => boolean"},{"name":"buildXlsx","slug":"build-xlsx","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"Builds the bytes of an .xlsx file: workbook, one worksheet per sheet, shared strings, styles\n(bold header, number and date formats) and document properties.","tags":{},"kind":"function","signature":"(workbook: XlsxWorkbook) => Uint8Array"},{"name":"columnName","slug":"column-name","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"A, B, … Z, AA … for a 0-based column index.","tags":{},"kind":"function","signature":"(index: number) => string"},{"name":"crc32","slug":"crc32","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/crc32.ts","summary":"CRC-32 of `bytes`. Pass the result of a previous call as `previous` to checksum data in chunks.","tags":{},"kind":"function","signature":"(bytes: Uint8Array, previous?: number) => number"},{"name":"createZip","slug":"create-zip","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/zip.ts","summary":"Builds a ZIP archive holding `entries` uncompressed. Limited to 65535 entries and 4 GiB.","tags":{},"kind":"function","signature":"(entries: readonly ZipEntry[], options?: ZipOptions) => Uint8Array"},{"name":"dosDateTime","slug":"dos-date-time","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/zip.ts","summary":"MS-DOS date and time fields (local time, 2 second resolution, years 1980 to 2107).","tags":{},"kind":"function","signature":"(date: Date) => { time: number; date: number; }"},{"name":"escapeXml","slug":"escape-xml","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"Escapes text for an XML element or attribute and drops characters XML cannot hold.","tags":{},"kind":"function","signature":"(text: string) => string"},{"name":"excelSerial","slug":"excel-serial","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"Excel serial number of a local date and time (1900 date system).","tags":{},"kind":"function","signature":"(date: Date) => number"},{"name":"sheetName","slug":"sheet-name","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"Tab name Excel accepts: no `[]:*?/\\`, 1 to 31 characters, unique among `taken` (case-insensitive).","tags":{},"kind":"function","signature":"(name: string, taken?: ReadonlySet<string>) => string"},{"name":"XLSX_MIME","slug":"xlsx_mime","category":"xlsx","subpath":"xlsx","importPath":"@jcsoftdev/ui/xlsx","declarationFile":"xlsx/xlsx.ts","summary":"","tags":{},"kind":"constant","signature":"\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\""}]}