@supersoniks/concorde 5.1.2 → 5.1.3

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 (130) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +1 -1
  2. package/README.md +1 -1
  3. package/ai/README.md +29 -41
  4. package/ai/skills/concorde/SKILL.md +54 -324
  5. package/ai/skills/concorde/rules/composition.md +32 -0
  6. package/ai/skills/concorde/rules/data.md +47 -0
  7. package/ai/skills/concorde/rules/http.md +25 -0
  8. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  9. package/ai/skills/concorde/rules/styling.md +46 -0
  10. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  11. package/build-infos.json +1 -1
  12. package/concorde-core.bundle.js +21 -21
  13. package/concorde-core.es.js +977 -980
  14. package/custom-elements-manifest.public.config.mjs +8 -0
  15. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
  16. package/dist/concorde-core.bundle.js +21 -21
  17. package/dist/concorde-core.es.js +977 -980
  18. package/dist/docs-mock-api-sw.js +58 -223
  19. package/dist/docs-mock-api-sw.js.map +4 -4
  20. package/dist/img/concorde/plane_01.jpg +0 -0
  21. package/dist/img/concorde/plane_02.jpg +0 -0
  22. package/dist/img/concorde/plane_03.jpg +0 -0
  23. package/dist/img/concorde/plane_04.jpg +0 -0
  24. package/dist/img/concorde/plane_05.jpg +0 -0
  25. package/dist/img/concorde/plane_06.jpg +0 -0
  26. package/dist/img/concorde/plane_07.jpg +0 -0
  27. package/dist/img/concorde/plane_08.jpg +0 -0
  28. package/dist/img/concorde/plane_09.jpg +0 -0
  29. package/dist/img/concorde/plane_10.jpg +0 -0
  30. package/dist/img/concorde/plane_11.jpg +0 -0
  31. package/dist/img/concorde/plane_12.jpg +0 -0
  32. package/dist/img/concorde/plane_13.jpg +0 -0
  33. package/dist/img/og-concorde.jpg +0 -0
  34. package/dist/robots.txt +11 -10
  35. package/docs/.htaccess +7 -0
  36. package/docs/about.html +111 -0
  37. package/docs/about.md +22 -0
  38. package/docs/assets/{index-BgG6FFPt.js → index-6sS76xWj.js} +482 -500
  39. package/docs/assets/{index-x89XINSG.css → index-DkdPbH0F.css} +1 -1
  40. package/docs/core/components/functional/date/date.md +1 -1
  41. package/docs/core/components/functional/list/list.html +7 -5
  42. package/docs/core/components/functional/list/list.md +6 -2
  43. package/docs/core/components/ui/card/card.html +1 -1
  44. package/docs/core/components/ui/card/card.md +1 -1
  45. package/docs/core/components/ui/image/image.html +17 -17
  46. package/docs/core/components/ui/image/image.md +17 -17
  47. package/docs/core/components/ui/modal/modal.html +2 -2
  48. package/docs/core/components/ui/modal/modal.md +2 -2
  49. package/docs/custom-elements.json +16559 -0
  50. package/docs/docs/decorators/bind.html +22 -21
  51. package/docs/docs/decorators/bind.md +23 -24
  52. package/docs/docs/getting-started/ai-agents.html +50 -94
  53. package/docs/docs/getting-started/ai-agents.md +29 -55
  54. package/docs/docs/getting-started/dataFlow.html +1 -1
  55. package/docs/docs/getting-started/dataFlow.md +1 -1
  56. package/docs/docs/index.html +1 -1
  57. package/docs/hubs/decorators.html +11 -16
  58. package/docs/hubs/remote-data.html +5 -9
  59. package/docs/img/og-concorde.jpg +0 -0
  60. package/docs/index.html +91 -2
  61. package/docs/index.md +2 -2
  62. package/docs/llms-full.txt +58 -74
  63. package/docs/llms.txt +6 -4
  64. package/docs/privacy.html +122 -0
  65. package/docs/privacy.md +32 -0
  66. package/docs/sitemap.xml +6 -0
  67. package/docs/src/core/components/functional/date/date.md +1 -1
  68. package/docs/src/core/components/functional/list/list.md +6 -2
  69. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  70. package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
  71. package/docs/src/core/components/ui/card/card.md +1 -1
  72. package/docs/src/core/components/ui/image/image.md +17 -17
  73. package/docs/src/core/components/ui/modal/modal.md +2 -2
  74. package/docs/src/docs/decorators/bind.md +23 -24
  75. package/docs/src/docs/getting-started/ai-agents.md +29 -55
  76. package/docs/src/docs/getting-started/dataFlow.md +1 -1
  77. package/docs/src/docs/search/docs-search.json +100 -55
  78. package/docs/src/tsconfig.json +11 -5
  79. package/index.html +89 -0
  80. package/package.json +8 -4
  81. package/public/img/og-concorde.jpg +0 -0
  82. package/scripts/ai-init.mjs +104 -379
  83. package/scripts/ai-init.test.mjs +81 -239
  84. package/scripts/docs-markdown-vite-plugin.ts +11 -5
  85. package/scripts/docs-public-url.mjs +6 -0
  86. package/scripts/docs.htaccess +7 -0
  87. package/scripts/generate-cem.mjs +244 -0
  88. package/scripts/generate-cem.test.mjs +122 -0
  89. package/scripts/generate-crawl-docs.mjs +29 -5
  90. package/scripts/generate-sdui-catalog.mjs +11 -10
  91. package/scripts/post-build-docs.js +3 -0
  92. package/scripts/pre-publish.mjs +2 -1
  93. package/scripts/site-pages.mjs +212 -0
  94. package/scripts/site-pages.test.mjs +116 -0
  95. package/site-pages/about.md +22 -0
  96. package/site-pages/privacy.md +32 -0
  97. package/src/core/components/functional/date/date.md +1 -1
  98. package/src/core/components/functional/list/list.md +6 -2
  99. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  100. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  101. package/src/core/components/ui/card/card.md +1 -1
  102. package/src/core/components/ui/image/image.md +17 -17
  103. package/src/core/components/ui/modal/modal.md +2 -2
  104. package/src/core/decorators/subscriber/bind.ts +9 -14
  105. package/src/docs/components/docs-demo-sources.ts +3 -3
  106. package/src/docs/decorators/bind.md +23 -24
  107. package/src/docs/docs-location.spec.ts +10 -0
  108. package/src/docs/docs-location.ts +10 -0
  109. package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
  110. package/src/docs/example/docs-toggle-demos.ts +1 -1
  111. package/src/docs/getting-started/ai-agents.md +29 -55
  112. package/src/docs/getting-started/dataFlow.md +1 -1
  113. package/src/docs/home/home.ts +3 -1
  114. package/src/docs/navigation/navigation.ts +1 -1
  115. package/src/docs/search/docs-search.json +100 -55
  116. package/src/docs/search/markdown-renderer.ts +6 -1
  117. package/src/docs/tailwind/css/docs/content.css +4 -5
  118. package/src/tsconfig.json +11 -5
  119. package/src/tsconfig.tsbuildinfo +1 -1
  120. package/ai/AGENTS.md +0 -56
  121. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  122. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  123. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  124. package/ai/cursor/rules/concorde.mdc +0 -66
  125. package/ai/jetbrains/rules/concorde.md +0 -53
  126. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  127. package/ai/skills/concorde-imports/SKILL.md +0 -78
  128. package/ai/skills/concorde-menu/SKILL.md +0 -74
  129. package/ai/skills/concorde-scope/SKILL.md +0 -70
  130. package/ai/skills/concorde-theme/SKILL.md +0 -57
@@ -0,0 +1,35 @@
1
+ # Lists and forms
2
+
3
+ Docs: [List](https://concorde.supersoniks.org/core/components/functional/list) · [Queue](https://concorde.supersoniks.org/core/components/functional/queue) · [Input](https://concorde.supersoniks.org/core/components/ui/form/input) · [Submit](https://concorde.supersoniks.org/core/components/functional/submit)
4
+
5
+ ## Lists
6
+
7
+ `sonic-list` renders one array; `sonic-queue` loads a paginated API in batches (lazy scroll, filters). Render rows with Lit properties: `.items=${(item) => html`…`}`, plus `.noItems` · `.skeleton` · `.separator`. The `.` is required: functions only pass as properties. (`<template>` children exist for plain-HTML hosts only.)
8
+
9
+ ```ts
10
+ html`<sonic-queue
11
+ serviceURL="/api"
12
+ dataProviderExpression="flights?offset=$offset&limit=$limit"
13
+ key="flights"
14
+ dataFilterProvider=${flightSearchKey.path}
15
+ .items=${(f: Flight) => html`<app-flight-row .flight=${f}></app-flight-row>`}
16
+ .noItems=${() => html`No flights`}
17
+ ></sonic-queue>`;
18
+ ```
19
+
20
+ ## Forms
21
+
22
+ Fields write into the store by themselves: `formDataProvider` on a container (or on the field) + `name` on each field. No `@input` / `.value` wiring.
23
+
24
+ ```ts
25
+ html`<div formDataProvider=${checkInKey.path}>
26
+ <sonic-form-layout>
27
+ <sonic-input name="passenger" label="Passenger" required></sonic-input>
28
+ <sonic-select name="cabin" label="Cabin" .options=${cabins}></sonic-select>
29
+ </sonic-form-layout>
30
+ </div>`;
31
+ ```
32
+
33
+ - Read values with `sub()` / `@subscribe` on the form key.
34
+ - Submit with `@post` + `send()` (see [http.md](http.md)), or `sonic-submit`.
35
+ - A `sonic-queue` filters on a form store through `dataFilterProvider`: each non-empty field becomes a query parameter.
@@ -0,0 +1,46 @@
1
+ # Styling
2
+
3
+ Docs: [Theming](https://concorde.supersoniks.org/docs/getting-started/theming). Which parts and states components offer: [composition.md](composition.md).
4
+
5
+ ## Theme
6
+
7
+ One `<sonic-theme>` at the app root sets the tokens; popovers, modals and toasts mount under it.
8
+
9
+ ```ts
10
+ html`<sonic-theme theme="auto" color font class="block bg-base min-h-screen">…</sonic-theme>`;
11
+ ```
12
+
13
+ `theme="light" | "dark" | "auto"` picks a palette; without it, only your `--sc-*` overrides apply. To brand, override the **essential tokens** only (fills, `-content` pairs, `--sc-base-*`, `--sc-rounded`, fonts) on `sonic-theme` or `:root`. Never copy derived variables (`--sc-rounded-sm`, `--sc-btn-*`, …).
14
+
15
+ ## Rules
16
+
17
+ 1. **Compose components first.** `sonic-button`, `sonic-badge`, `sonic-alert`, `sonic-card`, `sonic-divider`, `sonic-menu`, `sonic-icon`, form fields… before hand-made markup ([composition.md](composition.md)).
18
+ 2. **Configure components with attributes, not CSS.** `type` (`primary` · `neutral` · `success` · `warning` · `danger` · `info`), `variant` (`outline` · `ghost` · `link`), `size` (`2xs` … `2xl`), `shape`, `status`. `class` on a `sonic-*` element is for layout only (width, margin, grid placement). No `::part()`, no private `--sc_*` variables.
19
+ 3. **Semantic tokens only.** Fills and their text go in pairs: `bg-primary text-primary-content`, `bg-danger text-danger-content`. Surfaces: `bg-base text-content`. Borders and muted UI: the neutral scale (`border-neutral-200`, `bg-neutral-50`, `text-neutral-600`). Never raw colors: no hex / rgb, no Tailwind palette (`blue-500`). A missing color becomes a theme token.
20
+ 4. **No `dark:` overrides.** Dark mode comes from `sonic-theme`; tokens switch by themselves.
21
+ 5. **Shape from tokens.** `rounded` / `rounded-lg`, `shadow` / `shadow-md` and `border` map to `--sc-rounded*`, `--sc-shadow*`, `--sc-border-width`. Avoid arbitrary values when they could be replaced easily (`rounded-[6px]`, `p-[13px]`).
22
+ 6. **Layout with `flex` / `grid` + `gap`.** Not `space-x-*` / `space-y-*` or margins between siblings. `size-10` instead of `w-10 h-10`.
23
+ 7. **Conditional classes with `classMap`** (`lit/directives/class-map.js`), dynamic values with `styleMap`. No template-literal ternaries inside `class="…"`.
24
+ 8. **Accessible by default.** Every field has a `label`. An icon-only button (`shape="circle"` / `"square"`) gets an `aria-label`; `sonic-icon` is `aria-hidden`.
25
+
26
+ ## In a component
27
+
28
+ Tailwind classes apply inside a shadow root only if the component includes the project's Tailwind styles in `static styles`. Otherwise, write `css` with the tokens:
29
+
30
+ ```ts
31
+ static styles = css`
32
+ :host { display: flex; gap: 0.5rem; }
33
+ .panel {
34
+ background: var(--sc-base);
35
+ color: var(--sc-base-content);
36
+ border: var(--sc-border-width) solid var(--sc-base-200);
37
+ border-radius: var(--sc-rounded);
38
+ }
39
+ `;
40
+ ```
41
+
42
+ ```ts
43
+ html`<div class=${classMap({ "bg-warning text-warning-content": delayed, "bg-base": !delayed })}>
44
+ <sonic-badge type=${delayed ? "warning" : "success"} size="sm">${status}</sonic-badge>
45
+ </div>`;
46
+ ```
@@ -0,0 +1,45 @@
1
+ # Troubleshooting
2
+
3
+ Symptom → usual cause → fix. Check these before reading framework source.
4
+
5
+ ## Data
6
+
7
+ | Symptom | Cause | Fix |
8
+ |---------|-------|-----|
9
+ | Value never updates in the view | Subscribed to a parent object; a child `set` mutates it in place without notifying | `sub(key.leaf)` or `@subscribe(key.leaf)` |
10
+ | Same, with a leaf key | `@subscribe` without `@state()` | Add `@state()` |
11
+ | Value frozen in a template | `get(key)` in `html` (one-time snapshot) | `sub(key)` |
12
+ | `sub()` renders nothing | The store has no value yet, or a placeholder is `null` / `undefined` | Set an initial value; check the host property |
13
+ | Store value overwritten when the component connects | `@publish` publishes a defined initializer on connect | Leave the property `undefined` to keep the store value |
14
+ | `@handle` method crashes on start | It runs on connect and on every assignment, `null` included | Guard nullish values, or `{ waitForAllDefined: true }` / `Skip.Nullish` |
15
+ | `get` / `set` / `dp` throw about a placeholder | A key with `${…}` reached imperative code | Decorator, or build the resolved key (`usersKey[id]`) |
16
+ | Decorator with a dynamic path does nothing | A placeholder property is `null` / `undefined` (or `""` with `skipEmptyPlaceholder`) | Set the host property |
17
+
18
+ ## HTTP
19
+
20
+ | Symptom | Cause | Fix |
21
+ |---------|-------|-----|
22
+ | `@get` never sends | No `serviceURL` on an ancestor (the GET waits for it); common in modals and portals | `<sonic-scope serviceURL>` around it, or `@get(endpoint, apiConfigKey)` |
23
+ | POST sent on every keystroke | `@post` sends on each body mutation by default | `{ autoPostOnBodyMutation: false }` + `send()` |
24
+ | Property `undefined` after the request | Read `this.board.flights` instead of the `ApiResult` | `this.board?.result?.flights` |
25
+
26
+ ## Lists and forms
27
+
28
+ | Symptom | Cause | Fix |
29
+ |---------|-------|-----|
30
+ | List renders nothing | `items=${fn}` without the dot, so the function is lost | `.items=${fn}` (same for `.noItems` / `.skeleton` / `.separator`) |
31
+ | `sonic-list` never requests | No `fetch` attribute | Add `fetch` |
32
+ | List empty although the response has data | `key` does not name the array in the response | Set `key` to the array property |
33
+ | `sonic-queue` loads one batch only | No `$offset` in `dataProviderExpression` | `…?offset=$offset&limit=$limit` |
34
+ | Queue ignores the filter form | `dataFilterProvider` is not the form's store, or fields lack `name` | Same key path on both; reload follows after a 400 ms debounce |
35
+ | Field value not in the store | Missing `name`, or no `formDataProvider` on the field or an ancestor (`dataProvider` does not count) | Add both; pass `key.path`, not the key |
36
+
37
+ ## Rendering and styling
38
+
39
+ | Symptom | Cause | Fix |
40
+ |---------|-------|-----|
41
+ | A `sonic-*` tag shows nothing | Its module was never imported | `import "@supersoniks/concorde/<name>"` |
42
+ | Tailwind classes ignored inside a component | The shadow root does not include the Tailwind styles | Add them to `static styles`, or use `css` with `var(--sc-*)` |
43
+ | Modal, popover or toast unstyled | No `sonic-theme` ancestor: they mount under the nearest one | Wrap the app in `sonic-theme` |
44
+ | `hideModal` button does not close the modal | The button is not inside `sonic-modal-actions` | Move it there |
45
+ | `get` is not a function / wrong `get` | Decorator `get` (`/decorators`) and store `get` (`/utils`) collide | Alias one: `get as getRequest` |
package/build-infos.json CHANGED
@@ -1 +1 @@
1
- {"date":1793021294}
1
+ {"date":1793095825}