@f-ewald/components 1.1.1 → 1.2.1

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.
Files changed (44) hide show
  1. package/README.md +4 -0
  2. package/custom-elements.json +2336 -290
  3. package/dist/form-select.d.ts +5 -4
  4. package/dist/form-select.d.ts.map +1 -1
  5. package/dist/form-select.js +6 -5
  6. package/dist/form-select.js.map +1 -1
  7. package/dist/icons.d.ts +1 -0
  8. package/dist/icons.d.ts.map +1 -1
  9. package/dist/icons.js +1 -0
  10. package/dist/icons.js.map +1 -1
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/kanban-board.d.ts +110 -0
  16. package/dist/kanban-board.d.ts.map +1 -0
  17. package/dist/kanban-board.js +619 -0
  18. package/dist/kanban-board.js.map +1 -0
  19. package/dist/kanban-card.d.ts +35 -0
  20. package/dist/kanban-card.d.ts.map +1 -0
  21. package/dist/kanban-card.js +163 -0
  22. package/dist/kanban-card.js.map +1 -0
  23. package/dist/kanban-column.d.ts +30 -0
  24. package/dist/kanban-column.d.ts.map +1 -0
  25. package/dist/kanban-column.js +166 -0
  26. package/dist/kanban-column.js.map +1 -0
  27. package/dist/multi-select.d.ts +142 -0
  28. package/dist/multi-select.d.ts.map +1 -0
  29. package/dist/multi-select.js +1304 -0
  30. package/dist/multi-select.js.map +1 -0
  31. package/dist/popover-panel.js +1 -1
  32. package/dist/popover-panel.js.map +1 -1
  33. package/dist/tokens.css +3 -0
  34. package/dist/tokens.d.ts.map +1 -1
  35. package/dist/tokens.js +2 -0
  36. package/dist/tokens.js.map +1 -1
  37. package/docs/design-language.md +8 -0
  38. package/docs/form-select.md +5 -4
  39. package/docs/kanban-board.md +96 -0
  40. package/docs/kanban-card.md +56 -0
  41. package/docs/kanban-column.md +58 -0
  42. package/docs/multi-select.md +120 -0
  43. package/llms.txt +182 -4
  44. package/package.json +1 -1
@@ -3485,7 +3485,7 @@
3485
3485
  "declarations": [
3486
3486
  {
3487
3487
  "kind": "class",
3488
- "description": "A styled dropdown select: a trigger button showing the current option's\nlabel, opening a listbox popover on click. Drop-in generic replacement for\na native `<select>` wherever consistent cross-browser styling and a\n`change` event carrying `{ value }` are wanted (e.g. a task's status\npicker).\n\nThe trigger fills its host's width (`justify-content: space-between`\npushes the chevron to the far edge), but the host itself stays\n`display: inline-block` so usages that never size the host (a filter\nbar, a status picker) keep shrink-to-fit auto-width unchanged. To make an\ninstance full-width, size the host itself: `form-select { width: 100%; }`.\n\nSet `searchable` to replace the button trigger with an editable combobox\nthat filters the predefined options by case-insensitive label infix. Typed\ntext is only a query: `value` changes exclusively when an actual option is\nselected, and an uncommitted query is discarded when the list closes.\nEach option may also provide a pre-rendered `icon` and square `iconSize`;\niconless options reserve no leading space.",
3488
+ "description": "A styled dropdown select: a trigger button showing the current option's\nlabel, opening a listbox popover on click. Drop-in generic replacement for\na native `<select>` wherever consistent cross-browser styling and a\n`change` event carrying `{ value }` are wanted (e.g. a task's status\npicker).\n\nThe trigger fills its host's width (`justify-content: space-between`\npushes the chevron to the far edge), and the host is `display: block`, so a\n`form-select` fills its container's width by default matching the other\nform fields. To make an instance shrink to its content instead (e.g. in a\nfilter bar or a status picker), constrain the host:\n`form-select { display: inline-block; }` (or `width: fit-content`).\n\nSet `searchable` to replace the button trigger with an editable combobox\nthat filters the predefined options by case-insensitive label infix. Typed\ntext is only a query: `value` changes exclusively when an actual option is\nselected, and an uncommitted query is discarded when the list closes.\nEach option may also provide a pre-rendered `icon` and square `iconSize`;\niconless options reserve no leading space.",
3489
3489
  "name": "FormSelect",
3490
3490
  "members": [
3491
3491
  {
@@ -4835,6 +4835,16 @@
4835
4835
  "default": "16"
4836
4836
  }
4837
4837
  ]
4838
+ },
4839
+ {
4840
+ "kind": "function",
4841
+ "name": "iconAcademicCap",
4842
+ "parameters": [
4843
+ {
4844
+ "name": "size",
4845
+ "default": "18"
4846
+ }
4847
+ ]
4838
4848
  }
4839
4849
  ],
4840
4850
  "exports": [
@@ -5149,6 +5159,14 @@
5149
5159
  "name": "iconArrowTopRightOnSquare",
5150
5160
  "module": "src/icons.ts"
5151
5161
  }
5162
+ },
5163
+ {
5164
+ "kind": "js",
5165
+ "name": "iconAcademicCap",
5166
+ "declaration": {
5167
+ "name": "iconAcademicCap",
5168
+ "module": "src/icons.ts"
5169
+ }
5152
5170
  }
5153
5171
  ]
5154
5172
  },
@@ -5557,6 +5575,30 @@
5557
5575
  "module": "./form-select.js"
5558
5576
  }
5559
5577
  },
5578
+ {
5579
+ "kind": "js",
5580
+ "name": "MultiSelect",
5581
+ "declaration": {
5582
+ "name": "MultiSelect",
5583
+ "module": "./multi-select.js"
5584
+ }
5585
+ },
5586
+ {
5587
+ "kind": "js",
5588
+ "name": "MultiSelectOption",
5589
+ "declaration": {
5590
+ "name": "MultiSelectOption",
5591
+ "module": "./multi-select.js"
5592
+ }
5593
+ },
5594
+ {
5595
+ "kind": "js",
5596
+ "name": "MultiSelectVariant",
5597
+ "declaration": {
5598
+ "name": "MultiSelectVariant",
5599
+ "module": "./multi-select.js"
5600
+ }
5601
+ },
5560
5602
  {
5561
5603
  "kind": "js",
5562
5604
  "name": "DataTable",
@@ -5661,6 +5703,62 @@
5661
5703
  "module": "./calendar-year.js"
5662
5704
  }
5663
5705
  },
5706
+ {
5707
+ "kind": "js",
5708
+ "name": "KanbanBoard",
5709
+ "declaration": {
5710
+ "name": "KanbanBoard",
5711
+ "module": "./kanban-board.js"
5712
+ }
5713
+ },
5714
+ {
5715
+ "kind": "js",
5716
+ "name": "KanbanCardData",
5717
+ "declaration": {
5718
+ "name": "KanbanCardData",
5719
+ "module": "./kanban-board.js"
5720
+ }
5721
+ },
5722
+ {
5723
+ "kind": "js",
5724
+ "name": "KanbanColumnData",
5725
+ "declaration": {
5726
+ "name": "KanbanColumnData",
5727
+ "module": "./kanban-board.js"
5728
+ }
5729
+ },
5730
+ {
5731
+ "kind": "js",
5732
+ "name": "KanbanCardMoveDetail",
5733
+ "declaration": {
5734
+ "name": "KanbanCardMoveDetail",
5735
+ "module": "./kanban-board.js"
5736
+ }
5737
+ },
5738
+ {
5739
+ "kind": "js",
5740
+ "name": "KanbanCardOpenDetail",
5741
+ "declaration": {
5742
+ "name": "KanbanCardOpenDetail",
5743
+ "module": "./kanban-board.js"
5744
+ }
5745
+ },
5746
+ {
5747
+ "kind": "js",
5748
+ "name": "KanbanColumn",
5749
+ "declaration": {
5750
+ "name": "KanbanColumn",
5751
+ "module": "./kanban-column.js"
5752
+ }
5753
+ },
5754
+ {
5755
+ "kind": "js",
5756
+ "name": "KanbanCard",
5757
+ "declaration": {
5758
+ "name": "KanbanCard",
5759
+ "module": "./kanban-card.js"
5760
+ }
5761
+ },
5664
5762
  {
5665
5763
  "kind": "js",
5666
5764
  "name": "formatDuration",
@@ -5713,475 +5811,2423 @@
5713
5811
  },
5714
5812
  {
5715
5813
  "kind": "javascript-module",
5716
- "path": "src/kbd-hint.ts",
5814
+ "path": "src/kanban-board.ts",
5717
5815
  "declarations": [
5718
5816
  {
5719
5817
  "kind": "class",
5720
- "description": "Renders a keyboard shortcut as one boxed keycap per `+`-separated token.\nModifier keys are platform-aware: `Mod` becomes Command on macOS and\nControl elsewhere. Keycaps derive their presentation from `currentColor`,\nso the hint works inside neutral and accent-colored controls.",
5721
- "name": "KbdHint",
5818
+ "description": "A configurable kanban board: a horizontally scrolling row of columns, each\nholding cards. **A card's column is its state** — moving a card to another\ncolumn (by drag-and-drop, keyboard, or the detail popover's state selector)\nchanges its state, and the board emits a single `card-move` for all three.\n\nData-driven: set the `columns` property to `KanbanColumnData[]`. The board\nkeeps its own working copy and mutates it optimistically on every move, so it\nworks standalone; re-assign `columns` at any time to stay controlled from a\nstore. Cards show only their ticket number and title in the overview; the\nfull detail (description, state, created/updated timestamps) opens in a\nscreen-centered `popover-panel`.\n\nPointer drag-and-drop supports both cross-column moves and within-column\nreordering with a live drop indicator (set `reorderable` false to keep only\ncross-column moves when intra-column order isn't persisted). Keyboard parity:\nfocus a card and press Space to pick it up, arrow keys to move it (left/right\nacross columns, up/down within a column), Space to drop, or Escape to cancel;\nEnter opens the detail. Moves are announced in a polite live region, and the\nmoved card briefly flashes a warm highlight so you can see where it landed.\n\nSet `manual` for a server-authoritative board (API + WebSocket/SSE): every\nmove still emits `card-move`, but the board does NOT apply it locally, so it\nreflects only what you assign to `columns` — e.g. the change echoed back over\nthe socket. The default is optimistic local updates.",
5819
+ "name": "KanbanBoard",
5722
5820
  "members": [
5723
5821
  {
5724
5822
  "kind": "field",
5725
- "name": "keys",
5823
+ "name": "columns",
5726
5824
  "type": {
5727
- "text": "string"
5825
+ "text": "KanbanColumnData[]"
5728
5826
  },
5729
- "default": "\"\"",
5730
- "description": "Shortcut as case-insensitive, `+`-separated tokens, e.g. `\"Mod+Enter\"`.",
5731
- "attribute": "keys"
5827
+ "default": "[]",
5828
+ "description": "Columns (with their cards) to render, in display order."
5732
5829
  },
5733
5830
  {
5734
5831
  "kind": "field",
5735
- "name": "platform",
5832
+ "name": "label",
5736
5833
  "type": {
5737
- "text": "KbdPlatform"
5834
+ "text": "string"
5738
5835
  },
5739
- "default": "\"auto\"",
5740
- "description": "Platform override; `auto` detects macOS from the browser.",
5741
- "attribute": "platform"
5836
+ "default": "\"Board\"",
5837
+ "description": "Accessible label for the board's group role.",
5838
+ "attribute": "label"
5742
5839
  },
5743
5840
  {
5744
5841
  "kind": "field",
5745
- "name": "isMac",
5842
+ "name": "manual",
5746
5843
  "type": {
5747
5844
  "text": "boolean"
5748
5845
  },
5749
- "privacy": "private",
5750
- "description": "Whether modifier aliases should use macOS glyphs.",
5751
- "readonly": true
5846
+ "default": "false",
5847
+ "description": "Server-authoritative mode. When true, moves emit `card-move` but are not\napplied to the board locally; it reflects only what you assign to\n`columns` (e.g. echoed back over WebSocket/SSE), keeping the server as the\nsingle source of truth. Defaults to optimistic local updates.",
5848
+ "attribute": "manual",
5849
+ "reflects": true
5752
5850
  },
5753
5851
  {
5754
5852
  "kind": "field",
5755
- "name": "parsedKeys",
5853
+ "name": "reorderable",
5756
5854
  "type": {
5757
- "text": "KeyRender[]"
5855
+ "text": "boolean"
5758
5856
  },
5759
- "privacy": "private",
5760
- "description": "Parses the shortcut into visual/spoken key descriptors.",
5761
- "readonly": true
5762
- }
5763
- ],
5764
- "attributes": [
5857
+ "default": "true",
5858
+ "description": "Whether cards can be reordered within a column. Defaults to true. Set false\nwhen intra-column order isn't persisted (no server `rank`): drag and\nkeyboard still move cards *between* columns (appended to the target), but\nreordering inside a column is disabled, so the UI only offers what sticks.",
5859
+ "attribute": "reorderable",
5860
+ "reflects": true
5861
+ },
5765
5862
  {
5766
- "name": "keys",
5863
+ "kind": "field",
5864
+ "name": "_cols",
5767
5865
  "type": {
5768
- "text": "string"
5866
+ "text": "KanbanColumnData[]"
5769
5867
  },
5770
- "default": "\"\"",
5771
- "description": "Shortcut as case-insensitive, `+`-separated tokens, e.g. `\"Mod+Enter\"`.",
5772
- "fieldName": "keys"
5868
+ "privacy": "private",
5869
+ "default": "[]"
5773
5870
  },
5774
5871
  {
5775
- "name": "platform",
5872
+ "kind": "field",
5873
+ "name": "_openCardId",
5776
5874
  "type": {
5777
- "text": "KbdPlatform"
5875
+ "text": "string | null"
5778
5876
  },
5779
- "default": "\"auto\"",
5780
- "description": "Platform override; `auto` detects macOS from the browser.",
5781
- "fieldName": "platform"
5782
- }
5783
- ],
5784
- "superclass": {
5785
- "name": "LitElement",
5786
- "package": "lit"
5787
- },
5788
- "tagName": "kbd-hint",
5789
- "customElement": true
5790
- }
5791
- ],
5792
- "exports": [
5793
- {
5794
- "kind": "js",
5795
- "name": "KbdHint",
5796
- "declaration": {
5797
- "name": "KbdHint",
5798
- "module": "src/kbd-hint.ts"
5799
- }
5800
- },
5801
- {
5802
- "kind": "custom-element-definition",
5803
- "name": "kbd-hint",
5804
- "declaration": {
5805
- "name": "KbdHint",
5806
- "module": "src/kbd-hint.ts"
5807
- }
5808
- }
5809
- ]
5810
- },
5811
- {
5812
- "kind": "javascript-module",
5813
- "path": "src/live-timer.ts",
5814
- "declarations": [
5815
- {
5816
- "kind": "class",
5817
- "description": "Per-second ticking count-up timer, e.g. a live \"running for 12s\" or\n\"Sleeping for 3 seconds\" indicator. Renders nothing while `since` is unset\nor unparseable.",
5818
- "name": "LiveTimer",
5819
- "members": [
5877
+ "privacy": "private",
5878
+ "default": "null"
5879
+ },
5820
5880
  {
5821
5881
  "kind": "field",
5822
- "name": "since",
5882
+ "name": "_drag",
5823
5883
  "type": {
5824
- "text": "string | null"
5884
+ "text": "DragState | null"
5825
5885
  },
5826
- "default": "null",
5827
- "description": "ISO-8601 start instant; elapsed time is measured from here.",
5828
- "attribute": "since"
5886
+ "privacy": "private",
5887
+ "default": "null"
5829
5888
  },
5830
5889
  {
5831
5890
  "kind": "field",
5832
- "name": "format",
5891
+ "name": "_pointer",
5833
5892
  "type": {
5834
- "text": "DurationFormat"
5893
+ "text": "Indicator | null"
5835
5894
  },
5836
- "default": "\"seconds\"",
5837
- "description": "`\"seconds\"` -> \"1 second\", \"12 seconds\"; `\"compact\"` -> \"12s\", \"3m 12s\", \"1h 03m 12s\".",
5838
- "attribute": "format"
5895
+ "privacy": "private",
5896
+ "default": "null"
5839
5897
  },
5840
5898
  {
5841
5899
  "kind": "field",
5842
- "name": "prefix",
5900
+ "name": "_grab",
5843
5901
  "type": {
5844
- "text": "string"
5902
+ "text": "GrabState | null"
5845
5903
  },
5846
- "default": "\"\"",
5847
- "description": "Text rendered before the formatted value.",
5848
- "attribute": "prefix"
5904
+ "privacy": "private",
5905
+ "default": "null"
5849
5906
  },
5850
5907
  {
5851
5908
  "kind": "field",
5852
- "name": "suffix",
5909
+ "name": "_liveMessage",
5853
5910
  "type": {
5854
5911
  "text": "string"
5855
5912
  },
5856
- "default": "\"\"",
5857
- "description": "Text rendered after the formatted value.",
5858
- "attribute": "suffix"
5913
+ "privacy": "private",
5914
+ "default": "\"\""
5859
5915
  },
5860
5916
  {
5861
5917
  "kind": "field",
5862
- "name": "_now",
5863
- "privacy": "private"
5918
+ "name": "_highlighted",
5919
+ "privacy": "private",
5920
+ "default": "new Set<string>()"
5864
5921
  },
5865
5922
  {
5866
5923
  "kind": "field",
5867
- "name": "_timer",
5924
+ "name": "#refocus",
5925
+ "privacy": "private",
5868
5926
  "type": {
5869
- "text": "ReturnType<typeof setInterval> | null"
5927
+ "text": "string | null"
5870
5928
  },
5871
- "privacy": "private",
5872
5929
  "default": "null"
5873
- }
5874
- ],
5875
- "attributes": [
5930
+ },
5876
5931
  {
5877
- "name": "since",
5932
+ "kind": "field",
5933
+ "name": "#pendingHighlight",
5934
+ "privacy": "private",
5878
5935
  "type": {
5879
5936
  "text": "string | null"
5880
5937
  },
5881
- "default": "null",
5882
- "description": "ISO-8601 start instant; elapsed time is measured from here.",
5883
- "fieldName": "since"
5938
+ "default": "null"
5884
5939
  },
5885
5940
  {
5886
- "name": "format",
5887
- "type": {
5888
- "text": "DurationFormat"
5941
+ "kind": "field",
5942
+ "name": "#highlightTimers",
5943
+ "privacy": "private",
5944
+ "default": "new Map<string, ReturnType<typeof setTimeout>>()"
5945
+ },
5946
+ {
5947
+ "kind": "method",
5948
+ "name": "#findCard",
5949
+ "privacy": "private",
5950
+ "return": {
5951
+ "type": {
5952
+ "text": "{ card: KanbanCardData; column: KanbanColumnData; index: number } | null"
5953
+ }
5889
5954
  },
5890
- "default": "\"seconds\"",
5891
- "description": "`\"seconds\"` -> \"1 second\", \"12 seconds\"; `\"compact\"` -> \"12s\", \"3m 12s\", \"1h 03m 12s\".",
5892
- "fieldName": "format"
5955
+ "parameters": [
5956
+ {
5957
+ "name": "cardId",
5958
+ "type": {
5959
+ "text": "string"
5960
+ }
5961
+ }
5962
+ ],
5963
+ "description": "Returns the card, its column, and index for a card id, or null if unknown."
5893
5964
  },
5894
5965
  {
5895
- "name": "prefix",
5896
- "type": {
5897
- "text": "string"
5966
+ "kind": "method",
5967
+ "name": "#columnCount",
5968
+ "privacy": "private",
5969
+ "return": {
5970
+ "type": {
5971
+ "text": "number"
5972
+ }
5898
5973
  },
5899
- "default": "\"\"",
5900
- "description": "Text rendered before the formatted value.",
5901
- "fieldName": "prefix"
5974
+ "parameters": [
5975
+ {
5976
+ "name": "columnId",
5977
+ "type": {
5978
+ "text": "string"
5979
+ }
5980
+ }
5981
+ ],
5982
+ "description": "Number of cards currently in a column (0 if unknown)."
5902
5983
  },
5903
5984
  {
5904
- "name": "suffix",
5905
- "type": {
5906
- "text": "string"
5985
+ "kind": "method",
5986
+ "name": "#highlight",
5987
+ "privacy": "private",
5988
+ "return": {
5989
+ "type": {
5990
+ "text": "void"
5991
+ }
5907
5992
  },
5908
- "default": "\"\"",
5909
- "description": "Text rendered after the formatted value.",
5910
- "fieldName": "suffix"
5993
+ "parameters": [
5994
+ {
5995
+ "name": "cardId",
5996
+ "type": {
5997
+ "text": "string"
5998
+ }
5999
+ }
6000
+ ],
6001
+ "description": "Flashes the warm \"just moved\" highlight on a card, clearing it after HIGHLIGHT_MS."
6002
+ },
6003
+ {
6004
+ "kind": "method",
6005
+ "name": "#move",
6006
+ "privacy": "private",
6007
+ "return": {
6008
+ "type": {
6009
+ "text": "void"
6010
+ }
6011
+ },
6012
+ "parameters": [
6013
+ {
6014
+ "name": "cardId",
6015
+ "type": {
6016
+ "text": "string"
6017
+ }
6018
+ },
6019
+ {
6020
+ "name": "fromColumnId",
6021
+ "type": {
6022
+ "text": "string"
6023
+ }
6024
+ },
6025
+ {
6026
+ "name": "toColumnId",
6027
+ "type": {
6028
+ "text": "string"
6029
+ }
6030
+ },
6031
+ {
6032
+ "name": "toIndex",
6033
+ "type": {
6034
+ "text": "number"
6035
+ }
6036
+ }
6037
+ ],
6038
+ "description": "Applies a move to the working copy and emits `card-move`. `toIndex` is the destination index after removal."
6039
+ },
6040
+ {
6041
+ "kind": "method",
6042
+ "name": "#toDestIndex",
6043
+ "privacy": "private",
6044
+ "return": {
6045
+ "type": {
6046
+ "text": "number"
6047
+ }
6048
+ },
6049
+ "parameters": [
6050
+ {
6051
+ "name": "fromColumnId",
6052
+ "type": {
6053
+ "text": "string"
6054
+ }
6055
+ },
6056
+ {
6057
+ "name": "originIndex",
6058
+ "type": {
6059
+ "text": "number"
6060
+ }
6061
+ },
6062
+ {
6063
+ "name": "toColumnId",
6064
+ "type": {
6065
+ "text": "string"
6066
+ }
6067
+ },
6068
+ {
6069
+ "name": "domIndex",
6070
+ "type": {
6071
+ "text": "number"
6072
+ }
6073
+ }
6074
+ ],
6075
+ "description": "Converts a DOM insertion index (which counts the moving card) into a destination index after removal."
6076
+ },
6077
+ {
6078
+ "kind": "method",
6079
+ "name": "#pointerIndex",
6080
+ "privacy": "private",
6081
+ "return": {
6082
+ "type": {
6083
+ "text": "number"
6084
+ }
6085
+ },
6086
+ "parameters": [
6087
+ {
6088
+ "name": "columnId",
6089
+ "type": {
6090
+ "text": "string"
6091
+ }
6092
+ },
6093
+ {
6094
+ "name": "clientY",
6095
+ "type": {
6096
+ "text": "number"
6097
+ }
6098
+ }
6099
+ ],
6100
+ "description": "Computes the DOM insertion index within a column from the pointer's vertical position."
6101
+ },
6102
+ {
6103
+ "kind": "method",
6104
+ "name": "#onDragStart",
6105
+ "privacy": "private",
6106
+ "return": {
6107
+ "type": {
6108
+ "text": "void"
6109
+ }
6110
+ },
6111
+ "parameters": [
6112
+ {
6113
+ "name": "event",
6114
+ "type": {
6115
+ "text": "DragEvent"
6116
+ }
6117
+ },
6118
+ {
6119
+ "name": "columnId",
6120
+ "type": {
6121
+ "text": "string"
6122
+ }
6123
+ },
6124
+ {
6125
+ "name": "cardId",
6126
+ "type": {
6127
+ "text": "string"
6128
+ }
6129
+ }
6130
+ ]
6131
+ },
6132
+ {
6133
+ "kind": "method",
6134
+ "name": "#onDragOver",
6135
+ "privacy": "private",
6136
+ "return": {
6137
+ "type": {
6138
+ "text": "void"
6139
+ }
6140
+ },
6141
+ "parameters": [
6142
+ {
6143
+ "name": "event",
6144
+ "type": {
6145
+ "text": "DragEvent"
6146
+ }
6147
+ },
6148
+ {
6149
+ "name": "columnId",
6150
+ "type": {
6151
+ "text": "string"
6152
+ }
6153
+ }
6154
+ ]
6155
+ },
6156
+ {
6157
+ "kind": "method",
6158
+ "name": "#onDrop",
6159
+ "privacy": "private",
6160
+ "return": {
6161
+ "type": {
6162
+ "text": "void"
6163
+ }
6164
+ },
6165
+ "parameters": [
6166
+ {
6167
+ "name": "event",
6168
+ "type": {
6169
+ "text": "DragEvent"
6170
+ }
6171
+ },
6172
+ {
6173
+ "name": "columnId",
6174
+ "type": {
6175
+ "text": "string"
6176
+ }
6177
+ }
6178
+ ]
6179
+ },
6180
+ {
6181
+ "kind": "method",
6182
+ "name": "#onDragEnd",
6183
+ "privacy": "private",
6184
+ "return": {
6185
+ "type": {
6186
+ "text": "void"
6187
+ }
6188
+ }
6189
+ },
6190
+ {
6191
+ "kind": "method",
6192
+ "name": "#onCardKeydown",
6193
+ "privacy": "private",
6194
+ "return": {
6195
+ "type": {
6196
+ "text": "void"
6197
+ }
6198
+ },
6199
+ "parameters": [
6200
+ {
6201
+ "name": "event",
6202
+ "type": {
6203
+ "text": "KeyboardEvent"
6204
+ }
6205
+ },
6206
+ {
6207
+ "name": "columnId",
6208
+ "type": {
6209
+ "text": "string"
6210
+ }
6211
+ },
6212
+ {
6213
+ "name": "cardId",
6214
+ "type": {
6215
+ "text": "string"
6216
+ }
6217
+ }
6218
+ ]
6219
+ },
6220
+ {
6221
+ "kind": "method",
6222
+ "name": "#startGrab",
6223
+ "privacy": "private",
6224
+ "return": {
6225
+ "type": {
6226
+ "text": "void"
6227
+ }
6228
+ },
6229
+ "parameters": [
6230
+ {
6231
+ "name": "columnId",
6232
+ "type": {
6233
+ "text": "string"
6234
+ }
6235
+ },
6236
+ {
6237
+ "name": "cardId",
6238
+ "type": {
6239
+ "text": "string"
6240
+ }
6241
+ }
6242
+ ]
6243
+ },
6244
+ {
6245
+ "kind": "method",
6246
+ "name": "#grabMove",
6247
+ "privacy": "private",
6248
+ "return": {
6249
+ "type": {
6250
+ "text": "void"
6251
+ }
6252
+ },
6253
+ "parameters": [
6254
+ {
6255
+ "name": "columnDelta",
6256
+ "type": {
6257
+ "text": "number"
6258
+ }
6259
+ },
6260
+ {
6261
+ "name": "indexDelta",
6262
+ "type": {
6263
+ "text": "number"
6264
+ }
6265
+ }
6266
+ ]
6267
+ },
6268
+ {
6269
+ "kind": "method",
6270
+ "name": "#commitGrab",
6271
+ "privacy": "private",
6272
+ "return": {
6273
+ "type": {
6274
+ "text": "void"
6275
+ }
6276
+ }
6277
+ },
6278
+ {
6279
+ "kind": "method",
6280
+ "name": "#cancelGrab",
6281
+ "privacy": "private",
6282
+ "return": {
6283
+ "type": {
6284
+ "text": "void"
6285
+ }
6286
+ }
6287
+ },
6288
+ {
6289
+ "kind": "method",
6290
+ "name": "#announce",
6291
+ "privacy": "private",
6292
+ "return": {
6293
+ "type": {
6294
+ "text": "void"
6295
+ }
6296
+ },
6297
+ "parameters": [
6298
+ {
6299
+ "name": "message",
6300
+ "type": {
6301
+ "text": "string"
6302
+ }
6303
+ }
6304
+ ]
6305
+ },
6306
+ {
6307
+ "kind": "method",
6308
+ "name": "#openDetail",
6309
+ "privacy": "private",
6310
+ "return": {
6311
+ "type": {
6312
+ "text": "void"
6313
+ }
6314
+ },
6315
+ "parameters": [
6316
+ {
6317
+ "name": "cardId",
6318
+ "type": {
6319
+ "text": "string"
6320
+ }
6321
+ }
6322
+ ]
6323
+ },
6324
+ {
6325
+ "kind": "method",
6326
+ "name": "#closeDetail",
6327
+ "privacy": "private",
6328
+ "return": {
6329
+ "type": {
6330
+ "text": "void"
6331
+ }
6332
+ }
6333
+ },
6334
+ {
6335
+ "kind": "method",
6336
+ "name": "#onStateChange",
6337
+ "privacy": "private",
6338
+ "return": {
6339
+ "type": {
6340
+ "text": "void"
6341
+ }
6342
+ },
6343
+ "parameters": [
6344
+ {
6345
+ "name": "cardId",
6346
+ "type": {
6347
+ "text": "string"
6348
+ }
6349
+ },
6350
+ {
6351
+ "name": "fromColumnId",
6352
+ "type": {
6353
+ "text": "string"
6354
+ }
6355
+ },
6356
+ {
6357
+ "name": "toColumnId",
6358
+ "type": {
6359
+ "text": "string"
6360
+ }
6361
+ }
6362
+ ]
6363
+ },
6364
+ {
6365
+ "kind": "method",
6366
+ "name": "#renderColumn",
6367
+ "privacy": "private",
6368
+ "parameters": [
6369
+ {
6370
+ "name": "column",
6371
+ "type": {
6372
+ "text": "KanbanColumnData"
6373
+ }
6374
+ },
6375
+ {
6376
+ "name": "indicator",
6377
+ "type": {
6378
+ "text": "Indicator | null"
6379
+ }
6380
+ },
6381
+ {
6382
+ "name": "dragCardId",
6383
+ "type": {
6384
+ "text": "string | null"
6385
+ }
6386
+ }
6387
+ ]
6388
+ },
6389
+ {
6390
+ "kind": "method",
6391
+ "name": "#renderDetail",
6392
+ "privacy": "private"
6393
+ }
6394
+ ],
6395
+ "events": [
6396
+ {
6397
+ "name": "card-move",
6398
+ "type": {
6399
+ "text": "CustomEvent"
6400
+ },
6401
+ "description": "A card changed column/position; detail: { cardId, fromColumnId, toColumnId, toIndex }."
6402
+ },
6403
+ {
6404
+ "name": "card-open",
6405
+ "type": {
6406
+ "text": "CustomEvent"
6407
+ },
6408
+ "description": "A card's detail view was opened; detail: { cardId }."
6409
+ }
6410
+ ],
6411
+ "attributes": [
6412
+ {
6413
+ "name": "label",
6414
+ "type": {
6415
+ "text": "string"
6416
+ },
6417
+ "default": "\"Board\"",
6418
+ "description": "Accessible label for the board's group role.",
6419
+ "fieldName": "label"
6420
+ },
6421
+ {
6422
+ "name": "manual",
6423
+ "type": {
6424
+ "text": "boolean"
6425
+ },
6426
+ "default": "false",
6427
+ "description": "Server-authoritative mode. When true, moves emit `card-move` but are not\napplied to the board locally; it reflects only what you assign to\n`columns` (e.g. echoed back over WebSocket/SSE), keeping the server as the\nsingle source of truth. Defaults to optimistic local updates.",
6428
+ "fieldName": "manual"
6429
+ },
6430
+ {
6431
+ "name": "reorderable",
6432
+ "type": {
6433
+ "text": "boolean"
6434
+ },
6435
+ "default": "true",
6436
+ "description": "Whether cards can be reordered within a column. Defaults to true. Set false\nwhen intra-column order isn't persisted (no server `rank`): drag and\nkeyboard still move cards *between* columns (appended to the target), but\nreordering inside a column is disabled, so the UI only offers what sticks.",
6437
+ "fieldName": "reorderable"
6438
+ }
6439
+ ],
6440
+ "superclass": {
6441
+ "name": "LitElement",
6442
+ "package": "lit"
6443
+ },
6444
+ "tagName": "kanban-board",
6445
+ "customElement": true
6446
+ }
6447
+ ],
6448
+ "exports": [
6449
+ {
6450
+ "kind": "js",
6451
+ "name": "KanbanBoard",
6452
+ "declaration": {
6453
+ "name": "KanbanBoard",
6454
+ "module": "src/kanban-board.ts"
6455
+ }
6456
+ },
6457
+ {
6458
+ "kind": "custom-element-definition",
6459
+ "name": "kanban-board",
6460
+ "declaration": {
6461
+ "name": "KanbanBoard",
6462
+ "module": "src/kanban-board.ts"
6463
+ }
6464
+ }
6465
+ ]
6466
+ },
6467
+ {
6468
+ "kind": "javascript-module",
6469
+ "path": "src/kanban-card.ts",
6470
+ "declarations": [
6471
+ {
6472
+ "kind": "class",
6473
+ "description": "A single kanban card's compact overview: its ticket number and title only.\nPurely presentational and metadata-only — it is created and driven by\n`kanban-board`, which owns drag-and-drop, selection, and the richer detail\nview (description, state, and timestamps live in the board's popover, not\nhere). The board sets `draggable`, toggles the `dragging`/`grabbed`\nattributes for pointer and keyboard moves, and binds the open/keyboard\nhandlers; focus is delegated to the inner control so the board can move\nkeyboard focus to a card after a move.",
6474
+ "name": "KanbanCard",
6475
+ "members": [
6476
+ {
6477
+ "kind": "field",
6478
+ "name": "shadowRootOptions",
6479
+ "type": {
6480
+ "text": "object"
6481
+ },
6482
+ "static": true,
6483
+ "default": "{ ...LitElement.shadowRootOptions, delegatesFocus: true, }"
6484
+ },
6485
+ {
6486
+ "kind": "field",
6487
+ "name": "ticket",
6488
+ "type": {
6489
+ "text": "string"
6490
+ },
6491
+ "default": "\"\"",
6492
+ "description": "Ticket identifier shown before the title, e.g. `\"PROJ-142\"`.",
6493
+ "attribute": "ticket"
6494
+ },
6495
+ {
6496
+ "kind": "field",
6497
+ "name": "heading",
6498
+ "type": {
6499
+ "text": "string"
6500
+ },
6501
+ "default": "\"\"",
6502
+ "description": "Card title shown in the overview.",
6503
+ "attribute": "heading"
6504
+ }
6505
+ ],
6506
+ "attributes": [
6507
+ {
6508
+ "name": "ticket",
6509
+ "type": {
6510
+ "text": "string"
6511
+ },
6512
+ "default": "\"\"",
6513
+ "description": "Ticket identifier shown before the title, e.g. `\"PROJ-142\"`.",
6514
+ "fieldName": "ticket"
6515
+ },
6516
+ {
6517
+ "name": "heading",
6518
+ "type": {
6519
+ "text": "string"
6520
+ },
6521
+ "default": "\"\"",
6522
+ "description": "Card title shown in the overview.",
6523
+ "fieldName": "heading"
6524
+ }
6525
+ ],
6526
+ "superclass": {
6527
+ "name": "LitElement",
6528
+ "package": "lit"
6529
+ },
6530
+ "tagName": "kanban-card",
6531
+ "customElement": true
6532
+ }
6533
+ ],
6534
+ "exports": [
6535
+ {
6536
+ "kind": "js",
6537
+ "name": "KanbanCard",
6538
+ "declaration": {
6539
+ "name": "KanbanCard",
6540
+ "module": "src/kanban-card.ts"
6541
+ }
6542
+ },
6543
+ {
6544
+ "kind": "custom-element-definition",
6545
+ "name": "kanban-card",
6546
+ "declaration": {
6547
+ "name": "KanbanCard",
6548
+ "module": "src/kanban-card.ts"
6549
+ }
6550
+ }
6551
+ ]
6552
+ },
6553
+ {
6554
+ "kind": "javascript-module",
6555
+ "path": "src/kanban-column.ts",
6556
+ "declarations": [
6557
+ {
6558
+ "kind": "class",
6559
+ "description": "A single kanban column: a titled, vertically scrollable region that holds\nits `kanban-card` children (its default `<slot>`), with a header showing the\ncolumn title and card count. Purely presentational and metadata-only —\n`kanban-board` creates it, positions the cards inside it, and drives the\ndrop-target highlight via the reflected `dragover` attribute and the empty\nhint via `empty`.",
6560
+ "name": "KanbanColumn",
6561
+ "slots": [
6562
+ {
6563
+ "description": "The column's `kanban-card` elements, in display order.",
6564
+ "name": ""
6565
+ }
6566
+ ],
6567
+ "members": [
6568
+ {
6569
+ "kind": "field",
6570
+ "name": "heading",
6571
+ "type": {
6572
+ "text": "string"
6573
+ },
6574
+ "default": "\"\"",
6575
+ "description": "Column title shown in the header.",
6576
+ "attribute": "heading"
6577
+ },
6578
+ {
6579
+ "kind": "field",
6580
+ "name": "count",
6581
+ "type": {
6582
+ "text": "number"
6583
+ },
6584
+ "default": "0",
6585
+ "description": "Number of cards in the column, shown as a count badge.",
6586
+ "attribute": "count"
6587
+ },
6588
+ {
6589
+ "kind": "field",
6590
+ "name": "dragover",
6591
+ "type": {
6592
+ "text": "boolean"
6593
+ },
6594
+ "default": "false",
6595
+ "description": "Set by the board while a card is dragged over this column, for highlight.",
6596
+ "attribute": "dragover",
6597
+ "reflects": true
6598
+ },
6599
+ {
6600
+ "kind": "field",
6601
+ "name": "empty",
6602
+ "type": {
6603
+ "text": "boolean"
6604
+ },
6605
+ "default": "false",
6606
+ "description": "Whether the column currently has no cards, so it renders an empty hint.",
6607
+ "attribute": "empty",
6608
+ "reflects": true
6609
+ }
6610
+ ],
6611
+ "attributes": [
6612
+ {
6613
+ "name": "heading",
6614
+ "type": {
6615
+ "text": "string"
6616
+ },
6617
+ "default": "\"\"",
6618
+ "description": "Column title shown in the header.",
6619
+ "fieldName": "heading"
6620
+ },
6621
+ {
6622
+ "name": "count",
6623
+ "type": {
6624
+ "text": "number"
6625
+ },
6626
+ "default": "0",
6627
+ "description": "Number of cards in the column, shown as a count badge.",
6628
+ "fieldName": "count"
6629
+ },
6630
+ {
6631
+ "name": "dragover",
6632
+ "type": {
6633
+ "text": "boolean"
6634
+ },
6635
+ "default": "false",
6636
+ "description": "Set by the board while a card is dragged over this column, for highlight.",
6637
+ "fieldName": "dragover"
6638
+ },
6639
+ {
6640
+ "name": "empty",
6641
+ "type": {
6642
+ "text": "boolean"
6643
+ },
6644
+ "default": "false",
6645
+ "description": "Whether the column currently has no cards, so it renders an empty hint.",
6646
+ "fieldName": "empty"
6647
+ }
6648
+ ],
6649
+ "superclass": {
6650
+ "name": "LitElement",
6651
+ "package": "lit"
6652
+ },
6653
+ "tagName": "kanban-column",
6654
+ "customElement": true
6655
+ }
6656
+ ],
6657
+ "exports": [
6658
+ {
6659
+ "kind": "js",
6660
+ "name": "KanbanColumn",
6661
+ "declaration": {
6662
+ "name": "KanbanColumn",
6663
+ "module": "src/kanban-column.ts"
6664
+ }
6665
+ },
6666
+ {
6667
+ "kind": "custom-element-definition",
6668
+ "name": "kanban-column",
6669
+ "declaration": {
6670
+ "name": "KanbanColumn",
6671
+ "module": "src/kanban-column.ts"
6672
+ }
6673
+ }
6674
+ ]
6675
+ },
6676
+ {
6677
+ "kind": "javascript-module",
6678
+ "path": "src/kbd-hint.ts",
6679
+ "declarations": [
6680
+ {
6681
+ "kind": "class",
6682
+ "description": "Renders a keyboard shortcut as one boxed keycap per `+`-separated token.\nModifier keys are platform-aware: `Mod` becomes Command on macOS and\nControl elsewhere. Keycaps derive their presentation from `currentColor`,\nso the hint works inside neutral and accent-colored controls.",
6683
+ "name": "KbdHint",
6684
+ "members": [
6685
+ {
6686
+ "kind": "field",
6687
+ "name": "keys",
6688
+ "type": {
6689
+ "text": "string"
6690
+ },
6691
+ "default": "\"\"",
6692
+ "description": "Shortcut as case-insensitive, `+`-separated tokens, e.g. `\"Mod+Enter\"`.",
6693
+ "attribute": "keys"
6694
+ },
6695
+ {
6696
+ "kind": "field",
6697
+ "name": "platform",
6698
+ "type": {
6699
+ "text": "KbdPlatform"
6700
+ },
6701
+ "default": "\"auto\"",
6702
+ "description": "Platform override; `auto` detects macOS from the browser.",
6703
+ "attribute": "platform"
6704
+ },
6705
+ {
6706
+ "kind": "field",
6707
+ "name": "isMac",
6708
+ "type": {
6709
+ "text": "boolean"
6710
+ },
6711
+ "privacy": "private",
6712
+ "description": "Whether modifier aliases should use macOS glyphs.",
6713
+ "readonly": true
6714
+ },
6715
+ {
6716
+ "kind": "field",
6717
+ "name": "parsedKeys",
6718
+ "type": {
6719
+ "text": "KeyRender[]"
6720
+ },
6721
+ "privacy": "private",
6722
+ "description": "Parses the shortcut into visual/spoken key descriptors.",
6723
+ "readonly": true
6724
+ }
6725
+ ],
6726
+ "attributes": [
6727
+ {
6728
+ "name": "keys",
6729
+ "type": {
6730
+ "text": "string"
6731
+ },
6732
+ "default": "\"\"",
6733
+ "description": "Shortcut as case-insensitive, `+`-separated tokens, e.g. `\"Mod+Enter\"`.",
6734
+ "fieldName": "keys"
6735
+ },
6736
+ {
6737
+ "name": "platform",
6738
+ "type": {
6739
+ "text": "KbdPlatform"
6740
+ },
6741
+ "default": "\"auto\"",
6742
+ "description": "Platform override; `auto` detects macOS from the browser.",
6743
+ "fieldName": "platform"
6744
+ }
6745
+ ],
6746
+ "superclass": {
6747
+ "name": "LitElement",
6748
+ "package": "lit"
6749
+ },
6750
+ "tagName": "kbd-hint",
6751
+ "customElement": true
6752
+ }
6753
+ ],
6754
+ "exports": [
6755
+ {
6756
+ "kind": "js",
6757
+ "name": "KbdHint",
6758
+ "declaration": {
6759
+ "name": "KbdHint",
6760
+ "module": "src/kbd-hint.ts"
6761
+ }
6762
+ },
6763
+ {
6764
+ "kind": "custom-element-definition",
6765
+ "name": "kbd-hint",
6766
+ "declaration": {
6767
+ "name": "KbdHint",
6768
+ "module": "src/kbd-hint.ts"
6769
+ }
6770
+ }
6771
+ ]
6772
+ },
6773
+ {
6774
+ "kind": "javascript-module",
6775
+ "path": "src/live-timer.ts",
6776
+ "declarations": [
6777
+ {
6778
+ "kind": "class",
6779
+ "description": "Per-second ticking count-up timer, e.g. a live \"running for 12s\" or\n\"Sleeping for 3 seconds\" indicator. Renders nothing while `since` is unset\nor unparseable.",
6780
+ "name": "LiveTimer",
6781
+ "members": [
6782
+ {
6783
+ "kind": "field",
6784
+ "name": "since",
6785
+ "type": {
6786
+ "text": "string | null"
6787
+ },
6788
+ "default": "null",
6789
+ "description": "ISO-8601 start instant; elapsed time is measured from here.",
6790
+ "attribute": "since"
6791
+ },
6792
+ {
6793
+ "kind": "field",
6794
+ "name": "format",
6795
+ "type": {
6796
+ "text": "DurationFormat"
6797
+ },
6798
+ "default": "\"seconds\"",
6799
+ "description": "`\"seconds\"` -> \"1 second\", \"12 seconds\"; `\"compact\"` -> \"12s\", \"3m 12s\", \"1h 03m 12s\".",
6800
+ "attribute": "format"
6801
+ },
6802
+ {
6803
+ "kind": "field",
6804
+ "name": "prefix",
6805
+ "type": {
6806
+ "text": "string"
6807
+ },
6808
+ "default": "\"\"",
6809
+ "description": "Text rendered before the formatted value.",
6810
+ "attribute": "prefix"
6811
+ },
6812
+ {
6813
+ "kind": "field",
6814
+ "name": "suffix",
6815
+ "type": {
6816
+ "text": "string"
6817
+ },
6818
+ "default": "\"\"",
6819
+ "description": "Text rendered after the formatted value.",
6820
+ "attribute": "suffix"
6821
+ },
6822
+ {
6823
+ "kind": "field",
6824
+ "name": "_now",
6825
+ "privacy": "private"
6826
+ },
6827
+ {
6828
+ "kind": "field",
6829
+ "name": "_timer",
6830
+ "type": {
6831
+ "text": "ReturnType<typeof setInterval> | null"
6832
+ },
6833
+ "privacy": "private",
6834
+ "default": "null"
6835
+ }
6836
+ ],
6837
+ "attributes": [
6838
+ {
6839
+ "name": "since",
6840
+ "type": {
6841
+ "text": "string | null"
6842
+ },
6843
+ "default": "null",
6844
+ "description": "ISO-8601 start instant; elapsed time is measured from here.",
6845
+ "fieldName": "since"
6846
+ },
6847
+ {
6848
+ "name": "format",
6849
+ "type": {
6850
+ "text": "DurationFormat"
6851
+ },
6852
+ "default": "\"seconds\"",
6853
+ "description": "`\"seconds\"` -> \"1 second\", \"12 seconds\"; `\"compact\"` -> \"12s\", \"3m 12s\", \"1h 03m 12s\".",
6854
+ "fieldName": "format"
6855
+ },
6856
+ {
6857
+ "name": "prefix",
6858
+ "type": {
6859
+ "text": "string"
6860
+ },
6861
+ "default": "\"\"",
6862
+ "description": "Text rendered before the formatted value.",
6863
+ "fieldName": "prefix"
6864
+ },
6865
+ {
6866
+ "name": "suffix",
6867
+ "type": {
6868
+ "text": "string"
6869
+ },
6870
+ "default": "\"\"",
6871
+ "description": "Text rendered after the formatted value.",
6872
+ "fieldName": "suffix"
6873
+ }
6874
+ ],
6875
+ "superclass": {
6876
+ "name": "LitElement",
6877
+ "package": "lit"
6878
+ },
6879
+ "tagName": "live-timer",
6880
+ "customElement": true
6881
+ }
6882
+ ],
6883
+ "exports": [
6884
+ {
6885
+ "kind": "js",
6886
+ "name": "LiveTimer",
6887
+ "declaration": {
6888
+ "name": "LiveTimer",
6889
+ "module": "src/live-timer.ts"
6890
+ }
6891
+ },
6892
+ {
6893
+ "kind": "custom-element-definition",
6894
+ "name": "live-timer",
6895
+ "declaration": {
6896
+ "name": "LiveTimer",
6897
+ "module": "src/live-timer.ts"
6898
+ }
6899
+ }
6900
+ ]
6901
+ },
6902
+ {
6903
+ "kind": "javascript-module",
6904
+ "path": "src/map-circle.ts",
6905
+ "declarations": [
6906
+ {
6907
+ "kind": "class",
6908
+ "description": "A plain circular map marker: a light-to-dark gradient fill with a white\nouter ring, no point/tail (unlike `<map-pin>`) — for markers that don't\nneed to visually \"point\" at their exact coordinate. Purely a visual\nprimitive — it has no `mapbox-gl` (or any mapping library) dependency;\nthe consumer positions it, e.g. via `new mapboxgl.Marker({ element: el })`.\nIt can also replace the former `<map-point>` dense-layer primitive: use\n`size=\"14\" ring-width=\"3\"`, leave the slot empty, and rasterize one marker\nper color for use as a map `icon-image`.",
6909
+ "name": "MapCircle",
6910
+ "slots": [
6911
+ {
6912
+ "description": "Optional badge content shown centered on the circle — a rank number, an emoji, a small icon.",
6913
+ "name": ""
6914
+ }
6915
+ ],
6916
+ "members": [
6917
+ {
6918
+ "kind": "field",
6919
+ "name": "color",
6920
+ "type": {
6921
+ "text": "string"
6922
+ },
6923
+ "default": "\"#4f46e5\"",
6924
+ "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
6925
+ "attribute": "color"
6926
+ },
6927
+ {
6928
+ "kind": "field",
6929
+ "name": "size",
6930
+ "type": {
6931
+ "text": "number"
6932
+ },
6933
+ "default": "18",
6934
+ "description": "Diameter, in CSS pixels.",
6935
+ "attribute": "size"
6936
+ },
6937
+ {
6938
+ "kind": "field",
6939
+ "name": "ringWidth",
6940
+ "type": {
6941
+ "text": "number"
6942
+ },
6943
+ "default": "4",
6944
+ "description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
6945
+ "attribute": "ring-width"
6946
+ },
6947
+ {
6948
+ "kind": "field",
6949
+ "name": "highlighted",
6950
+ "type": {
6951
+ "text": "boolean"
6952
+ },
6953
+ "default": "false",
6954
+ "description": "Scales and glows the circle — a generic emphasis state (e.g. hover, selection).",
6955
+ "attribute": "highlighted",
6956
+ "reflects": true
6957
+ },
6958
+ {
6959
+ "kind": "field",
6960
+ "name": "_gradId",
6961
+ "privacy": "private",
6962
+ "readonly": true,
6963
+ "default": "`map-circle-grad-${gradientIdCounter++}`"
6964
+ }
6965
+ ],
6966
+ "attributes": [
6967
+ {
6968
+ "name": "color",
6969
+ "type": {
6970
+ "text": "string"
6971
+ },
6972
+ "default": "\"#4f46e5\"",
6973
+ "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
6974
+ "fieldName": "color"
6975
+ },
6976
+ {
6977
+ "name": "size",
6978
+ "type": {
6979
+ "text": "number"
6980
+ },
6981
+ "default": "18",
6982
+ "description": "Diameter, in CSS pixels.",
6983
+ "fieldName": "size"
6984
+ },
6985
+ {
6986
+ "name": "ring-width",
6987
+ "type": {
6988
+ "text": "number"
6989
+ },
6990
+ "default": "4",
6991
+ "description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
6992
+ "fieldName": "ringWidth"
6993
+ },
6994
+ {
6995
+ "name": "highlighted",
6996
+ "type": {
6997
+ "text": "boolean"
6998
+ },
6999
+ "default": "false",
7000
+ "description": "Scales and glows the circle — a generic emphasis state (e.g. hover, selection).",
7001
+ "fieldName": "highlighted"
5911
7002
  }
5912
7003
  ],
5913
7004
  "superclass": {
5914
7005
  "name": "LitElement",
5915
7006
  "package": "lit"
5916
7007
  },
5917
- "tagName": "live-timer",
7008
+ "tagName": "map-circle",
5918
7009
  "customElement": true
5919
7010
  }
5920
7011
  ],
5921
7012
  "exports": [
5922
7013
  {
5923
7014
  "kind": "js",
5924
- "name": "LiveTimer",
7015
+ "name": "MapCircle",
5925
7016
  "declaration": {
5926
- "name": "LiveTimer",
5927
- "module": "src/live-timer.ts"
7017
+ "name": "MapCircle",
7018
+ "module": "src/map-circle.ts"
5928
7019
  }
5929
7020
  },
5930
7021
  {
5931
7022
  "kind": "custom-element-definition",
5932
- "name": "live-timer",
7023
+ "name": "map-circle",
5933
7024
  "declaration": {
5934
- "name": "LiveTimer",
5935
- "module": "src/live-timer.ts"
7025
+ "name": "MapCircle",
7026
+ "module": "src/map-circle.ts"
5936
7027
  }
5937
7028
  }
5938
7029
  ]
5939
7030
  },
5940
7031
  {
5941
7032
  "kind": "javascript-module",
5942
- "path": "src/map-circle.ts",
7033
+ "path": "src/map-pin.ts",
5943
7034
  "declarations": [
5944
7035
  {
5945
7036
  "kind": "class",
5946
- "description": "A plain circular map marker: a light-to-dark gradient fill with a white\nouter ring, no point/tail (unlike `<map-pin>`) — for markers that don't\nneed to visually \"point\" at their exact coordinate. Purely a visual\nprimitive — it has no `mapbox-gl` (or any mapping library) dependency;\nthe consumer positions it, e.g. via `new mapboxgl.Marker({ element: el })`.\nIt can also replace the former `<map-point>` dense-layer primitive: use\n`size=\"14\" ring-width=\"3\"`, leave the slot empty, and rasterize one marker\nper color for use as a map `icon-image`.",
5947
- "name": "MapCircle",
7037
+ "description": "A circular \"Apple Maps\"-style map pin: a light-to-dark gradient fill with\na slight point at the bottom. Purely a visual primitive — it has no\n`mapbox-gl` (or any mapping library) dependency; the consumer positions\nit, e.g. via `new mapboxgl.Marker({ element: pinEl })`.",
7038
+ "name": "MapPin",
5948
7039
  "slots": [
5949
7040
  {
5950
- "description": "Optional badge content shown centered on the circle — a rank number, an emoji, a small icon.",
5951
- "name": ""
5952
- }
5953
- ],
5954
- "members": [
7041
+ "description": "Badge content shown centered on the pin's circular head — a rank number, an emoji, a small icon.",
7042
+ "name": ""
7043
+ }
7044
+ ],
7045
+ "members": [
7046
+ {
7047
+ "kind": "field",
7048
+ "name": "color",
7049
+ "type": {
7050
+ "text": "string"
7051
+ },
7052
+ "default": "\"#4f46e5\"",
7053
+ "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
7054
+ "attribute": "color"
7055
+ },
7056
+ {
7057
+ "kind": "field",
7058
+ "name": "size",
7059
+ "type": {
7060
+ "text": "number"
7061
+ },
7062
+ "default": "32",
7063
+ "description": "Diameter of the circular head, in CSS pixels.",
7064
+ "attribute": "size"
7065
+ },
7066
+ {
7067
+ "kind": "field",
7068
+ "name": "highlighted",
7069
+ "type": {
7070
+ "text": "boolean"
7071
+ },
7072
+ "default": "false",
7073
+ "description": "Scales and glows the pin — a generic emphasis state (e.g. hover, selection).",
7074
+ "attribute": "highlighted",
7075
+ "reflects": true
7076
+ },
7077
+ {
7078
+ "kind": "field",
7079
+ "name": "_gradId",
7080
+ "privacy": "private",
7081
+ "readonly": true,
7082
+ "default": "`map-pin-grad-${gradientIdCounter++}`"
7083
+ }
7084
+ ],
7085
+ "attributes": [
7086
+ {
7087
+ "name": "color",
7088
+ "type": {
7089
+ "text": "string"
7090
+ },
7091
+ "default": "\"#4f46e5\"",
7092
+ "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
7093
+ "fieldName": "color"
7094
+ },
7095
+ {
7096
+ "name": "size",
7097
+ "type": {
7098
+ "text": "number"
7099
+ },
7100
+ "default": "32",
7101
+ "description": "Diameter of the circular head, in CSS pixels.",
7102
+ "fieldName": "size"
7103
+ },
7104
+ {
7105
+ "name": "highlighted",
7106
+ "type": {
7107
+ "text": "boolean"
7108
+ },
7109
+ "default": "false",
7110
+ "description": "Scales and glows the pin — a generic emphasis state (e.g. hover, selection).",
7111
+ "fieldName": "highlighted"
7112
+ }
7113
+ ],
7114
+ "superclass": {
7115
+ "name": "LitElement",
7116
+ "package": "lit"
7117
+ },
7118
+ "tagName": "map-pin",
7119
+ "customElement": true
7120
+ }
7121
+ ],
7122
+ "exports": [
7123
+ {
7124
+ "kind": "js",
7125
+ "name": "MapPin",
7126
+ "declaration": {
7127
+ "name": "MapPin",
7128
+ "module": "src/map-pin.ts"
7129
+ }
7130
+ },
7131
+ {
7132
+ "kind": "custom-element-definition",
7133
+ "name": "map-pin",
7134
+ "declaration": {
7135
+ "name": "MapPin",
7136
+ "module": "src/map-pin.ts"
7137
+ }
7138
+ }
7139
+ ]
7140
+ },
7141
+ {
7142
+ "kind": "javascript-module",
7143
+ "path": "src/mcp-server.ts",
7144
+ "declarations": [],
7145
+ "exports": []
7146
+ },
7147
+ {
7148
+ "kind": "javascript-module",
7149
+ "path": "src/multi-select.ts",
7150
+ "declarations": [
7151
+ {
7152
+ "kind": "class",
7153
+ "description": "A form-associated multi-select: a trigger showing a compact summary of the\ncurrent selection, opening a multi-selectable listbox popover, with an\noptional removable-chip list of the chosen values. A drop-in generic\nreplacement for a native `<select multiple>` — set `name` on the element\nitself and each\nselected value is submitted as a repeated `name=value` entry, matching native\nmultiple-select semantics; `new FormData(form).getAll(name)` and\n`form.reset()` work unchanged.\n\nThe trigger visually follows `form-select`: a `2rem` field showing the\n`placeholder` when empty, the single selected label when one value is chosen,\nand `N selected` when several are. Set `show-chips` to additionally render\nthe selected values as compact chips below the trigger, each with an\naccessible `32px` remove control; chips are off by default and the region\nreserves no space while nothing is selected. Like `form-select`, the host is\n`display: block` and fills its container by default; constrain the host\n(`multi-select { display: inline-block; }`) to shrink it to its content\ninstead.\n\nSet `searchable` to replace the button trigger with an editable combobox that\ninfix-filters the predefined options by case-insensitive label. Typed text is\nonly a query: `values` changes exclusively when options are toggled, and an\nuncommitted query is discarded when the list closes.\n\nThe `variant` chooses between two presentations, and `searchable` applies to\nboth:\n\n- `\"dropdown\"` (default) is the popover form described above: a compact\n trigger (button, or search combobox when `searchable`) that opens a\n multi-selectable listbox on demand, closes on outside click / Escape, and\n shows a chevron.\n- `\"list\"` renders the options as a persistently visible, bordered surface\n with no popover, no chevron, and no `open` host state; it never registers\n outside-click listeners. Its scroll viewport is sized to roughly\n `visibleRows` `2rem` rows (see `visible-rows`). When not `searchable` the\n `listbox` itself is focusable and drives Arrow/Home/End/Enter/Space keyboard\n navigation via `aria-activedescendant`; when `searchable` a `2rem` search\n field sits above the list and owns navigation, and Escape only clears the\n query instead of hiding the list.",
7154
+ "name": "MultiSelect",
7155
+ "members": [
7156
+ {
7157
+ "kind": "field",
7158
+ "name": "formAssociated",
7159
+ "type": {
7160
+ "text": "boolean"
7161
+ },
7162
+ "static": true,
7163
+ "default": "true"
7164
+ },
7165
+ {
7166
+ "kind": "field",
7167
+ "name": "options",
7168
+ "type": {
7169
+ "text": "MultiSelectOption[]"
7170
+ },
7171
+ "default": "[]",
7172
+ "description": "The full list of selectable options."
7173
+ },
7174
+ {
7175
+ "kind": "field",
7176
+ "name": "values",
7177
+ "type": {
7178
+ "text": "string[]"
7179
+ },
7180
+ "default": "[]",
7181
+ "description": "The currently selected values. Programmatic assignments are deduplicated\nwhile preserving order and never fire `change`."
7182
+ },
7183
+ {
7184
+ "kind": "field",
7185
+ "name": "name",
7186
+ "type": {
7187
+ "text": "string"
7188
+ },
7189
+ "default": "\"\"",
7190
+ "description": "Form control name; each selected value submits under it.",
7191
+ "attribute": "name"
7192
+ },
7193
+ {
7194
+ "kind": "field",
7195
+ "name": "label",
7196
+ "type": {
7197
+ "text": "string"
7198
+ },
7199
+ "default": "\"\"",
7200
+ "description": "Accessible label applied to the trigger.",
7201
+ "attribute": "label"
7202
+ },
7203
+ {
7204
+ "kind": "field",
7205
+ "name": "placeholder",
7206
+ "type": {
7207
+ "text": "string"
7208
+ },
7209
+ "default": "\"Select options\"",
7210
+ "description": "Text shown on the trigger when nothing is selected.",
7211
+ "attribute": "placeholder"
7212
+ },
7213
+ {
7214
+ "kind": "field",
7215
+ "name": "disabled",
7216
+ "type": {
7217
+ "text": "boolean"
7218
+ },
7219
+ "default": "false",
7220
+ "description": "Disables the whole control, preventing the popover from opening.",
7221
+ "attribute": "disabled"
7222
+ },
7223
+ {
7224
+ "kind": "field",
7225
+ "name": "required",
7226
+ "type": {
7227
+ "text": "boolean"
7228
+ },
7229
+ "default": "false",
7230
+ "description": "Marks the control as required for native form validation.",
7231
+ "attribute": "required"
7232
+ },
7233
+ {
7234
+ "kind": "field",
7235
+ "name": "searchable",
7236
+ "type": {
7237
+ "text": "boolean"
7238
+ },
7239
+ "default": "false",
7240
+ "description": "Enables editable, case-insensitive infix filtering by option label.\nTyped text never becomes a selected value.",
7241
+ "attribute": "searchable",
7242
+ "reflects": true
7243
+ },
7244
+ {
7245
+ "kind": "field",
7246
+ "name": "max",
7247
+ "type": {
7248
+ "text": "number"
7249
+ },
7250
+ "default": "0",
7251
+ "description": "Maximum number of selectable values; `0` (default) means unlimited.",
7252
+ "attribute": "max"
7253
+ },
7254
+ {
7255
+ "kind": "field",
7256
+ "name": "variant",
7257
+ "type": {
7258
+ "text": "MultiSelectVariant"
7259
+ },
7260
+ "default": "\"dropdown\"",
7261
+ "description": "Presentation variant. `\"dropdown\"` (default) opens a popover listbox;\n`\"list\"` renders a persistently visible, bordered list surface. Reflected\nso consumers can style by `[variant=\"list\"]`.",
7262
+ "attribute": "variant",
7263
+ "reflects": true
7264
+ },
7265
+ {
7266
+ "kind": "field",
7267
+ "name": "visibleRows",
7268
+ "type": {
7269
+ "text": "number"
7270
+ },
7271
+ "default": "5",
7272
+ "description": "Number of `2rem` rows the `list` variant's scroll viewport shows before it\nscrolls, mirroring a native `<select size>`. Normalized to an integer of at\nleast `1` (default `5`); ignored by the `dropdown` variant.",
7273
+ "attribute": "visible-rows"
7274
+ },
7275
+ {
7276
+ "kind": "field",
7277
+ "name": "showChips",
7278
+ "type": {
7279
+ "text": "boolean"
7280
+ },
7281
+ "default": "false",
7282
+ "description": "When true, the selected values are also rendered as removable chips below\nthe trigger, each with an accessible `32px` remove control. Off by default:\nthe trigger already summarizes the selection, and values can be toggled off\nin the listbox. Applies to both variants.",
7283
+ "attribute": "show-chips"
7284
+ },
7285
+ {
7286
+ "kind": "field",
7287
+ "name": "_open",
7288
+ "type": {
7289
+ "text": "boolean"
7290
+ },
7291
+ "privacy": "private",
7292
+ "default": "false"
7293
+ },
7294
+ {
7295
+ "kind": "field",
7296
+ "name": "_activeIndex",
7297
+ "type": {
7298
+ "text": "number"
7299
+ },
7300
+ "privacy": "private",
7301
+ "default": "-1"
7302
+ },
7303
+ {
7304
+ "kind": "field",
7305
+ "name": "_query",
7306
+ "type": {
7307
+ "text": "string | null"
7308
+ },
7309
+ "privacy": "private",
7310
+ "default": "null"
7311
+ },
7312
+ {
7313
+ "kind": "field",
7314
+ "name": "_formDisabled",
7315
+ "type": {
7316
+ "text": "boolean"
7317
+ },
7318
+ "privacy": "private",
7319
+ "default": "false"
7320
+ },
7321
+ {
7322
+ "kind": "field",
7323
+ "name": "#internals",
7324
+ "privacy": "private"
7325
+ },
7326
+ {
7327
+ "kind": "field",
7328
+ "name": "#defaultValues",
7329
+ "privacy": "private",
7330
+ "type": {
7331
+ "text": "string[] | null"
7332
+ },
7333
+ "default": "null"
7334
+ },
7335
+ {
7336
+ "kind": "field",
7337
+ "name": "#listboxPointerDown",
7338
+ "privacy": "private",
7339
+ "type": {
7340
+ "text": "boolean"
7341
+ },
7342
+ "default": "false"
7343
+ },
7344
+ {
7345
+ "kind": "field",
7346
+ "name": "#suppressNextBlur",
7347
+ "privacy": "private",
7348
+ "type": {
7349
+ "text": "boolean"
7350
+ },
7351
+ "default": "false"
7352
+ },
7353
+ {
7354
+ "kind": "field",
7355
+ "name": "#restoringSearchFocus",
7356
+ "privacy": "private",
7357
+ "type": {
7358
+ "text": "boolean"
7359
+ },
7360
+ "default": "false"
7361
+ },
7362
+ {
7363
+ "kind": "field",
7364
+ "name": "#searchSelection",
7365
+ "privacy": "private",
7366
+ "type": {
7367
+ "text": "[number | null, number | null] | null"
7368
+ },
7369
+ "default": "null"
7370
+ },
7371
+ {
7372
+ "kind": "field",
7373
+ "name": "#isComposing",
7374
+ "privacy": "private",
7375
+ "type": {
7376
+ "text": "boolean"
7377
+ },
7378
+ "default": "false"
7379
+ },
7380
+ {
7381
+ "kind": "field",
7382
+ "name": "#compositionJustEnded",
7383
+ "privacy": "private",
7384
+ "type": {
7385
+ "text": "boolean"
7386
+ },
7387
+ "default": "false"
7388
+ },
7389
+ {
7390
+ "kind": "field",
7391
+ "name": "#compositionEndTimer",
7392
+ "privacy": "private",
7393
+ "type": {
7394
+ "text": "ReturnType<typeof setTimeout> | null"
7395
+ },
7396
+ "default": "null"
7397
+ },
7398
+ {
7399
+ "kind": "field",
7400
+ "name": "#blurTimer",
7401
+ "privacy": "private",
7402
+ "type": {
7403
+ "text": "ReturnType<typeof setTimeout> | null"
7404
+ },
7405
+ "default": "null"
7406
+ },
7407
+ {
7408
+ "kind": "field",
7409
+ "name": "#listboxId",
7410
+ "privacy": "private",
7411
+ "readonly": true,
7412
+ "default": "`multi-select-listbox-${++instanceCount}`"
7413
+ },
7414
+ {
7415
+ "kind": "field",
7416
+ "name": "#isDisabled",
7417
+ "privacy": "private",
7418
+ "type": {
7419
+ "text": "boolean"
7420
+ },
7421
+ "description": "Whether the host or an ancestor fieldset currently disables the control.",
7422
+ "readonly": true
7423
+ },
7424
+ {
7425
+ "kind": "field",
7426
+ "name": "#rows",
7427
+ "privacy": "private",
7428
+ "type": {
7429
+ "text": "number"
7430
+ },
7431
+ "description": "`visibleRows` normalized to a whole number of rows, at least `1`.",
7432
+ "readonly": true
7433
+ },
7434
+ {
7435
+ "kind": "method",
7436
+ "name": "formResetCallback",
7437
+ "return": {
7438
+ "type": {
7439
+ "text": "void"
7440
+ }
7441
+ },
7442
+ "description": "Restores the selection captured at first render, per the form contract."
7443
+ },
7444
+ {
7445
+ "kind": "method",
7446
+ "name": "formDisabledCallback",
7447
+ "return": {
7448
+ "type": {
7449
+ "text": "void"
7450
+ }
7451
+ },
7452
+ "parameters": [
7453
+ {
7454
+ "name": "disabled",
7455
+ "type": {
7456
+ "text": "boolean"
7457
+ }
7458
+ }
7459
+ ],
7460
+ "description": "Mirrors an ancestor fieldset's disabled state and closes the popover."
7461
+ },
7462
+ {
7463
+ "kind": "method",
7464
+ "name": "formStateRestoreCallback",
7465
+ "return": {
7466
+ "type": {
7467
+ "text": "void"
7468
+ }
7469
+ },
7470
+ "parameters": [
7471
+ {
7472
+ "name": "state",
7473
+ "type": {
7474
+ "text": "string | File | FormData | null"
7475
+ }
7476
+ }
7477
+ ],
7478
+ "description": "Restores the selection from the saved form state on navigation/autofill."
7479
+ },
7480
+ {
7481
+ "kind": "method",
7482
+ "name": "#syncFormValue",
7483
+ "privacy": "private",
7484
+ "return": {
7485
+ "type": {
7486
+ "text": "void"
7487
+ }
7488
+ }
7489
+ },
7490
+ {
7491
+ "kind": "method",
7492
+ "name": "#syncValidity",
7493
+ "privacy": "private",
7494
+ "return": {
7495
+ "type": {
7496
+ "text": "void"
7497
+ }
7498
+ }
7499
+ },
7500
+ {
7501
+ "kind": "method",
7502
+ "name": "#anchorElement",
7503
+ "privacy": "private",
7504
+ "return": {
7505
+ "type": {
7506
+ "text": "HTMLElement | null"
7507
+ }
7508
+ }
7509
+ },
7510
+ {
7511
+ "kind": "method",
7512
+ "name": "#dedupe",
7513
+ "privacy": "private",
7514
+ "return": {
7515
+ "type": {
7516
+ "text": "string[]"
7517
+ }
7518
+ },
7519
+ "parameters": [
7520
+ {
7521
+ "name": "values",
7522
+ "type": {
7523
+ "text": "readonly string[]"
7524
+ }
7525
+ }
7526
+ ]
7527
+ },
7528
+ {
7529
+ "kind": "method",
7530
+ "name": "#optionByValue",
7531
+ "privacy": "private",
7532
+ "return": {
7533
+ "type": {
7534
+ "text": "MultiSelectOption | undefined"
7535
+ }
7536
+ },
7537
+ "parameters": [
7538
+ {
7539
+ "name": "value",
7540
+ "type": {
7541
+ "text": "string"
7542
+ }
7543
+ }
7544
+ ],
7545
+ "description": "First option matching `value`, so duplicate values resolve deterministically."
7546
+ },
7547
+ {
7548
+ "kind": "method",
7549
+ "name": "#labelFor",
7550
+ "privacy": "private",
7551
+ "return": {
7552
+ "type": {
7553
+ "text": "string"
7554
+ }
7555
+ },
7556
+ "parameters": [
7557
+ {
7558
+ "name": "value",
7559
+ "type": {
7560
+ "text": "string"
7561
+ }
7562
+ }
7563
+ ]
7564
+ },
7565
+ {
7566
+ "kind": "method",
7567
+ "name": "#summaryText",
7568
+ "privacy": "private",
7569
+ "return": {
7570
+ "type": {
7571
+ "text": "string"
7572
+ }
7573
+ }
7574
+ },
7575
+ {
7576
+ "kind": "method",
7577
+ "name": "#liveText",
7578
+ "privacy": "private",
7579
+ "return": {
7580
+ "type": {
7581
+ "text": "string"
7582
+ }
7583
+ }
7584
+ },
7585
+ {
7586
+ "kind": "method",
7587
+ "name": "#visibleOptions",
7588
+ "privacy": "private",
7589
+ "return": {
7590
+ "type": {
7591
+ "text": "MultiSelectOption[]"
7592
+ }
7593
+ }
7594
+ },
7595
+ {
7596
+ "kind": "method",
7597
+ "name": "#atCap",
7598
+ "privacy": "private",
7599
+ "return": {
7600
+ "type": {
7601
+ "text": "boolean"
7602
+ }
7603
+ },
7604
+ "parameters": [
7605
+ {
7606
+ "name": "value",
7607
+ "type": {
7608
+ "text": "string"
7609
+ }
7610
+ }
7611
+ ],
7612
+ "description": "Whether `value` is currently at the selection cap and cannot be added."
7613
+ },
7614
+ {
7615
+ "kind": "method",
7616
+ "name": "#isOptionDisabled",
7617
+ "privacy": "private",
7618
+ "return": {
7619
+ "type": {
7620
+ "text": "boolean"
7621
+ }
7622
+ },
7623
+ "parameters": [
7624
+ {
7625
+ "name": "option",
7626
+ "type": {
7627
+ "text": "MultiSelectOption"
7628
+ }
7629
+ }
7630
+ ]
7631
+ },
7632
+ {
7633
+ "kind": "method",
7634
+ "name": "#toggleOption",
7635
+ "privacy": "private",
7636
+ "return": {
7637
+ "type": {
7638
+ "text": "void"
7639
+ }
7640
+ },
7641
+ "parameters": [
7642
+ {
7643
+ "name": "option",
7644
+ "type": {
7645
+ "text": "MultiSelectOption"
7646
+ }
7647
+ }
7648
+ ]
7649
+ },
7650
+ {
7651
+ "kind": "method",
7652
+ "name": "#removeValue",
7653
+ "privacy": "private",
7654
+ "return": {
7655
+ "type": {
7656
+ "text": "void"
7657
+ }
7658
+ },
7659
+ "parameters": [
7660
+ {
7661
+ "name": "value",
7662
+ "type": {
7663
+ "text": "string"
7664
+ }
7665
+ }
7666
+ ]
7667
+ },
7668
+ {
7669
+ "kind": "method",
7670
+ "name": "#commit",
7671
+ "privacy": "private",
7672
+ "return": {
7673
+ "type": {
7674
+ "text": "void"
7675
+ }
7676
+ },
7677
+ "parameters": [
7678
+ {
7679
+ "name": "next",
7680
+ "type": {
7681
+ "text": "string[]"
7682
+ }
7683
+ }
7684
+ ]
7685
+ },
7686
+ {
7687
+ "kind": "field",
7688
+ "name": "#onWindowMousedown",
7689
+ "privacy": "private"
7690
+ },
7691
+ {
7692
+ "kind": "field",
7693
+ "name": "#onFocusOut",
7694
+ "privacy": "private"
7695
+ },
7696
+ {
7697
+ "kind": "method",
7698
+ "name": "#toggle",
7699
+ "privacy": "private",
7700
+ "return": {
7701
+ "type": {
7702
+ "text": "void"
7703
+ }
7704
+ }
7705
+ },
7706
+ {
7707
+ "kind": "method",
7708
+ "name": "#open",
7709
+ "privacy": "private",
7710
+ "return": {
7711
+ "type": {
7712
+ "text": "void"
7713
+ }
7714
+ }
7715
+ },
7716
+ {
7717
+ "kind": "method",
7718
+ "name": "#close",
7719
+ "privacy": "private",
7720
+ "return": {
7721
+ "type": {
7722
+ "text": "void"
7723
+ }
7724
+ }
7725
+ },
7726
+ {
7727
+ "kind": "method",
7728
+ "name": "#initialActiveIndex",
7729
+ "privacy": "private",
7730
+ "return": {
7731
+ "type": {
7732
+ "text": "number"
7733
+ }
7734
+ }
7735
+ },
7736
+ {
7737
+ "kind": "method",
7738
+ "name": "#moveActive",
7739
+ "privacy": "private",
7740
+ "return": {
7741
+ "type": {
7742
+ "text": "void"
7743
+ }
7744
+ },
7745
+ "parameters": [
7746
+ {
7747
+ "name": "delta",
7748
+ "type": {
7749
+ "text": "number"
7750
+ }
7751
+ }
7752
+ ]
7753
+ },
7754
+ {
7755
+ "kind": "method",
7756
+ "name": "#toggleActive",
7757
+ "privacy": "private",
7758
+ "return": {
7759
+ "type": {
7760
+ "text": "void"
7761
+ }
7762
+ }
7763
+ },
5955
7764
  {
5956
- "kind": "field",
5957
- "name": "color",
5958
- "type": {
5959
- "text": "string"
7765
+ "kind": "method",
7766
+ "name": "#onTriggerKeydown",
7767
+ "privacy": "private",
7768
+ "return": {
7769
+ "type": {
7770
+ "text": "void"
7771
+ }
7772
+ },
7773
+ "parameters": [
7774
+ {
7775
+ "name": "e",
7776
+ "type": {
7777
+ "text": "KeyboardEvent"
7778
+ }
7779
+ }
7780
+ ]
7781
+ },
7782
+ {
7783
+ "kind": "method",
7784
+ "name": "#onSearchFocus",
7785
+ "privacy": "private",
7786
+ "return": {
7787
+ "type": {
7788
+ "text": "void"
7789
+ }
7790
+ },
7791
+ "parameters": [
7792
+ {
7793
+ "name": "e",
7794
+ "type": {
7795
+ "text": "FocusEvent"
7796
+ }
7797
+ }
7798
+ ]
7799
+ },
7800
+ {
7801
+ "kind": "method",
7802
+ "name": "#onSearchClick",
7803
+ "privacy": "private",
7804
+ "return": {
7805
+ "type": {
7806
+ "text": "void"
7807
+ }
7808
+ }
7809
+ },
7810
+ {
7811
+ "kind": "method",
7812
+ "name": "#onSearchMousedown",
7813
+ "privacy": "private",
7814
+ "return": {
7815
+ "type": {
7816
+ "text": "void"
7817
+ }
7818
+ },
7819
+ "parameters": [
7820
+ {
7821
+ "name": "e",
7822
+ "type": {
7823
+ "text": "MouseEvent"
7824
+ }
7825
+ }
7826
+ ]
7827
+ },
7828
+ {
7829
+ "kind": "method",
7830
+ "name": "#onListFocus",
7831
+ "privacy": "private",
7832
+ "return": {
7833
+ "type": {
7834
+ "text": "void"
7835
+ }
7836
+ },
7837
+ "description": "Seeds the active option when the persistent (non-searchable) list focuses."
7838
+ },
7839
+ {
7840
+ "kind": "method",
7841
+ "name": "#onListKeydown",
7842
+ "privacy": "private",
7843
+ "return": {
7844
+ "type": {
7845
+ "text": "void"
7846
+ }
7847
+ },
7848
+ "parameters": [
7849
+ {
7850
+ "name": "e",
7851
+ "type": {
7852
+ "text": "KeyboardEvent"
7853
+ }
7854
+ }
7855
+ ],
7856
+ "description": "Keyboard navigation for the focusable, non-searchable persistent list."
7857
+ },
7858
+ {
7859
+ "kind": "method",
7860
+ "name": "#onListSearchInput",
7861
+ "privacy": "private",
7862
+ "return": {
7863
+ "type": {
7864
+ "text": "void"
7865
+ }
7866
+ },
7867
+ "parameters": [
7868
+ {
7869
+ "name": "e",
7870
+ "type": {
7871
+ "text": "InputEvent"
7872
+ }
7873
+ }
7874
+ ],
7875
+ "description": "Infix-filters the persistent list as the searchable-list query changes."
7876
+ },
7877
+ {
7878
+ "kind": "method",
7879
+ "name": "#onListSearchKeydown",
7880
+ "privacy": "private",
7881
+ "return": {
7882
+ "type": {
7883
+ "text": "void"
7884
+ }
7885
+ },
7886
+ "parameters": [
7887
+ {
7888
+ "name": "e",
7889
+ "type": {
7890
+ "text": "KeyboardEvent"
7891
+ }
7892
+ }
7893
+ ],
7894
+ "description": "Keyboard navigation for the search field above a searchable persistent list."
7895
+ },
7896
+ {
7897
+ "kind": "method",
7898
+ "name": "#onSearchInput",
7899
+ "privacy": "private",
7900
+ "return": {
7901
+ "type": {
7902
+ "text": "void"
7903
+ }
7904
+ },
7905
+ "parameters": [
7906
+ {
7907
+ "name": "e",
7908
+ "type": {
7909
+ "text": "InputEvent"
7910
+ }
7911
+ }
7912
+ ]
7913
+ },
7914
+ {
7915
+ "kind": "method",
7916
+ "name": "#onSearchKeydown",
7917
+ "privacy": "private",
7918
+ "return": {
7919
+ "type": {
7920
+ "text": "void"
7921
+ }
7922
+ },
7923
+ "parameters": [
7924
+ {
7925
+ "name": "e",
7926
+ "type": {
7927
+ "text": "KeyboardEvent"
7928
+ }
7929
+ }
7930
+ ]
7931
+ },
7932
+ {
7933
+ "kind": "method",
7934
+ "name": "#onSearchBlur",
7935
+ "privacy": "private",
7936
+ "return": {
7937
+ "type": {
7938
+ "text": "void"
7939
+ }
7940
+ }
7941
+ },
7942
+ {
7943
+ "kind": "method",
7944
+ "name": "#focusSearchInput",
7945
+ "privacy": "private",
7946
+ "return": {
7947
+ "type": {
7948
+ "text": "void"
7949
+ }
7950
+ },
7951
+ "parameters": [
7952
+ {
7953
+ "name": "e",
7954
+ "type": {
7955
+ "text": "MouseEvent"
7956
+ }
7957
+ }
7958
+ ]
7959
+ },
7960
+ {
7961
+ "kind": "method",
7962
+ "name": "#onCompositionStart",
7963
+ "privacy": "private",
7964
+ "return": {
7965
+ "type": {
7966
+ "text": "void"
7967
+ }
7968
+ }
7969
+ },
7970
+ {
7971
+ "kind": "method",
7972
+ "name": "#onCompositionEnd",
7973
+ "privacy": "private",
7974
+ "return": {
7975
+ "type": {
7976
+ "text": "void"
7977
+ }
7978
+ }
7979
+ },
7980
+ {
7981
+ "kind": "method",
7982
+ "name": "#onListboxMousedown",
7983
+ "privacy": "private",
7984
+ "return": {
7985
+ "type": {
7986
+ "text": "void"
7987
+ }
7988
+ },
7989
+ "parameters": [
7990
+ {
7991
+ "name": "e",
7992
+ "type": {
7993
+ "text": "MouseEvent"
7994
+ }
7995
+ }
7996
+ ]
7997
+ },
7998
+ {
7999
+ "kind": "method",
8000
+ "name": "#onOptionMousedown",
8001
+ "privacy": "private",
8002
+ "return": {
8003
+ "type": {
8004
+ "text": "void"
8005
+ }
5960
8006
  },
5961
- "default": "\"#4f46e5\"",
5962
- "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
5963
- "attribute": "color"
8007
+ "parameters": [
8008
+ {
8009
+ "name": "e",
8010
+ "type": {
8011
+ "text": "MouseEvent"
8012
+ }
8013
+ },
8014
+ {
8015
+ "name": "option",
8016
+ "type": {
8017
+ "text": "MultiSelectOption"
8018
+ }
8019
+ }
8020
+ ]
5964
8021
  },
5965
8022
  {
5966
- "kind": "field",
5967
- "name": "size",
5968
- "type": {
5969
- "text": "number"
8023
+ "kind": "method",
8024
+ "name": "#optionIconSize",
8025
+ "privacy": "private",
8026
+ "return": {
8027
+ "type": {
8028
+ "text": "number"
8029
+ }
5970
8030
  },
5971
- "default": "18",
5972
- "description": "Diameter, in CSS pixels.",
5973
- "attribute": "size"
8031
+ "parameters": [
8032
+ {
8033
+ "name": "option",
8034
+ "type": {
8035
+ "text": "MultiSelectOption"
8036
+ }
8037
+ }
8038
+ ]
5974
8039
  },
5975
8040
  {
5976
- "kind": "field",
5977
- "name": "ringWidth",
5978
- "type": {
5979
- "text": "number"
5980
- },
5981
- "default": "4",
5982
- "description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
5983
- "attribute": "ring-width"
8041
+ "kind": "method",
8042
+ "name": "#renderOptionIcon",
8043
+ "privacy": "private",
8044
+ "parameters": [
8045
+ {
8046
+ "name": "option",
8047
+ "type": {
8048
+ "text": "MultiSelectOption"
8049
+ }
8050
+ }
8051
+ ]
5984
8052
  },
5985
8053
  {
5986
- "kind": "field",
5987
- "name": "highlighted",
5988
- "type": {
5989
- "text": "boolean"
5990
- },
5991
- "default": "false",
5992
- "description": "Scales and glows the circle — a generic emphasis state (e.g. hover, selection).",
5993
- "attribute": "highlighted",
5994
- "reflects": true
8054
+ "kind": "method",
8055
+ "name": "renderOptionItems",
8056
+ "privacy": "private",
8057
+ "parameters": [
8058
+ {
8059
+ "name": "options",
8060
+ "type": {
8061
+ "text": "MultiSelectOption[]"
8062
+ }
8063
+ }
8064
+ ],
8065
+ "description": "The shared `<li role=\"option\">` items for both variants' listboxes."
5995
8066
  },
5996
8067
  {
5997
- "kind": "field",
5998
- "name": "_gradId",
5999
- "privacy": "private",
6000
- "readonly": true,
6001
- "default": "`map-circle-grad-${gradientIdCounter++}`"
8068
+ "kind": "method",
8069
+ "name": "renderListbox",
8070
+ "privacy": "private"
8071
+ },
8072
+ {
8073
+ "kind": "method",
8074
+ "name": "renderChips",
8075
+ "privacy": "private"
8076
+ },
8077
+ {
8078
+ "kind": "method",
8079
+ "name": "renderSearchTrigger",
8080
+ "privacy": "private"
8081
+ },
8082
+ {
8083
+ "kind": "method",
8084
+ "name": "renderButtonTrigger",
8085
+ "privacy": "private"
8086
+ },
8087
+ {
8088
+ "kind": "method",
8089
+ "name": "renderListSearch",
8090
+ "privacy": "private"
8091
+ },
8092
+ {
8093
+ "kind": "method",
8094
+ "name": "renderPersistentList",
8095
+ "privacy": "private"
8096
+ },
8097
+ {
8098
+ "kind": "method",
8099
+ "name": "renderListVariant",
8100
+ "privacy": "private"
8101
+ }
8102
+ ],
8103
+ "events": [
8104
+ {
8105
+ "name": "change",
8106
+ "type": {
8107
+ "text": "CustomEvent"
8108
+ },
8109
+ "description": "Fired with `{ values: string[] }` (a copied array) when a value is added or removed through the UI. Programmatic `values` assignments do not fire it."
6002
8110
  }
6003
8111
  ],
6004
8112
  "attributes": [
6005
8113
  {
6006
- "name": "color",
8114
+ "name": "name",
6007
8115
  "type": {
6008
8116
  "text": "string"
6009
8117
  },
6010
- "default": "\"#4f46e5\"",
6011
- "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
6012
- "fieldName": "color"
8118
+ "default": "\"\"",
8119
+ "description": "Form control name; each selected value submits under it.",
8120
+ "fieldName": "name"
6013
8121
  },
6014
8122
  {
6015
- "name": "size",
8123
+ "name": "label",
6016
8124
  "type": {
6017
- "text": "number"
8125
+ "text": "string"
6018
8126
  },
6019
- "default": "18",
6020
- "description": "Diameter, in CSS pixels.",
6021
- "fieldName": "size"
8127
+ "default": "\"\"",
8128
+ "description": "Accessible label applied to the trigger.",
8129
+ "fieldName": "label"
6022
8130
  },
6023
8131
  {
6024
- "name": "ring-width",
8132
+ "name": "placeholder",
6025
8133
  "type": {
6026
- "text": "number"
8134
+ "text": "string"
6027
8135
  },
6028
- "default": "4",
6029
- "description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
6030
- "fieldName": "ringWidth"
8136
+ "default": "\"Select options\"",
8137
+ "description": "Text shown on the trigger when nothing is selected.",
8138
+ "fieldName": "placeholder"
6031
8139
  },
6032
8140
  {
6033
- "name": "highlighted",
8141
+ "name": "disabled",
6034
8142
  "type": {
6035
8143
  "text": "boolean"
6036
8144
  },
6037
8145
  "default": "false",
6038
- "description": "Scales and glows the circle a generic emphasis state (e.g. hover, selection).",
6039
- "fieldName": "highlighted"
6040
- }
6041
- ],
6042
- "superclass": {
6043
- "name": "LitElement",
6044
- "package": "lit"
6045
- },
6046
- "tagName": "map-circle",
6047
- "customElement": true
6048
- }
6049
- ],
6050
- "exports": [
6051
- {
6052
- "kind": "js",
6053
- "name": "MapCircle",
6054
- "declaration": {
6055
- "name": "MapCircle",
6056
- "module": "src/map-circle.ts"
6057
- }
6058
- },
6059
- {
6060
- "kind": "custom-element-definition",
6061
- "name": "map-circle",
6062
- "declaration": {
6063
- "name": "MapCircle",
6064
- "module": "src/map-circle.ts"
6065
- }
6066
- }
6067
- ]
6068
- },
6069
- {
6070
- "kind": "javascript-module",
6071
- "path": "src/map-pin.ts",
6072
- "declarations": [
6073
- {
6074
- "kind": "class",
6075
- "description": "A circular \"Apple Maps\"-style map pin: a light-to-dark gradient fill with\na slight point at the bottom. Purely a visual primitive — it has no\n`mapbox-gl` (or any mapping library) dependency; the consumer positions\nit, e.g. via `new mapboxgl.Marker({ element: pinEl })`.",
6076
- "name": "MapPin",
6077
- "slots": [
6078
- {
6079
- "description": "Badge content shown centered on the pin's circular head — a rank number, an emoji, a small icon.",
6080
- "name": ""
6081
- }
6082
- ],
6083
- "members": [
6084
- {
6085
- "kind": "field",
6086
- "name": "color",
6087
- "type": {
6088
- "text": "string"
6089
- },
6090
- "default": "\"#4f46e5\"",
6091
- "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
6092
- "attribute": "color"
8146
+ "description": "Disables the whole control, preventing the popover from opening.",
8147
+ "fieldName": "disabled"
6093
8148
  },
6094
8149
  {
6095
- "kind": "field",
6096
- "name": "size",
8150
+ "name": "required",
6097
8151
  "type": {
6098
- "text": "number"
8152
+ "text": "boolean"
6099
8153
  },
6100
- "default": "32",
6101
- "description": "Diameter of the circular head, in CSS pixels.",
6102
- "attribute": "size"
8154
+ "default": "false",
8155
+ "description": "Marks the control as required for native form validation.",
8156
+ "fieldName": "required"
6103
8157
  },
6104
8158
  {
6105
- "kind": "field",
6106
- "name": "highlighted",
8159
+ "name": "searchable",
6107
8160
  "type": {
6108
8161
  "text": "boolean"
6109
8162
  },
6110
8163
  "default": "false",
6111
- "description": "Scales and glows the pin a generic emphasis state (e.g. hover, selection).",
6112
- "attribute": "highlighted",
6113
- "reflects": true
8164
+ "description": "Enables editable, case-insensitive infix filtering by option label.\nTyped text never becomes a selected value.",
8165
+ "fieldName": "searchable"
6114
8166
  },
6115
8167
  {
6116
- "kind": "field",
6117
- "name": "_gradId",
6118
- "privacy": "private",
6119
- "readonly": true,
6120
- "default": "`map-pin-grad-${gradientIdCounter++}`"
6121
- }
6122
- ],
6123
- "attributes": [
8168
+ "name": "max",
8169
+ "type": {
8170
+ "text": "number"
8171
+ },
8172
+ "default": "0",
8173
+ "description": "Maximum number of selectable values; `0` (default) means unlimited.",
8174
+ "fieldName": "max"
8175
+ },
6124
8176
  {
6125
- "name": "color",
8177
+ "name": "variant",
6126
8178
  "type": {
6127
- "text": "string"
8179
+ "text": "MultiSelectVariant"
6128
8180
  },
6129
- "default": "\"#4f46e5\"",
6130
- "description": "Fill color; the gradient's light (top) and dark (bottom) stops are derived from this.",
6131
- "fieldName": "color"
8181
+ "default": "\"dropdown\"",
8182
+ "description": "Presentation variant. `\"dropdown\"` (default) opens a popover listbox;\n`\"list\"` renders a persistently visible, bordered list surface. Reflected\nso consumers can style by `[variant=\"list\"]`.",
8183
+ "fieldName": "variant"
6132
8184
  },
6133
8185
  {
6134
- "name": "size",
8186
+ "name": "visible-rows",
6135
8187
  "type": {
6136
8188
  "text": "number"
6137
8189
  },
6138
- "default": "32",
6139
- "description": "Diameter of the circular head, in CSS pixels.",
6140
- "fieldName": "size"
8190
+ "default": "5",
8191
+ "description": "Number of `2rem` rows the `list` variant's scroll viewport shows before it\nscrolls, mirroring a native `<select size>`. Normalized to an integer of at\nleast `1` (default `5`); ignored by the `dropdown` variant.",
8192
+ "fieldName": "visibleRows"
6141
8193
  },
6142
8194
  {
6143
- "name": "highlighted",
8195
+ "name": "show-chips",
6144
8196
  "type": {
6145
8197
  "text": "boolean"
6146
8198
  },
6147
8199
  "default": "false",
6148
- "description": "Scales and glows the pin a generic emphasis state (e.g. hover, selection).",
6149
- "fieldName": "highlighted"
8200
+ "description": "When true, the selected values are also rendered as removable chips below\nthe trigger, each with an accessible `32px` remove control. Off by default:\nthe trigger already summarizes the selection, and values can be toggled off\nin the listbox. Applies to both variants.",
8201
+ "fieldName": "showChips"
6150
8202
  }
6151
8203
  ],
6152
8204
  "superclass": {
6153
8205
  "name": "LitElement",
6154
8206
  "package": "lit"
6155
8207
  },
6156
- "tagName": "map-pin",
8208
+ "tagName": "multi-select",
6157
8209
  "customElement": true
6158
8210
  }
6159
8211
  ],
6160
8212
  "exports": [
6161
8213
  {
6162
8214
  "kind": "js",
6163
- "name": "MapPin",
8215
+ "name": "MultiSelect",
6164
8216
  "declaration": {
6165
- "name": "MapPin",
6166
- "module": "src/map-pin.ts"
8217
+ "name": "MultiSelect",
8218
+ "module": "src/multi-select.ts"
6167
8219
  }
6168
8220
  },
6169
8221
  {
6170
8222
  "kind": "custom-element-definition",
6171
- "name": "map-pin",
8223
+ "name": "multi-select",
6172
8224
  "declaration": {
6173
- "name": "MapPin",
6174
- "module": "src/map-pin.ts"
8225
+ "name": "MultiSelect",
8226
+ "module": "src/multi-select.ts"
6175
8227
  }
6176
8228
  }
6177
8229
  ]
6178
8230
  },
6179
- {
6180
- "kind": "javascript-module",
6181
- "path": "src/mcp-server.ts",
6182
- "declarations": [],
6183
- "exports": []
6184
- },
6185
8231
  {
6186
8232
  "kind": "javascript-module",
6187
8233
  "path": "src/percent-bar-chart.ts",
@@ -8388,7 +10434,7 @@
8388
10434
  "type": {
8389
10435
  "text": "Record<string, string>"
8390
10436
  },
8391
- "default": "{ // Colors \"--ui-primary\": \"#4f46e5\", // indigo-600 \"--ui-primary-hover\": \"#4338ca\", // indigo-700 \"--ui-info\": \"#0ea5e9\", // sky-500 \"--ui-info-hover\": \"#0284c7\", // sky-600 \"--ui-danger\": \"#dc2626\", // red-600 \"--ui-danger-hover\": \"#b91c1c\", // red-700 \"--ui-success\": \"#16a34a\", // green-600 \"--ui-warning\": \"#d97706\", // amber-600 \"--ui-warning-hover\": \"#b45309\", // amber-700 \"--ui-on-accent\": \"#ffffff\", \"--ui-text\": \"#0f172a\", // slate-900 \"--ui-text-muted\": \"#64748b\", // slate-500 \"--ui-border\": \"#e2e8f0\", // slate-200 \"--ui-surface\": \"#ffffff\", // white \"--ui-surface-muted\": \"#f8fafc\", // slate-50 \"--ui-tooltip\": \"#0f172a\", // slate-900 \"--ui-hover-overlay\": \"rgb(255 255 255 / 0.32)\", \"--ui-overlay\": \"rgb(15 23 42 / 0.45)\", // slate-900 / 45% // Shape / depth \"--ui-radius\": \"0.5rem\", // rounded-lg \"--ui-radius-sm\": \"0.25rem\", // rounded \"--ui-shadow\": \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\", // shadow-md \"--ui-shadow-lg\": \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\", // shadow-xl \"--ui-focus-ring\": \"0 0 0 3px rgb(79 70 229 / 0.35)\", // Type \"--ui-font\": 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"', \"--ui-font-mono\": \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\", \"--ui-font-size-lg\": \"1rem\", // text-base \"--ui-font-size\": \"0.875rem\", // text-sm \"--ui-font-size-sm\": \"0.75rem\", // text-xs \"--ui-font-size-xs\": \"0.6875rem\", // Font weights — the only four weights the system uses. \"--ui-font-weight-regular\": \"400\", \"--ui-font-weight-medium\": \"500\", \"--ui-font-weight-semibold\": \"600\", \"--ui-font-weight-bold\": \"700\", // Line heights — glyph (icon/marker box), tight (headings), normal (body). \"--ui-line-height-glyph\": \"1\", \"--ui-line-height-tight\": \"1.25\", \"--ui-line-height-normal\": \"1.5\", // Letter spacing / tracking — default and the single widened step. \"--ui-tracking-normal\": \"0\", \"--ui-tracking-wide\": \"0.04em\", }",
10437
+ "default": "{ // Colors \"--ui-primary\": \"#4f46e5\", // indigo-600 \"--ui-primary-hover\": \"#4338ca\", // indigo-700 \"--ui-info\": \"#0ea5e9\", // sky-500 \"--ui-info-hover\": \"#0284c7\", // sky-600 \"--ui-danger\": \"#dc2626\", // red-600 \"--ui-danger-hover\": \"#b91c1c\", // red-700 \"--ui-success\": \"#16a34a\", // green-600 \"--ui-warning\": \"#d97706\", // amber-600 \"--ui-warning-hover\": \"#b45309\", // amber-700 \"--ui-on-accent\": \"#ffffff\", \"--ui-text\": \"#0f172a\", // slate-900 \"--ui-text-muted\": \"#64748b\", // slate-500 \"--ui-border\": \"#e2e8f0\", // slate-200 \"--ui-surface\": \"#ffffff\", // white \"--ui-surface-muted\": \"#f8fafc\", // slate-50 \"--ui-highlight\": \"#fde68a\", // amber-200 — transient \"just changed\" flash \"--ui-tooltip\": \"#0f172a\", // slate-900 \"--ui-hover-overlay\": \"rgb(255 255 255 / 0.32)\", \"--ui-overlay\": \"rgb(15 23 42 / 0.45)\", // slate-900 / 45% // Shape / depth \"--ui-radius\": \"0.5rem\", // rounded-lg \"--ui-radius-sm\": \"0.25rem\", // rounded \"--ui-shadow\": \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\", // shadow-md \"--ui-shadow-lg\": \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\", // shadow-xl \"--ui-focus-ring\": \"0 0 0 3px rgb(79 70 229 / 0.35)\", // Type \"--ui-font\": 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"', \"--ui-font-mono\": \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\", \"--ui-font-size-lg\": \"1rem\", // text-base \"--ui-font-size\": \"0.875rem\", // text-sm \"--ui-font-size-sm\": \"0.75rem\", // text-xs \"--ui-font-size-xs\": \"0.6875rem\", // Font weights — the only four weights the system uses. \"--ui-font-weight-regular\": \"400\", \"--ui-font-weight-medium\": \"500\", \"--ui-font-weight-semibold\": \"600\", \"--ui-font-weight-bold\": \"700\", // Line heights — glyph (icon/marker box), tight (headings), normal (body). \"--ui-line-height-glyph\": \"1\", \"--ui-line-height-tight\": \"1.25\", \"--ui-line-height-normal\": \"1.5\", // Letter spacing / tracking — default and the single widened step. \"--ui-tracking-normal\": \"0\", \"--ui-tracking-wide\": \"0.04em\", }",
8392
10438
  "description": "Design token values, sourced from Tailwind v4's default theme palette.\nEach entry maps a `--ui-*` custom property name to its default value.\nThese are the same values baked in as `var(--ui-*, <fallback>)` fallbacks\nthroughout component styles, so components render correctly with zero\nexternal CSS. Consumers may override any of these by setting the custom\nproperty on `:root` or an ancestor element (see `tokens.css`)."
8393
10439
  },
8394
10440
  {
@@ -8397,7 +10443,7 @@
8397
10443
  "type": {
8398
10444
  "text": "Record<string, string>"
8399
10445
  },
8400
- "default": "{ \"--ui-primary\": \"#6366f1\", // indigo-500 \"--ui-primary-hover\": \"#818cf8\", // indigo-400 \"--ui-info\": \"#38bdf8\", // sky-400 \"--ui-info-hover\": \"#7dd3fc\", // sky-300 \"--ui-danger\": \"#ef4444\", // red-500 \"--ui-danger-hover\": \"#f87171\", // red-400 \"--ui-success\": \"#22c55e\", // green-500 \"--ui-warning\": \"#f59e0b\", // amber-500 \"--ui-warning-hover\": \"#fbbf24\", // amber-400 \"--ui-on-accent\": \"#ffffff\", \"--ui-text\": \"#f1f5f9\", // slate-100 \"--ui-text-muted\": \"#94a3b8\", // slate-400 \"--ui-border\": \"#334155\", // slate-700 \"--ui-surface\": \"#0f172a\", // slate-900 \"--ui-surface-muted\": \"#1e293b\", // slate-800 \"--ui-tooltip\": \"#020617\", // slate-950 \"--ui-hover-overlay\": \"rgb(255 255 255 / 0.12)\", \"--ui-overlay\": \"rgb(2 6 23 / 0.6)\", // slate-950 / 60% \"--ui-focus-ring\": \"0 0 0 3px rgb(99 102 241 / 0.45)\", }",
10446
+ "default": "{ \"--ui-primary\": \"#6366f1\", // indigo-500 \"--ui-primary-hover\": \"#818cf8\", // indigo-400 \"--ui-info\": \"#38bdf8\", // sky-400 \"--ui-info-hover\": \"#7dd3fc\", // sky-300 \"--ui-danger\": \"#ef4444\", // red-500 \"--ui-danger-hover\": \"#f87171\", // red-400 \"--ui-success\": \"#22c55e\", // green-500 \"--ui-warning\": \"#f59e0b\", // amber-500 \"--ui-warning-hover\": \"#fbbf24\", // amber-400 \"--ui-on-accent\": \"#ffffff\", \"--ui-text\": \"#f1f5f9\", // slate-100 \"--ui-text-muted\": \"#94a3b8\", // slate-400 \"--ui-border\": \"#334155\", // slate-700 \"--ui-surface\": \"#0f172a\", // slate-900 \"--ui-surface-muted\": \"#1e293b\", // slate-800 \"--ui-highlight\": \"#854d0e\", // amber-800 — transient \"just changed\" flash on dark \"--ui-tooltip\": \"#020617\", // slate-950 \"--ui-hover-overlay\": \"rgb(255 255 255 / 0.12)\", \"--ui-overlay\": \"rgb(2 6 23 / 0.6)\", // slate-950 / 60% \"--ui-focus-ring\": \"0 0 0 3px rgb(99 102 241 / 0.45)\", }",
8401
10447
  "description": "Dark-mode overrides for the same `--ui-*` custom properties, applied by\n`tokens.css` via `@media (prefers-color-scheme: dark)` and `[data-theme]`\n(see generate-tokens-css.mjs). Same Tailwind slate scale as the light\npalette, inverted, with primary/danger/success lightened one step (500\ninstead of 600) for sufficient contrast against dark surfaces. Shape/type\ntokens are theme-independent and not repeated here."
8402
10448
  },
8403
10449
  {