@mk-kit/mcp 0.52.1 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/data/api.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@mk-kit/ui",
3
- "version": "0.52.1",
3
+ "version": "0.54.0",
4
4
  "site": "https://mk-kit.dev",
5
5
  "entries": [
6
6
  {
@@ -13254,6 +13254,11 @@
13254
13254
  "signature": "(): void",
13255
13255
  "description": "Re-run the current request immediately (e.g. after a mutation). Flushes a\npending debounced filter, since the request reads the live filter value."
13256
13256
  },
13257
+ {
13258
+ "name": "reload",
13259
+ "signature": "(): void",
13260
+ "description": "Back to page 1 and load — the \"filters changed outside the search box\"\ncase. Unlike `setPage`, this loads even when already on page 1, so\ncallers no longer need `page() === 1 ? refresh() : setPage(1)`."
13261
+ },
13257
13262
  {
13258
13263
  "name": "connectSort",
13259
13264
  "signature": "(sort: MkSort): void",
@@ -13335,6 +13340,15 @@
13335
13340
  ],
13336
13341
  "docs": "/components/table#data-source"
13337
13342
  },
13343
+ {
13344
+ "name": "mkClientFetcher",
13345
+ "description": "In-memory `MkDataFetcher`: filter, sort and slice a full row set that\nthe app already holds (an API that returns everything). Lets a client-side\nlist use `MkTableDataSource` — same pager, footer and API as a\nserver-paged one — without hand-rolling `filtered/sorted/paged` computeds.\n\n```ts\nds = new MkTableDataSource(mkClientFetcher(() => this.rows()));\n```",
13346
+ "file": "projects/mk-kit/table/data-source.ts",
13347
+ "kind": "function",
13348
+ "signatures": [
13349
+ "<T>(rows: () => readonly T[], opts?: MkClientFetcherOptions<T>): (req: MkDataRequest) => Promise<MkDataPage<T>>"
13350
+ ]
13351
+ },
13338
13352
  {
13339
13353
  "name": "mkCompactFilters",
13340
13354
  "description": "Drop the empty entries of a filter map (`null` when nothing is left).",
@@ -13395,6 +13409,27 @@
13395
13409
  }
13396
13410
  ]
13397
13411
  },
13412
+ {
13413
+ "name": "MkClientFetcherOptions",
13414
+ "description": "Options for `mkClientFetcher`.",
13415
+ "file": "projects/mk-kit/table/data-source.ts",
13416
+ "kind": "interface",
13417
+ "typeParams": "<T>",
13418
+ "members": [
13419
+ {
13420
+ "name": "match",
13421
+ "type": "((row: T, query: string) => boolean) | undefined",
13422
+ "description": "Row matcher for `setFilter` text; default: case-insensitive substring over every string/number field.",
13423
+ "optional": true
13424
+ },
13425
+ {
13426
+ "name": "compare",
13427
+ "type": "((a: T, b: T, sort: MkSortState) => number) | undefined",
13428
+ "description": "Comparator for an active sort; default: locale compare on `row[sort.active]`.",
13429
+ "optional": true
13430
+ }
13431
+ ]
13432
+ },
13398
13433
  {
13399
13434
  "name": "MkColumnResize",
13400
13435
  "description": "Payload emitted by `MkTable.columnResize` after a column resize.",
@@ -13953,6 +13988,215 @@
13953
13988
  }
13954
13989
  ]
13955
13990
  },
13991
+ {
13992
+ "name": "status",
13993
+ "import": "@mk-kit/ui/status",
13994
+ "exports": [
13995
+ {
13996
+ "name": "MkBadge",
13997
+ "description": "Badge — a compact status pill, typically for counts or short state labels.\nSet `dot` for a minimal notification indicator with no text.\n\n```html\n<mk-badge tone=\"success\">Active</mk-badge>\n<mk-badge tone=\"danger\" variant=\"solid\">3</mk-badge>\n<mk-badge tone=\"danger\" dot aria-label=\"Unread messages\" />\n```",
13998
+ "file": "projects/mk-kit/status/badge/badge.ts",
13999
+ "kind": "component",
14000
+ "selector": "mk-badge",
14001
+ "selectors": [
14002
+ "mk-badge"
14003
+ ],
14004
+ "inputs": [
14005
+ {
14006
+ "name": "tone",
14007
+ "type": "MkTone",
14008
+ "description": "Semantic color tone.",
14009
+ "default": "'primary'"
14010
+ },
14011
+ {
14012
+ "name": "variant",
14013
+ "type": "MkBadgeVariant",
14014
+ "description": "Visual treatment.",
14015
+ "default": "'soft'"
14016
+ },
14017
+ {
14018
+ "name": "size",
14019
+ "type": "MkSize",
14020
+ "description": "Size scale.",
14021
+ "default": "'md'"
14022
+ },
14023
+ {
14024
+ "name": "dot",
14025
+ "type": "boolean",
14026
+ "description": "Render as a tiny dot (no text) for notification indicators.",
14027
+ "default": "false"
14028
+ }
14029
+ ],
14030
+ "outputs": [],
14031
+ "methods": [],
14032
+ "properties": [],
14033
+ "queries": [],
14034
+ "docs": "/components/badges-avatars"
14035
+ },
14036
+ {
14037
+ "name": "MkEmptyState",
14038
+ "description": "EmptyState — a centered placeholder for \"nothing here yet\" situations: empty\ntables, no search results, a fresh dashboard, a cleared inbox. Provide a\n`title` (and usually a `description`), an `icon` or projected media, and\ncall-to-action buttons via the actions slot.\n\nSlots: `[mkEmptyStateMedia]` (custom illustration, overrides `icon`), default\ncontent (extra body), `[mkEmptyStateActions]` (buttons).\n\n```html\n<mk-empty-state icon=\"search\" title=\"No results\"\n description=\"Try adjusting your filters.\">\n <button mkButton mkEmptyStateActions variant=\"outline\">Clear filters</button>\n</mk-empty-state>\n```",
14039
+ "file": "projects/mk-kit/status/empty-state/empty-state.ts",
14040
+ "kind": "component",
14041
+ "selector": "mk-empty-state",
14042
+ "selectors": [
14043
+ "mk-empty-state"
14044
+ ],
14045
+ "inputs": [
14046
+ {
14047
+ "name": "icon",
14048
+ "type": "string",
14049
+ "description": "Name of a registered icon shown above the title (ignored if media is projected).",
14050
+ "default": "''"
14051
+ },
14052
+ {
14053
+ "name": "title",
14054
+ "type": "string",
14055
+ "description": "Main heading, e.g. \"No invoices yet\".",
14056
+ "default": "''"
14057
+ },
14058
+ {
14059
+ "name": "description",
14060
+ "type": "string",
14061
+ "description": "Supporting sentence under the title.",
14062
+ "default": "''"
14063
+ },
14064
+ {
14065
+ "name": "size",
14066
+ "type": "MkSize",
14067
+ "description": "Overall scale of the block.",
14068
+ "default": "'md'"
14069
+ }
14070
+ ],
14071
+ "outputs": [],
14072
+ "methods": [],
14073
+ "properties": [],
14074
+ "queries": [],
14075
+ "docs": "/components/empty-timeline"
14076
+ },
14077
+ {
14078
+ "name": "MkSpinner",
14079
+ "description": "Spinner — a circular indeterminate loading indicator. Exposes `role=\"status\"`\nwith a visually-hidden label so assistive tech announces the loading state.\nThe animation slows under `prefers-reduced-motion`.\n\n```html\n<mk-spinner />\n<mk-spinner size=\"lg\" tone=\"neutral\" label=\"Fetching results\" />\n```",
14080
+ "file": "projects/mk-kit/status/spinner/spinner.ts",
14081
+ "kind": "component",
14082
+ "selector": "mk-spinner",
14083
+ "selectors": [
14084
+ "mk-spinner"
14085
+ ],
14086
+ "inputs": [
14087
+ {
14088
+ "name": "size",
14089
+ "type": "MkSize",
14090
+ "description": "Size scale.",
14091
+ "default": "'md'"
14092
+ },
14093
+ {
14094
+ "name": "tone",
14095
+ "type": "MkTone",
14096
+ "description": "Semantic color tone.",
14097
+ "default": "'primary'"
14098
+ },
14099
+ {
14100
+ "name": "label",
14101
+ "type": "string",
14102
+ "description": "Visually-hidden status label announced to screen readers.",
14103
+ "default": "this.i18n.loading"
14104
+ }
14105
+ ],
14106
+ "outputs": [],
14107
+ "methods": [],
14108
+ "properties": [],
14109
+ "queries": [],
14110
+ "docs": "/components/loading"
14111
+ },
14112
+ {
14113
+ "name": "MkBadgeOverlay",
14114
+ "description": "Badge overlay — anchors a small badge (count, dot or short text) to a corner\nof ANY element: an icon button, an avatar, a tab label. The host stays a\nsingle tab stop; the badge is a decorative, non-focusable child.\n\n- Numbers above `mkBadgeOverlayMax` (default 99) collapse to `99+`.\n- `mkBadgeOverlayDot` renders a textless dot (\"something is new\").\n- `mkBadgeOverlayAriaLabel` is the screen-reader text (\"3 unread\"). It is\n rendered in a visually hidden span and wired to the host with\n `aria-describedby`, so it is announced after the host's own name even\n when the host has an `aria-label`. When it is given, the visible badge is\n `aria-hidden` so the count is not read twice.\n- Positions use logical insets, so `top-end` sits at the top-right in LTR\n and the top-left in RTL.\n\nThe badge is painted with the global `.mk-badge-overlay` styles from\n`@mk-kit/ui/styles.css` and follows the `--mk-*` tone tokens.\n\n```html\n<button mkButton iconOnly aria-label=\"Notifications\"\n [mkBadgeOverlay]=\"unread()\" mkBadgeOverlayTone=\"danger\"\n [mkBadgeOverlayAriaLabel]=\"unread() + ' unread'\">\n <mk-icon name=\"bell\" />\n</button>\n\n<mk-avatar name=\"Ada Lovelace\" mkBadgeOverlay mkBadgeOverlayDot\n mkBadgeOverlayTone=\"success\" mkBadgeOverlayPosition=\"bottom-end\" />\n```",
14115
+ "file": "projects/mk-kit/status/badge/badge-overlay.ts",
14116
+ "kind": "directive",
14117
+ "selector": "[mkBadgeOverlay]",
14118
+ "selectors": [
14119
+ "mkBadgeOverlay"
14120
+ ],
14121
+ "inputs": [
14122
+ {
14123
+ "name": "mkBadgeOverlay",
14124
+ "type": "string | number | null | undefined",
14125
+ "description": "Badge content — a count or a short label. `null` / empty hides the badge\nunless `mkBadgeOverlayDot` is set. Numeric strings are treated as numbers\nso `mkBadgeOverlay=\"120\"` also collapses to `99+`.",
14126
+ "default": "null"
14127
+ },
14128
+ {
14129
+ "name": "mkBadgeOverlayPosition",
14130
+ "type": "MkBadgeOverlayPosition",
14131
+ "description": "Corner the badge is anchored to (logical: `end` flips in RTL).",
14132
+ "default": "'top-end'"
14133
+ },
14134
+ {
14135
+ "name": "mkBadgeOverlayTone",
14136
+ "type": "MkTone",
14137
+ "description": "Semantic color tone (same scale as `mk-badge`).",
14138
+ "default": "'primary'"
14139
+ },
14140
+ {
14141
+ "name": "mkBadgeOverlayDot",
14142
+ "type": "boolean",
14143
+ "description": "Render a textless dot instead of the content.",
14144
+ "default": "false"
14145
+ },
14146
+ {
14147
+ "name": "mkBadgeOverlayMax",
14148
+ "type": "number",
14149
+ "description": "Numbers above this render as `<max>+`. `0` disables the cap.",
14150
+ "default": "99"
14151
+ },
14152
+ {
14153
+ "name": "mkBadgeOverlayHidden",
14154
+ "type": "boolean",
14155
+ "description": "Hide the badge while keeping the directive (and its aria wiring) in place.",
14156
+ "default": "false"
14157
+ },
14158
+ {
14159
+ "name": "mkBadgeOverlayAriaLabel",
14160
+ "type": "string",
14161
+ "description": "Screen-reader text for the badge, e.g. `\"3 unread\"`. Announced as the\nhost's description; the visible badge becomes `aria-hidden`.",
14162
+ "default": "''"
14163
+ }
14164
+ ],
14165
+ "outputs": [],
14166
+ "methods": [],
14167
+ "properties": [
14168
+ {
14169
+ "name": "label",
14170
+ "type": "Signal<string>",
14171
+ "description": "The text painted in the badge (`''` in dot mode).",
14172
+ "readonly": true
14173
+ },
14174
+ {
14175
+ "name": "visible",
14176
+ "type": "Signal<boolean>",
14177
+ "description": "Whether the badge is currently rendered.",
14178
+ "readonly": true
14179
+ }
14180
+ ],
14181
+ "queries": [],
14182
+ "docs": "/components/badges-avatars"
14183
+ },
14184
+ {
14185
+ "name": "MkBadgeOverlayPosition",
14186
+ "description": "Corner of the host an `MkBadgeOverlay` is anchored to.",
14187
+ "file": "projects/mk-kit/status/badge/badge-overlay.ts",
14188
+ "kind": "type",
14189
+ "definition": "| 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'"
14190
+ },
14191
+ {
14192
+ "name": "MkBadgeVariant",
14193
+ "description": "Visual treatment for a `MkBadge`.",
14194
+ "file": "projects/mk-kit/status/badge/badge.ts",
14195
+ "kind": "type",
14196
+ "definition": "'solid' | 'soft' | 'outline'"
14197
+ }
14198
+ ]
14199
+ },
13956
14200
  {
13957
14201
  "name": "data",
13958
14202
  "import": "@mk-kit/ui/data",
@@ -14038,7 +14282,7 @@
14038
14282
  {
14039
14283
  "name": "MkBadge",
14040
14284
  "description": "Badge — a compact status pill, typically for counts or short state labels.\nSet `dot` for a minimal notification indicator with no text.\n\n```html\n<mk-badge tone=\"success\">Active</mk-badge>\n<mk-badge tone=\"danger\" variant=\"solid\">3</mk-badge>\n<mk-badge tone=\"danger\" dot aria-label=\"Unread messages\" />\n```",
14041
- "file": "projects/mk-kit/data/badge/badge.ts",
14285
+ "file": "projects/mk-kit/status/badge/badge.ts",
14042
14286
  "kind": "component",
14043
14287
  "selector": "mk-badge",
14044
14288
  "selectors": [
@@ -14741,7 +14985,7 @@
14741
14985
  {
14742
14986
  "name": "MkEmptyState",
14743
14987
  "description": "EmptyState — a centered placeholder for \"nothing here yet\" situations: empty\ntables, no search results, a fresh dashboard, a cleared inbox. Provide a\n`title` (and usually a `description`), an `icon` or projected media, and\ncall-to-action buttons via the actions slot.\n\nSlots: `[mkEmptyStateMedia]` (custom illustration, overrides `icon`), default\ncontent (extra body), `[mkEmptyStateActions]` (buttons).\n\n```html\n<mk-empty-state icon=\"search\" title=\"No results\"\n description=\"Try adjusting your filters.\">\n <button mkButton mkEmptyStateActions variant=\"outline\">Clear filters</button>\n</mk-empty-state>\n```",
14744
- "file": "projects/mk-kit/data/empty-state/empty-state.ts",
14988
+ "file": "projects/mk-kit/status/empty-state/empty-state.ts",
14745
14989
  "kind": "component",
14746
14990
  "selector": "mk-empty-state",
14747
14991
  "selectors": [
@@ -15123,48 +15367,6 @@
15123
15367
  "queries": [],
15124
15368
  "docs": "/components/data"
15125
15369
  },
15126
- {
15127
- "name": "MkKanban",
15128
- "description": "Kanban board — a horizontal row of columns whose cards can be dragged and\nreordered within a column or transferred between columns. Built on the dnd\ngroup's connected `[mkDropList]` / `[mkDrag]` directives, so it inherits both\npointer and keyboard dragging (WCAG 2.1.1) for free.\n\nBind `columns` two-way; the model is updated immutably on each drop. Project\nan `<ng-template>` to render custom card content — it receives the card as\n`$implicit` and the owning column as `column`:\n\n```html\n<mk-kanban [(columns)]=\"board\" (cardMoved)=\"onMoved($event)\">\n <ng-template #cardTemplate let-card let-column=\"column\">\n <strong>{{ card.title }}</strong>\n </ng-template>\n</mk-kanban>\n```",
15129
- "file": "projects/mk-kit/data/kanban/kanban.ts",
15130
- "kind": "component",
15131
- "selector": "mk-kanban",
15132
- "selectors": [
15133
- "mk-kanban"
15134
- ],
15135
- "inputs": [
15136
- {
15137
- "name": "columns",
15138
- "type": "MkKanbanColumn[]",
15139
- "description": "The board's columns and their cards (two-way). Updated on every drop.",
15140
- "model": true,
15141
- "default": "[]"
15142
- },
15143
- {
15144
- "name": "disabled",
15145
- "type": "boolean",
15146
- "description": "Disable all dragging on the board.",
15147
- "default": "false"
15148
- }
15149
- ],
15150
- "outputs": [
15151
- {
15152
- "name": "columnsChange",
15153
- "type": "MkKanbanColumn[]",
15154
- "description": "Emits when `columns` changes (two-way binding).",
15155
- "model": true
15156
- },
15157
- {
15158
- "name": "cardMoved",
15159
- "type": "MkKanbanCardMovedEvent",
15160
- "description": "Emitted after the model is updated when a card is moved."
15161
- }
15162
- ],
15163
- "methods": [],
15164
- "properties": [],
15165
- "queries": [],
15166
- "docs": "/components/data"
15167
- },
15168
15370
  {
15169
15371
  "name": "MkLineChart",
15170
15372
  "description": "LineChart — a line (or `area`) chart for change over time / ordered\ncategories, with one or more series. Dependency-free SVG on the validated\n`--mk-chart-*` palette; ships a legend for ≥ 2 series, a value axis, a\nhover crosshair with a shared tooltip, and a screen-reader data table.\n\n```html\n<mk-line-chart area\n [categories]=\"months\"\n [series]=\"[{ name: 'Sessions', data: sessions() }]\" />\n```",
@@ -16139,7 +16341,7 @@
16139
16341
  {
16140
16342
  "name": "MkSpinner",
16141
16343
  "description": "Spinner — a circular indeterminate loading indicator. Exposes `role=\"status\"`\nwith a visually-hidden label so assistive tech announces the loading state.\nThe animation slows under `prefers-reduced-motion`.\n\n```html\n<mk-spinner />\n<mk-spinner size=\"lg\" tone=\"neutral\" label=\"Fetching results\" />\n```",
16142
- "file": "projects/mk-kit/data/spinner/spinner.ts",
16344
+ "file": "projects/mk-kit/status/spinner/spinner.ts",
16143
16345
  "kind": "component",
16144
16346
  "selector": "mk-spinner",
16145
16347
  "selectors": [
@@ -16393,7 +16595,7 @@
16393
16595
  {
16394
16596
  "name": "MkBadgeOverlay",
16395
16597
  "description": "Badge overlay — anchors a small badge (count, dot or short text) to a corner\nof ANY element: an icon button, an avatar, a tab label. The host stays a\nsingle tab stop; the badge is a decorative, non-focusable child.\n\n- Numbers above `mkBadgeOverlayMax` (default 99) collapse to `99+`.\n- `mkBadgeOverlayDot` renders a textless dot (\"something is new\").\n- `mkBadgeOverlayAriaLabel` is the screen-reader text (\"3 unread\"). It is\n rendered in a visually hidden span and wired to the host with\n `aria-describedby`, so it is announced after the host's own name even\n when the host has an `aria-label`. When it is given, the visible badge is\n `aria-hidden` so the count is not read twice.\n- Positions use logical insets, so `top-end` sits at the top-right in LTR\n and the top-left in RTL.\n\nThe badge is painted with the global `.mk-badge-overlay` styles from\n`@mk-kit/ui/styles.css` and follows the `--mk-*` tone tokens.\n\n```html\n<button mkButton iconOnly aria-label=\"Notifications\"\n [mkBadgeOverlay]=\"unread()\" mkBadgeOverlayTone=\"danger\"\n [mkBadgeOverlayAriaLabel]=\"unread() + ' unread'\">\n <mk-icon name=\"bell\" />\n</button>\n\n<mk-avatar name=\"Ada Lovelace\" mkBadgeOverlay mkBadgeOverlayDot\n mkBadgeOverlayTone=\"success\" mkBadgeOverlayPosition=\"bottom-end\" />\n```",
16396
- "file": "projects/mk-kit/data/badge/badge-overlay.ts",
16598
+ "file": "projects/mk-kit/status/badge/badge-overlay.ts",
16397
16599
  "kind": "directive",
16398
16600
  "selector": "[mkBadgeOverlay]",
16399
16601
  "selectors": [
@@ -17058,80 +17260,6 @@
17058
17260
  }
17059
17261
  ]
17060
17262
  },
17061
- {
17062
- "name": "MkKanbanCard",
17063
- "description": "A single draggable card on a `MkKanban` board.",
17064
- "file": "projects/mk-kit/data/kanban/kanban.ts",
17065
- "kind": "interface",
17066
- "members": [
17067
- {
17068
- "name": "id",
17069
- "type": "unknown",
17070
- "description": "Stable identity used for tracking and move events."
17071
- },
17072
- {
17073
- "name": "title",
17074
- "type": "string",
17075
- "description": "Text shown by the default card renderer."
17076
- }
17077
- ]
17078
- },
17079
- {
17080
- "name": "MkKanbanCardMovedEvent",
17081
- "description": "Emitted by `MkKanban` after a card has been moved (between or within\ncolumns) and the two-way `columns` model has been updated.",
17082
- "file": "projects/mk-kit/data/kanban/kanban.ts",
17083
- "kind": "interface",
17084
- "members": [
17085
- {
17086
- "name": "card",
17087
- "type": "MkKanbanCard",
17088
- "description": "The card that was moved."
17089
- },
17090
- {
17091
- "name": "from",
17092
- "type": "unknown",
17093
- "description": "`id` of the column the card came from."
17094
- },
17095
- {
17096
- "name": "to",
17097
- "type": "unknown",
17098
- "description": "`id` of the column the card was dropped into."
17099
- },
17100
- {
17101
- "name": "fromIndex",
17102
- "type": "number",
17103
- "description": "The card's index within the source column before the move."
17104
- },
17105
- {
17106
- "name": "toIndex",
17107
- "type": "number",
17108
- "description": "The card's index within the destination column after the move."
17109
- }
17110
- ]
17111
- },
17112
- {
17113
- "name": "MkKanbanColumn",
17114
- "description": "A column (bucket) of `MkKanbanCard`s on a `MkKanban` board.",
17115
- "file": "projects/mk-kit/data/kanban/kanban.ts",
17116
- "kind": "interface",
17117
- "members": [
17118
- {
17119
- "name": "id",
17120
- "type": "unknown",
17121
- "description": "Stable identity used for tracking and move events."
17122
- },
17123
- {
17124
- "name": "title",
17125
- "type": "string",
17126
- "description": "Heading shown in the column header and used as its aria-label."
17127
- },
17128
- {
17129
- "name": "cards",
17130
- "type": "MkKanbanCard[]",
17131
- "description": "The ordered cards contained in this column."
17132
- }
17133
- ]
17134
- },
17135
17263
  {
17136
17264
  "name": "MkLogToken",
17137
17265
  "description": "One render token of a log line: a styled run, optionally a search match.",
@@ -17504,14 +17632,14 @@
17504
17632
  {
17505
17633
  "name": "MkBadgeOverlayPosition",
17506
17634
  "description": "Corner of the host an `MkBadgeOverlay` is anchored to.",
17507
- "file": "projects/mk-kit/data/badge/badge-overlay.ts",
17635
+ "file": "projects/mk-kit/status/badge/badge-overlay.ts",
17508
17636
  "kind": "type",
17509
17637
  "definition": "| 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'"
17510
17638
  },
17511
17639
  {
17512
17640
  "name": "MkBadgeVariant",
17513
17641
  "description": "Visual treatment for a `MkBadge`.",
17514
- "file": "projects/mk-kit/data/badge/badge.ts",
17642
+ "file": "projects/mk-kit/status/badge/badge.ts",
17515
17643
  "kind": "type",
17516
17644
  "definition": "'solid' | 'soft' | 'outline'"
17517
17645
  },
@@ -17658,6 +17786,196 @@
17658
17786
  }
17659
17787
  ]
17660
17788
  },
17789
+ {
17790
+ "name": "kanban",
17791
+ "import": "@mk-kit/ui/kanban",
17792
+ "exports": [
17793
+ {
17794
+ "name": "MkKanban",
17795
+ "description": "Kanban board — a horizontal row of columns whose cards can be dragged and\nreordered within a column or transferred between columns. Built on the dnd\ngroup's connected `[mkDropList]` / `[mkDrag]` directives, so it inherits both\npointer and keyboard dragging (WCAG 2.1.1) for free.\n\nBind `columns` two-way; the model is updated immutably on each drop. Project\nan `<ng-template>` to render custom card content — it receives the card as\n`$implicit` and the owning column as `column`. Column headers and footers\ntake their own templates (`mkKanbanColumnHeader` / `mkKanbanColumnFooter`,\ncontext `{ $implicit: column, index, count }`):\n\n```html\n<mk-kanban [(columns)]=\"board\" (cardMoved)=\"onMoved($event)\">\n <ng-template mkKanbanColumnHeader let-column let-count=\"count\">\n <strong>{{ column.title }}</strong> {{ count }}\n <button (click)=\"rename(column)\">Rename</button>\n </ng-template>\n <ng-template mkKanbanCard let-card let-column=\"column\">\n <strong>{{ card.title }}</strong>\n </ng-template>\n <ng-template mkKanbanColumnFooter let-column>\n <button (click)=\"add(column)\">+ Card</button>\n </ng-template>\n</mk-kanban>\n```",
17796
+ "file": "projects/mk-kit/kanban/kanban.ts",
17797
+ "kind": "component",
17798
+ "selector": "mk-kanban",
17799
+ "selectors": [
17800
+ "mk-kanban"
17801
+ ],
17802
+ "inputs": [
17803
+ {
17804
+ "name": "columns",
17805
+ "type": "MkKanbanColumn[]",
17806
+ "description": "The board's columns and their cards (two-way). Updated on every drop.",
17807
+ "model": true,
17808
+ "default": "[]"
17809
+ },
17810
+ {
17811
+ "name": "disabled",
17812
+ "type": "boolean",
17813
+ "description": "Disable all dragging on the board.",
17814
+ "default": "false"
17815
+ }
17816
+ ],
17817
+ "outputs": [
17818
+ {
17819
+ "name": "columnsChange",
17820
+ "type": "MkKanbanColumn[]",
17821
+ "description": "Emits when `columns` changes (two-way binding).",
17822
+ "model": true
17823
+ },
17824
+ {
17825
+ "name": "cardMoved",
17826
+ "type": "MkKanbanCardMovedEvent",
17827
+ "description": "Emitted after the model is updated when a card is moved."
17828
+ }
17829
+ ],
17830
+ "methods": [],
17831
+ "properties": [],
17832
+ "queries": [],
17833
+ "docs": "/components/data"
17834
+ },
17835
+ {
17836
+ "name": "MkKanbanCardDef",
17837
+ "description": "Marks the projected card renderer explicitly:\n`<ng-template mkKanbanCard let-card let-column=\"column\">`. Without it the\nfirst plain `<ng-template>` inside `<mk-kanban>` is used, as before 0.54.",
17838
+ "file": "projects/mk-kit/kanban/kanban.ts",
17839
+ "kind": "directive",
17840
+ "selector": "ng-template[mkKanbanCard]",
17841
+ "selectors": [
17842
+ "mkKanbanCard"
17843
+ ],
17844
+ "inputs": [],
17845
+ "outputs": [],
17846
+ "methods": [],
17847
+ "properties": [],
17848
+ "queries": []
17849
+ },
17850
+ {
17851
+ "name": "MkKanbanColumnFooterDef",
17852
+ "description": "Rendered under each column's card list — a \"quick add\" input, say:\n`<ng-template mkKanbanColumnFooter let-column>`.",
17853
+ "file": "projects/mk-kit/kanban/kanban.ts",
17854
+ "kind": "directive",
17855
+ "selector": "ng-template[mkKanbanColumnFooter]",
17856
+ "selectors": [
17857
+ "mkKanbanColumnFooter"
17858
+ ],
17859
+ "inputs": [],
17860
+ "outputs": [],
17861
+ "methods": [],
17862
+ "properties": [],
17863
+ "queries": []
17864
+ },
17865
+ {
17866
+ "name": "MkKanbanColumnHeaderDef",
17867
+ "description": "Replaces the default column header (title + count):\n`<ng-template mkKanbanColumnHeader let-column let-count=\"count\">`.",
17868
+ "file": "projects/mk-kit/kanban/kanban.ts",
17869
+ "kind": "directive",
17870
+ "selector": "ng-template[mkKanbanColumnHeader]",
17871
+ "selectors": [
17872
+ "mkKanbanColumnHeader"
17873
+ ],
17874
+ "inputs": [],
17875
+ "outputs": [],
17876
+ "methods": [],
17877
+ "properties": [],
17878
+ "queries": []
17879
+ },
17880
+ {
17881
+ "name": "MkKanbanCard",
17882
+ "description": "A single draggable card on a `MkKanban` board.",
17883
+ "file": "projects/mk-kit/kanban/kanban.ts",
17884
+ "kind": "interface",
17885
+ "members": [
17886
+ {
17887
+ "name": "id",
17888
+ "type": "unknown",
17889
+ "description": "Stable identity used for tracking and move events."
17890
+ },
17891
+ {
17892
+ "name": "title",
17893
+ "type": "string",
17894
+ "description": "Text shown by the default card renderer."
17895
+ }
17896
+ ]
17897
+ },
17898
+ {
17899
+ "name": "MkKanbanCardMovedEvent",
17900
+ "description": "Emitted by `MkKanban` after a card has been moved (between or within\ncolumns) and the two-way `columns` model has been updated.",
17901
+ "file": "projects/mk-kit/kanban/kanban.ts",
17902
+ "kind": "interface",
17903
+ "members": [
17904
+ {
17905
+ "name": "card",
17906
+ "type": "MkKanbanCard",
17907
+ "description": "The card that was moved."
17908
+ },
17909
+ {
17910
+ "name": "from",
17911
+ "type": "unknown",
17912
+ "description": "`id` of the column the card came from."
17913
+ },
17914
+ {
17915
+ "name": "to",
17916
+ "type": "unknown",
17917
+ "description": "`id` of the column the card was dropped into."
17918
+ },
17919
+ {
17920
+ "name": "fromIndex",
17921
+ "type": "number",
17922
+ "description": "The card's index within the source column before the move."
17923
+ },
17924
+ {
17925
+ "name": "toIndex",
17926
+ "type": "number",
17927
+ "description": "The card's index within the destination column after the move."
17928
+ }
17929
+ ]
17930
+ },
17931
+ {
17932
+ "name": "MkKanbanColumn",
17933
+ "description": "A column (bucket) of `MkKanbanCard`s on a `MkKanban` board.",
17934
+ "file": "projects/mk-kit/kanban/kanban.ts",
17935
+ "kind": "interface",
17936
+ "members": [
17937
+ {
17938
+ "name": "id",
17939
+ "type": "unknown",
17940
+ "description": "Stable identity used for tracking and move events."
17941
+ },
17942
+ {
17943
+ "name": "title",
17944
+ "type": "string",
17945
+ "description": "Heading shown in the column header and used as its aria-label."
17946
+ },
17947
+ {
17948
+ "name": "cards",
17949
+ "type": "MkKanbanCard[]",
17950
+ "description": "The ordered cards contained in this column."
17951
+ }
17952
+ ]
17953
+ },
17954
+ {
17955
+ "name": "MkKanbanColumnContext",
17956
+ "description": "Context handed to the column header / footer templates.",
17957
+ "file": "projects/mk-kit/kanban/kanban.ts",
17958
+ "kind": "interface",
17959
+ "members": [
17960
+ {
17961
+ "name": "$implicit",
17962
+ "type": "MkKanbanColumn",
17963
+ "description": "The column being rendered."
17964
+ },
17965
+ {
17966
+ "name": "index",
17967
+ "type": "number",
17968
+ "description": "Its position in `columns`."
17969
+ },
17970
+ {
17971
+ "name": "count",
17972
+ "type": "number",
17973
+ "description": "`column.cards.length`, for a count badge."
17974
+ }
17975
+ ]
17976
+ }
17977
+ ]
17978
+ },
17661
17979
  {
17662
17980
  "name": "feedback",
17663
17981
  "import": "@mk-kit/ui/feedback",
@@ -1,4 +1,4 @@
1
- # @mk-kit/ui 0.52.1 — full API reference
1
+ # @mk-kit/ui 0.54.0 — full API reference
2
2
 
3
3
  Generated from the library sources. Browsable version: https://mk-kit.dev/api · JSON: https://mk-kit.dev/api.json · Guides: https://mk-kit.dev/llms.txt
4
4
 
@@ -8401,7 +8401,7 @@ type MkWeekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;
8401
8401
 
8402
8402
  ## @mk-kit/ui/table
8403
8403
 
8404
- 37 exports. `import { … } from '@mk-kit/ui/table';`
8404
+ 39 exports. `import { … } from '@mk-kit/ui/table';`
8405
8405
 
8406
8406
  ### MkSortHeader (component)
8407
8407
 
@@ -8665,6 +8665,7 @@ Methods:
8665
8665
  | `setQuery(query: MkQueryGroup \| null): void` | Set (or clear with `null`) the structured query from `mk-query-builder`. Empty groups and unfinished rules are dropped before the request; a query with nothing left is sent as `null`. Resets to page 1 and loads at once. |
8666
8666
  | `setFilters(filters: MkTableFilters \| null): void` | Set (or clear with `null` / `{}`) the per-column filters from `mk-table`'s header filter row — bind `(filtersChange)="ds.setFilters($event)"` and turn the table's `clientFilter` off. Empty entries are dropped before the request; nothing left is sent as `null`. Resets to page 1 and loads at once (the table already debounces nothing, so debounce the fetcher if your API needs it). A no-op when unchanged. |
8667
8667
  | `refresh(): void` | Re-run the current request immediately (e.g. after a mutation). Flushes a pending debounced filter, since the request reads the live filter value. |
8668
+ | `reload(): void` | Back to page 1 and load — the "filters changed outside the search box" case. Unlike `setPage`, this loads even when already on page 1, so callers no longer need `page() === 1 ? refresh() : setPage(1)`. |
8668
8669
  | `connectSort(sort: MkSort): void` | Pipe an `mkSort` directive's changes into `setSort`. Idempotent per directive instance; all subscriptions are released by `destroy`. |
8669
8670
  | `destroy(): void` | Cancel pending work: the debounce timer, any in-flight Observable fetch, and `connectSort` subscriptions. In-flight Promise settles are discarded. Called automatically on host destroy when created in an injection context. |
8670
8671
 
@@ -8684,6 +8685,23 @@ Properties:
8684
8685
  | `filters` | `Signal<MkTableFilters \| null>` | Current per-column filters, or `null`. |
8685
8686
  | `empty` | `Signal<boolean>` | True when a settled load reported no rows at all. |
8686
8687
 
8688
+ ### mkClientFetcher (function)
8689
+
8690
+ Import: `import { mkClientFetcher } from '@mk-kit/ui/table';`
8691
+
8692
+ In-memory `MkDataFetcher`: filter, sort and slice a full row set that
8693
+ the app already holds (an API that returns everything). Lets a client-side
8694
+ list use `MkTableDataSource` — same pager, footer and API as a
8695
+ server-paged one — without hand-rolling `filtered/sorted/paged` computeds.
8696
+
8697
+ ```ts
8698
+ ds = new MkTableDataSource(mkClientFetcher(() => this.rows()));
8699
+ ```
8700
+
8701
+ ```ts
8702
+ function mkClientFetcher<T>(rows: () => readonly T[], opts?: MkClientFetcherOptions<T>): (req: MkDataRequest) => Promise<MkDataPage<T>>
8703
+ ```
8704
+
8687
8705
  ### mkCompactFilters (function)
8688
8706
 
8689
8707
  Import: `import { mkCompactFilters } from '@mk-kit/ui/table';`
@@ -8744,6 +8762,19 @@ Members:
8744
8762
  | `key` | `string` | The column key that was edited. |
8745
8763
  | `value` | `string` | The new (string) value the user entered. |
8746
8764
 
8765
+ ### MkClientFetcherOptions (interface)
8766
+
8767
+ Import: `import { MkClientFetcherOptions } from '@mk-kit/ui/table';`
8768
+
8769
+ Options for `mkClientFetcher`.
8770
+
8771
+ Members:
8772
+
8773
+ | Name | Type | Description |
8774
+ | --- | --- | --- |
8775
+ | `match`? | `((row: T, query: string) => boolean) \| undefined` | Row matcher for `setFilter` text; default: case-insensitive substring over every string/number field. |
8776
+ | `compare`? | `((a: T, b: T, sort: MkSortState) => number) \| undefined` | Comparator for an active sort; default: locale compare on `row[sort.active]`. |
8777
+
8747
8778
  ### MkColumnResize (interface)
8748
8779
 
8749
8780
  Import: `import { MkColumnResize } from '@mk-kit/ui/table';`
@@ -9090,9 +9121,171 @@ for `number` and `date`. Empty strings and `null` mean "no filter".
9090
9121
  type MkTableFilters = Record<string, unknown>;
9091
9122
  ```
9092
9123
 
9124
+ ## @mk-kit/ui/status
9125
+
9126
+ 6 exports. `import { … } from '@mk-kit/ui/status';`
9127
+
9128
+ ### MkBadge (component)
9129
+
9130
+ Selector: `mk-badge`
9131
+
9132
+ Docs: https://mk-kit.dev/components/badges-avatars
9133
+
9134
+ Import: `import { MkBadge } from '@mk-kit/ui/status';`
9135
+
9136
+ Badge — a compact status pill, typically for counts or short state labels.
9137
+ Set `dot` for a minimal notification indicator with no text.
9138
+
9139
+ ```html
9140
+ <mk-badge tone="success">Active</mk-badge>
9141
+ <mk-badge tone="danger" variant="solid">3</mk-badge>
9142
+ <mk-badge tone="danger" dot aria-label="Unread messages" />
9143
+ ```
9144
+
9145
+ Inputs:
9146
+
9147
+ | Name | Type | Default | Description |
9148
+ | --- | --- | --- | --- |
9149
+ | `tone` | `MkTone` | `'primary'` | Semantic color tone. |
9150
+ | `variant` | `MkBadgeVariant` | `'soft'` | Visual treatment. |
9151
+ | `size` | `MkSize` | `'md'` | Size scale. |
9152
+ | `dot` | `boolean` | `false` | Render as a tiny dot (no text) for notification indicators. |
9153
+
9154
+ ### MkEmptyState (component)
9155
+
9156
+ Selector: `mk-empty-state`
9157
+
9158
+ Docs: https://mk-kit.dev/components/empty-timeline
9159
+
9160
+ Import: `import { MkEmptyState } from '@mk-kit/ui/status';`
9161
+
9162
+ EmptyState — a centered placeholder for "nothing here yet" situations: empty
9163
+ tables, no search results, a fresh dashboard, a cleared inbox. Provide a
9164
+ `title` (and usually a `description`), an `icon` or projected media, and
9165
+ call-to-action buttons via the actions slot.
9166
+
9167
+ Slots: `[mkEmptyStateMedia]` (custom illustration, overrides `icon`), default
9168
+ content (extra body), `[mkEmptyStateActions]` (buttons).
9169
+
9170
+ ```html
9171
+ <mk-empty-state icon="search" title="No results"
9172
+ description="Try adjusting your filters.">
9173
+ <button mkButton mkEmptyStateActions variant="outline">Clear filters</button>
9174
+ </mk-empty-state>
9175
+ ```
9176
+
9177
+ Inputs:
9178
+
9179
+ | Name | Type | Default | Description |
9180
+ | --- | --- | --- | --- |
9181
+ | `icon` | `string` | `''` | Name of a registered icon shown above the title (ignored if media is projected). |
9182
+ | `title` | `string` | `''` | Main heading, e.g. "No invoices yet". |
9183
+ | `description` | `string` | `''` | Supporting sentence under the title. |
9184
+ | `size` | `MkSize` | `'md'` | Overall scale of the block. |
9185
+
9186
+ ### MkSpinner (component)
9187
+
9188
+ Selector: `mk-spinner`
9189
+
9190
+ Docs: https://mk-kit.dev/components/loading
9191
+
9192
+ Import: `import { MkSpinner } from '@mk-kit/ui/status';`
9193
+
9194
+ Spinner — a circular indeterminate loading indicator. Exposes `role="status"`
9195
+ with a visually-hidden label so assistive tech announces the loading state.
9196
+ The animation slows under `prefers-reduced-motion`.
9197
+
9198
+ ```html
9199
+ <mk-spinner />
9200
+ <mk-spinner size="lg" tone="neutral" label="Fetching results" />
9201
+ ```
9202
+
9203
+ Inputs:
9204
+
9205
+ | Name | Type | Default | Description |
9206
+ | --- | --- | --- | --- |
9207
+ | `size` | `MkSize` | `'md'` | Size scale. |
9208
+ | `tone` | `MkTone` | `'primary'` | Semantic color tone. |
9209
+ | `label` | `string` | `this.i18n.loading` | Visually-hidden status label announced to screen readers. |
9210
+
9211
+ ### MkBadgeOverlay (directive)
9212
+
9213
+ Selector: `[mkBadgeOverlay]`
9214
+
9215
+ Docs: https://mk-kit.dev/components/badges-avatars
9216
+
9217
+ Import: `import { MkBadgeOverlay } from '@mk-kit/ui/status';`
9218
+
9219
+ Badge overlay — anchors a small badge (count, dot or short text) to a corner
9220
+ of ANY element: an icon button, an avatar, a tab label. The host stays a
9221
+ single tab stop; the badge is a decorative, non-focusable child.
9222
+
9223
+ - Numbers above `mkBadgeOverlayMax` (default 99) collapse to `99+`.
9224
+ - `mkBadgeOverlayDot` renders a textless dot ("something is new").
9225
+ - `mkBadgeOverlayAriaLabel` is the screen-reader text ("3 unread"). It is
9226
+ rendered in a visually hidden span and wired to the host with
9227
+ `aria-describedby`, so it is announced after the host's own name even
9228
+ when the host has an `aria-label`. When it is given, the visible badge is
9229
+ `aria-hidden` so the count is not read twice.
9230
+ - Positions use logical insets, so `top-end` sits at the top-right in LTR
9231
+ and the top-left in RTL.
9232
+
9233
+ The badge is painted with the global `.mk-badge-overlay` styles from
9234
+ `@mk-kit/ui/styles.css` and follows the `--mk-*` tone tokens.
9235
+
9236
+ ```html
9237
+ <button mkButton iconOnly aria-label="Notifications"
9238
+ [mkBadgeOverlay]="unread()" mkBadgeOverlayTone="danger"
9239
+ [mkBadgeOverlayAriaLabel]="unread() + ' unread'">
9240
+ <mk-icon name="bell" />
9241
+ </button>
9242
+
9243
+ <mk-avatar name="Ada Lovelace" mkBadgeOverlay mkBadgeOverlayDot
9244
+ mkBadgeOverlayTone="success" mkBadgeOverlayPosition="bottom-end" />
9245
+ ```
9246
+
9247
+ Inputs:
9248
+
9249
+ | Name | Type | Default | Description |
9250
+ | --- | --- | --- | --- |
9251
+ | `mkBadgeOverlay` | `string \| number \| null \| undefined` | `null` | Badge content — a count or a short label. `null` / empty hides the badge unless `mkBadgeOverlayDot` is set. Numeric strings are treated as numbers so `mkBadgeOverlay="120"` also collapses to `99+`. |
9252
+ | `mkBadgeOverlayPosition` | `MkBadgeOverlayPosition` | `'top-end'` | Corner the badge is anchored to (logical: `end` flips in RTL). |
9253
+ | `mkBadgeOverlayTone` | `MkTone` | `'primary'` | Semantic color tone (same scale as `mk-badge`). |
9254
+ | `mkBadgeOverlayDot` | `boolean` | `false` | Render a textless dot instead of the content. |
9255
+ | `mkBadgeOverlayMax` | `number` | `99` | Numbers above this render as `<max>+`. `0` disables the cap. |
9256
+ | `mkBadgeOverlayHidden` | `boolean` | `false` | Hide the badge while keeping the directive (and its aria wiring) in place. |
9257
+ | `mkBadgeOverlayAriaLabel` | `string` | `''` | Screen-reader text for the badge, e.g. `"3 unread"`. Announced as the host's description; the visible badge becomes `aria-hidden`. |
9258
+
9259
+ Properties:
9260
+
9261
+ | Name | Type | Description |
9262
+ | --- | --- | --- |
9263
+ | `label` | `Signal<string>` | The text painted in the badge (`''` in dot mode). |
9264
+ | `visible` | `Signal<boolean>` | Whether the badge is currently rendered. |
9265
+
9266
+ ### MkBadgeOverlayPosition (type)
9267
+
9268
+ Import: `import { MkBadgeOverlayPosition } from '@mk-kit/ui/status';`
9269
+
9270
+ Corner of the host an `MkBadgeOverlay` is anchored to.
9271
+
9272
+ ```ts
9273
+ type MkBadgeOverlayPosition = | 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start';
9274
+ ```
9275
+
9276
+ ### MkBadgeVariant (type)
9277
+
9278
+ Import: `import { MkBadgeVariant } from '@mk-kit/ui/status';`
9279
+
9280
+ Visual treatment for a `MkBadge`.
9281
+
9282
+ ```ts
9283
+ type MkBadgeVariant = 'solid' | 'soft' | 'outline';
9284
+ ```
9285
+
9093
9286
  ## @mk-kit/ui/data
9094
9287
 
9095
- 131 exports. `import { … } from '@mk-kit/ui/data';`
9288
+ 127 exports. `import { … } from '@mk-kit/ui/data';`
9096
9289
 
9097
9290
  ### MkAvatar (component)
9098
9291
 
@@ -9786,45 +9979,6 @@ Methods:
9786
9979
  | `expandAll(): void` | Expand every object/array node. |
9787
9980
  | `collapseAll(): void` | Collapse everything (the root stays visible). |
9788
9981
 
9789
- ### MkKanban (component)
9790
-
9791
- Selector: `mk-kanban`
9792
-
9793
- Docs: https://mk-kit.dev/components/data
9794
-
9795
- Import: `import { MkKanban } from '@mk-kit/ui/data';`
9796
-
9797
- Kanban board — a horizontal row of columns whose cards can be dragged and
9798
- reordered within a column or transferred between columns. Built on the dnd
9799
- group's connected `[mkDropList]` / `[mkDrag]` directives, so it inherits both
9800
- pointer and keyboard dragging (WCAG 2.1.1) for free.
9801
-
9802
- Bind `columns` two-way; the model is updated immutably on each drop. Project
9803
- an `<ng-template>` to render custom card content — it receives the card as
9804
- `$implicit` and the owning column as `column`:
9805
-
9806
- ```html
9807
- <mk-kanban [(columns)]="board" (cardMoved)="onMoved($event)">
9808
- <ng-template #cardTemplate let-card let-column="column">
9809
- <strong>{{ card.title }}</strong>
9810
- </ng-template>
9811
- </mk-kanban>
9812
- ```
9813
-
9814
- Inputs:
9815
-
9816
- | Name | Type | Default | Description |
9817
- | --- | --- | --- | --- |
9818
- | `columns` (two-way) | `MkKanbanColumn[]` | `[]` | The board's columns and their cards (two-way). Updated on every drop. |
9819
- | `disabled` | `boolean` | `false` | Disable all dragging on the board. |
9820
-
9821
- Outputs:
9822
-
9823
- | Name | Type | Description |
9824
- | --- | --- | --- |
9825
- | `columnsChange` | `MkKanbanColumn[]` | Emits when `columns` changes (two-way binding). |
9826
- | `cardMoved` | `MkKanbanCardMovedEvent` | Emitted after the model is updated when a card is moved. |
9827
-
9828
9982
  ### MkLineChart (component)
9829
9983
 
9830
9984
  Selector: `mk-line-chart`
@@ -11176,50 +11330,6 @@ Members:
11176
11330
  | `path` | `string` | Unique path (e.g. `$.users[0].name`) used for expansion tracking. |
11177
11331
  | `depth` | `number` | Nesting depth (root = 0). |
11178
11332
 
11179
- ### MkKanbanCard (interface)
11180
-
11181
- Import: `import { MkKanbanCard } from '@mk-kit/ui/data';`
11182
-
11183
- A single draggable card on a `MkKanban` board.
11184
-
11185
- Members:
11186
-
11187
- | Name | Type | Description |
11188
- | --- | --- | --- |
11189
- | `id` | `unknown` | Stable identity used for tracking and move events. |
11190
- | `title` | `string` | Text shown by the default card renderer. |
11191
-
11192
- ### MkKanbanCardMovedEvent (interface)
11193
-
11194
- Import: `import { MkKanbanCardMovedEvent } from '@mk-kit/ui/data';`
11195
-
11196
- Emitted by `MkKanban` after a card has been moved (between or within
11197
- columns) and the two-way `columns` model has been updated.
11198
-
11199
- Members:
11200
-
11201
- | Name | Type | Description |
11202
- | --- | --- | --- |
11203
- | `card` | `MkKanbanCard` | The card that was moved. |
11204
- | `from` | `unknown` | `id` of the column the card came from. |
11205
- | `to` | `unknown` | `id` of the column the card was dropped into. |
11206
- | `fromIndex` | `number` | The card's index within the source column before the move. |
11207
- | `toIndex` | `number` | The card's index within the destination column after the move. |
11208
-
11209
- ### MkKanbanColumn (interface)
11210
-
11211
- Import: `import { MkKanbanColumn } from '@mk-kit/ui/data';`
11212
-
11213
- A column (bucket) of `MkKanbanCard`s on a `MkKanban` board.
11214
-
11215
- Members:
11216
-
11217
- | Name | Type | Description |
11218
- | --- | --- | --- |
11219
- | `id` | `unknown` | Stable identity used for tracking and move events. |
11220
- | `title` | `string` | Heading shown in the column header and used as its aria-label. |
11221
- | `cards` | `MkKanbanCard[]` | The ordered cards contained in this column. |
11222
-
11223
11333
  ### MkLogToken (interface)
11224
11334
 
11225
11335
  Import: `import { MkLogToken } from '@mk-kit/ui/data';`
@@ -11669,6 +11779,144 @@ Visual treatment for a `MkTag`.
11669
11779
  type MkTagVariant = 'solid' | 'soft' | 'outline';
11670
11780
  ```
11671
11781
 
11782
+ ## @mk-kit/ui/kanban
11783
+
11784
+ 8 exports. `import { … } from '@mk-kit/ui/kanban';`
11785
+
11786
+ ### MkKanban (component)
11787
+
11788
+ Selector: `mk-kanban`
11789
+
11790
+ Docs: https://mk-kit.dev/components/data
11791
+
11792
+ Import: `import { MkKanban } from '@mk-kit/ui/kanban';`
11793
+
11794
+ Kanban board — a horizontal row of columns whose cards can be dragged and
11795
+ reordered within a column or transferred between columns. Built on the dnd
11796
+ group's connected `[mkDropList]` / `[mkDrag]` directives, so it inherits both
11797
+ pointer and keyboard dragging (WCAG 2.1.1) for free.
11798
+
11799
+ Bind `columns` two-way; the model is updated immutably on each drop. Project
11800
+ an `<ng-template>` to render custom card content — it receives the card as
11801
+ `$implicit` and the owning column as `column`. Column headers and footers
11802
+ take their own templates (`mkKanbanColumnHeader` / `mkKanbanColumnFooter`,
11803
+ context `{ $implicit: column, index, count }`):
11804
+
11805
+ ```html
11806
+ <mk-kanban [(columns)]="board" (cardMoved)="onMoved($event)">
11807
+ <ng-template mkKanbanColumnHeader let-column let-count="count">
11808
+ <strong>{{ column.title }}</strong> {{ count }}
11809
+ <button (click)="rename(column)">Rename</button>
11810
+ </ng-template>
11811
+ <ng-template mkKanbanCard let-card let-column="column">
11812
+ <strong>{{ card.title }}</strong>
11813
+ </ng-template>
11814
+ <ng-template mkKanbanColumnFooter let-column>
11815
+ <button (click)="add(column)">+ Card</button>
11816
+ </ng-template>
11817
+ </mk-kanban>
11818
+ ```
11819
+
11820
+ Inputs:
11821
+
11822
+ | Name | Type | Default | Description |
11823
+ | --- | --- | --- | --- |
11824
+ | `columns` (two-way) | `MkKanbanColumn[]` | `[]` | The board's columns and their cards (two-way). Updated on every drop. |
11825
+ | `disabled` | `boolean` | `false` | Disable all dragging on the board. |
11826
+
11827
+ Outputs:
11828
+
11829
+ | Name | Type | Description |
11830
+ | --- | --- | --- |
11831
+ | `columnsChange` | `MkKanbanColumn[]` | Emits when `columns` changes (two-way binding). |
11832
+ | `cardMoved` | `MkKanbanCardMovedEvent` | Emitted after the model is updated when a card is moved. |
11833
+
11834
+ ### MkKanbanCardDef (directive)
11835
+
11836
+ Selector: `ng-template[mkKanbanCard]`
11837
+
11838
+ Import: `import { MkKanbanCardDef } from '@mk-kit/ui/kanban';`
11839
+
11840
+ Marks the projected card renderer explicitly:
11841
+ `<ng-template mkKanbanCard let-card let-column="column">`. Without it the
11842
+ first plain `<ng-template>` inside `<mk-kanban>` is used, as before 0.54.
11843
+
11844
+ ### MkKanbanColumnFooterDef (directive)
11845
+
11846
+ Selector: `ng-template[mkKanbanColumnFooter]`
11847
+
11848
+ Import: `import { MkKanbanColumnFooterDef } from '@mk-kit/ui/kanban';`
11849
+
11850
+ Rendered under each column's card list — a "quick add" input, say:
11851
+ `<ng-template mkKanbanColumnFooter let-column>`.
11852
+
11853
+ ### MkKanbanColumnHeaderDef (directive)
11854
+
11855
+ Selector: `ng-template[mkKanbanColumnHeader]`
11856
+
11857
+ Import: `import { MkKanbanColumnHeaderDef } from '@mk-kit/ui/kanban';`
11858
+
11859
+ Replaces the default column header (title + count):
11860
+ `<ng-template mkKanbanColumnHeader let-column let-count="count">`.
11861
+
11862
+ ### MkKanbanCard (interface)
11863
+
11864
+ Import: `import { MkKanbanCard } from '@mk-kit/ui/kanban';`
11865
+
11866
+ A single draggable card on a `MkKanban` board.
11867
+
11868
+ Members:
11869
+
11870
+ | Name | Type | Description |
11871
+ | --- | --- | --- |
11872
+ | `id` | `unknown` | Stable identity used for tracking and move events. |
11873
+ | `title` | `string` | Text shown by the default card renderer. |
11874
+
11875
+ ### MkKanbanCardMovedEvent (interface)
11876
+
11877
+ Import: `import { MkKanbanCardMovedEvent } from '@mk-kit/ui/kanban';`
11878
+
11879
+ Emitted by `MkKanban` after a card has been moved (between or within
11880
+ columns) and the two-way `columns` model has been updated.
11881
+
11882
+ Members:
11883
+
11884
+ | Name | Type | Description |
11885
+ | --- | --- | --- |
11886
+ | `card` | `MkKanbanCard` | The card that was moved. |
11887
+ | `from` | `unknown` | `id` of the column the card came from. |
11888
+ | `to` | `unknown` | `id` of the column the card was dropped into. |
11889
+ | `fromIndex` | `number` | The card's index within the source column before the move. |
11890
+ | `toIndex` | `number` | The card's index within the destination column after the move. |
11891
+
11892
+ ### MkKanbanColumn (interface)
11893
+
11894
+ Import: `import { MkKanbanColumn } from '@mk-kit/ui/kanban';`
11895
+
11896
+ A column (bucket) of `MkKanbanCard`s on a `MkKanban` board.
11897
+
11898
+ Members:
11899
+
11900
+ | Name | Type | Description |
11901
+ | --- | --- | --- |
11902
+ | `id` | `unknown` | Stable identity used for tracking and move events. |
11903
+ | `title` | `string` | Heading shown in the column header and used as its aria-label. |
11904
+ | `cards` | `MkKanbanCard[]` | The ordered cards contained in this column. |
11905
+
11906
+ ### MkKanbanColumnContext (interface)
11907
+
11908
+ Import: `import { MkKanbanColumnContext } from '@mk-kit/ui/kanban';`
11909
+
11910
+ Context handed to the column header / footer templates.
11911
+
11912
+ Members:
11913
+
11914
+ | Name | Type | Description |
11915
+ | --- | --- | --- |
11916
+ | `$implicit` | `MkKanbanColumn` | The column being rendered. |
11917
+ | `index` | `number` | Its position in `columns`. |
11918
+ | `count` | `number` | `column.cards.length`, for a count badge. |
11919
+
11672
11920
  ## @mk-kit/ui/feedback
11673
11921
 
11674
11922
  55 exports. `import { … } from '@mk-kit/ui/feedback';`
package/data/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # mk-kit
2
2
 
3
- > Themable, accessible Angular 22 component library for admin dashboards and UIs. Signals-based, WCAG 2.1 AA, controlled entirely through CSS variables with light/dark out of the box. — `@mk-kit/ui` 0.52.1. 169 components, 41 directives, 16 services and 144 helper functions across 30 tree-shakeable entry points. MIT licensed, zero runtime dependencies beyond Angular. Standalone components, signals, OnPush, zoneless-ready, SSR-safe, RTL and i18n via `provideMkI18n`.
3
+ > Themable, accessible Angular 22 component library for admin dashboards and UIs. Signals-based, WCAG 2.1 AA, controlled entirely through CSS variables with light/dark out of the box. — `@mk-kit/ui` 0.54.0. 172 components, 45 directives, 16 services and 145 helper functions across 32 tree-shakeable entry points. MIT licensed, zero runtime dependencies beyond Angular. Standalone components, signals, OnPush, zoneless-ready, SSR-safe, RTL and i18n via `provideMkI18n`.
4
4
 
5
5
  Install with `ng add @mk-kit/ui` (or `npm i @mk-kit/ui` + import `@mk-kit/ui/styles/mk-kit.css`). Import from the group entry points (`@mk-kit/ui/forms`, `@mk-kit/ui/table`, …) so each lazy chunk only carries what it uses; the root `@mk-kit/ui` entry re-exports everything. Every component is standalone: add the class to a component's `imports`. Theme with `--mk-*` CSS custom properties; `MkThemeService` switches light/dark/system and density.
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mk-kit/mcp",
3
- "version": "0.52.1",
3
+ "version": "0.54.0",
4
4
  "description": "MCP server for @mk-kit/ui — lets AI coding assistants look up every component, directive, service and helper of the mk-kit Angular library (inputs, outputs, methods, import paths, docs links).",
5
5
  "license": "MIT",
6
6
  "type": "module",