sliccy 6.87.3 → 6.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/node-server/hostfs.d.ts +58 -0
- package/dist/node-server/hostfs.js +257 -0
- package/dist/node-server/index.js +10 -0
- package/dist/node-server/runtime-flags.d.ts +22 -0
- package/dist/node-server/runtime-flags.js +78 -2
- package/dist/ui/.vite/manifest.json +540 -449
- package/dist/ui/assets/CLAUDE-4LHXSyPA.js +1 -0
- package/dist/ui/assets/CLAUDE-Bio4HPGK.js +1 -0
- package/dist/ui/assets/MEMORY-6FXnIBfJ.js +135 -0
- package/dist/ui/assets/SKILL-BKUxKc7f.js +296 -0
- package/dist/ui/assets/SKILL-BKyxMoME.js +1 -0
- package/dist/ui/assets/SKILL-BcELX5TL.js +1 -0
- package/dist/ui/assets/SKILL-Bd5ykLEh.js +1 -0
- package/dist/ui/assets/SKILL-Bt-RhG0L.js +1 -0
- package/dist/ui/assets/SKILL-CED8RXQP.js +69 -0
- package/dist/ui/assets/SKILL-CNdAIhbb.js +1 -0
- package/dist/ui/assets/SKILL-CcMg6eqt.js +1 -0
- package/dist/ui/assets/SKILL-Ch-cOl61.js +1 -0
- package/dist/ui/assets/SKILL-CkfptFag.js +132 -0
- package/dist/ui/assets/SKILL-Ckg2XbSL.js +114 -0
- package/dist/ui/assets/SKILL-D40-t9w0.js +57 -0
- package/dist/ui/assets/SKILL-D4YtbN6n.js +1 -0
- package/dist/ui/assets/SKILL-DFKKFkzD.js +96 -0
- package/dist/ui/assets/SKILL-DJ815vTN.js +62 -0
- package/dist/ui/assets/SKILL-DLXzwsY4.js +1 -0
- package/dist/ui/assets/SKILL-DXIigmDy.js +35 -0
- package/dist/ui/assets/SKILL-DfSluXpV.js +385 -0
- package/dist/ui/assets/SKILL-DhKtVqb-.js +1 -0
- package/dist/ui/assets/SKILL-FnBxPcDX.js +1 -0
- package/dist/ui/assets/SKILL-HEHb9hIB.js +1 -0
- package/dist/ui/assets/SKILL-oOIS8LAm.js +1 -0
- package/dist/ui/assets/{account-store-DysucxMw.js → account-store-Bo-yhxpr.js} +4 -4
- package/dist/ui/assets/{account-store-Cy3TJKnu.js → account-store-CYz2dZdk.js} +2 -2
- package/dist/ui/assets/adobe-BABx4YQD.js +1 -0
- package/dist/ui/assets/adobe-DFu35kBc.js +2 -0
- package/dist/ui/assets/{angular-html-Cm4-xod0.js → angular-html-aPuBvESs.js} +1 -1
- package/dist/ui/assets/{angular-ts-Dopuir71.js → angular-ts-ocjSXnvf.js} +1 -1
- package/dist/ui/assets/anthropic-messages-CpSojOI8.js +39 -0
- package/dist/ui/assets/anthropic-messages-DbPJ2ji9.js +39 -0
- package/dist/ui/assets/api-endpoint-C00IT5T9.js +1 -0
- package/dist/ui/assets/api-endpoint-GRCyib6X.js +1 -0
- package/dist/ui/assets/{apply-layout-TIXzvNTN.js → apply-layout-DtjqLMjP.js} +1 -1
- package/dist/ui/assets/{apps-e--FORGt.js → apps-CvbmIZii.js} +1 -1
- package/dist/ui/assets/{astro-E_b8esPp.js → astro-go1PgQEf.js} +1 -1
- package/dist/ui/assets/auto-mount-table-CdyPAwVL.js +1 -0
- package/dist/ui/assets/{azure-openai-mDyNL8OK.js → azure-openai-C47c28Th.js} +2 -2
- package/dist/ui/assets/{azure-openai-C5josrBb.js → azure-openai-Dn30Odmd.js} +2 -2
- package/dist/ui/assets/azure-openai-responses-BcoOaRCx.js +1 -0
- package/dist/ui/assets/azure-openai-responses-DUMDrZ29.js +1 -0
- package/dist/ui/assets/backend-hostfs-Com-zF5W.js +1 -0
- package/dist/ui/assets/backend-hostfs-bQQx-S0W.js +1 -0
- package/dist/ui/assets/bedrock-camp-BcJEC3Pg.js +1 -0
- package/dist/ui/assets/bedrock-camp-LeceEQbU.js +1 -0
- package/dist/ui/assets/bedrock-camp-compat-CYnC9BQI.js +1 -0
- package/dist/ui/assets/bedrock-camp-compat-CgBMwna8.js +1 -0
- package/dist/ui/assets/{blade-mj2TcBTp.js → blade-DPPr6MF0.js} +1 -1
- package/dist/ui/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
- package/dist/ui/assets/catppuccin-latte-CtsyrtPq.js +1 -0
- package/dist/ui/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
- package/dist/ui/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
- package/dist/ui/assets/cerebras-B2bBHcWG.js +1 -0
- package/dist/ui/assets/cerebras-DWI7o4tY.js +1 -0
- package/dist/ui/assets/chime-CPc6qSh5.js +1 -0
- package/dist/ui/assets/claude-model-version-Csn7RPVg.js +1 -0
- package/dist/ui/assets/claude-model-version-DoVrYsKi.js +2 -0
- package/dist/ui/assets/{client-BTUV7dbh.js → client-DVC0x03n.js} +1 -1
- package/dist/ui/assets/{composer-speech-SNeD5SER.js → composer-speech-Cy4g3lh3.js} +1 -1
- package/dist/ui/assets/connect-llm-FevTa-aV.js +561 -0
- package/dist/ui/assets/{connect-surface-DqU2NC2c.js → connect-surface-Dd462OJJ.js} +1 -1
- package/dist/ui/assets/cpp-Ct9pQPqT.js +1 -0
- package/dist/ui/assets/{css-vJJohHMc.js → css-DlBQoFxe.js} +1 -1
- package/dist/ui/assets/db-DSIYsBgP.js +1 -0
- package/dist/ui/assets/db-cKsBsMMN.js +1 -0
- package/dist/ui/assets/discovery-preference-__0HPYJC.js +1 -0
- package/dist/ui/assets/dist-B4LJzMVB.js +1547 -0
- package/dist/ui/assets/{ensure-speech-assets-DvFwJX-M.js → ensure-speech-assets-CKwQ54O1.js} +1 -1
- package/dist/ui/assets/float-topology-DiK91BlA.js +1 -0
- package/dist/ui/assets/{follower-navigate-watcher-CNC7ybEv.js → follower-navigate-watcher-Dz-52eZY.js} +1 -1
- package/dist/ui/assets/fs-BHEdp-e-.js +1 -0
- package/dist/ui/assets/fs-MCOH5KUJ.js +2 -0
- package/dist/ui/assets/github-BbQO4O_c.js +2 -0
- package/dist/ui/assets/github-C-f5ThxJ.js +1 -0
- package/dist/ui/assets/github-copilot-DXrDbEzB.js +1 -0
- package/dist/ui/assets/github-copilot-Du-Z6Dmn.js +2 -0
- package/dist/ui/assets/{github-install-CFJLPySf.js → github-install-DbrQX7SM.js} +1 -1
- package/dist/ui/assets/{github-zip-C7dhlRG8.js → github-zip-BRYnSLKK.js} +1 -1
- package/dist/ui/assets/{go-BJwz_mda.js → go-rLFTqkRN.js} +1 -1
- package/dist/ui/assets/google-generative-ai-Dxo91M3n.js +1 -0
- package/dist/ui/assets/google-generative-ai-Rjh7hNBV.js +1 -0
- package/dist/ui/assets/{google-shared-BMJ_JErv.js → google-shared-CzJgTu-P.js} +3 -3
- package/dist/ui/assets/{google-shared-YqcyR4cm.js → google-shared-DQJPCU3d.js} +3 -3
- package/dist/ui/assets/google-vertex-61Jj0dk6.js +1 -0
- package/dist/ui/assets/google-vertex-DEwkNZJm.js +1 -0
- package/dist/ui/assets/{haml-DboNpPfQ.js → haml-Bqgi1Cau.js} +1 -1
- package/dist/ui/assets/{handlebars-Bv_jLwHk.js → handlebars-JgcNzdBj.js} +1 -1
- package/dist/ui/assets/{hear-D33CHppO.js → hear-BqNAK8-P.js} +1 -1
- package/dist/ui/assets/{horizon-bright-Br1oVSNq.js → horizon-bright-DSNQnXHK.js} +1 -1
- package/dist/ui/assets/host-command-zx0pt9Np.js +1 -0
- package/dist/ui/assets/{html-BLkwJ0Yd.js → html-BsvMqTlf.js} +1 -1
- package/dist/ui/assets/{html-derivative-B3p5VrMH.js → html-derivative-D9FvRNj4.js} +1 -1
- package/dist/ui/assets/icon-example-LUkiEXyS.js +111 -0
- package/dist/ui/assets/{jinja-BeFOxtqS.js → jinja-CixBDh_U.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-BcijiBMH.js → js-realm-worker-BZhHEqbx.js} +1 -1
- package/dist/ui/assets/jsh-runtime-extensions-DpVq60Gw.js +1 -0
- package/dist/ui/assets/julia-B5NbrcUp.js +1 -0
- package/dist/ui/assets/kanagawa-dragon-Bozd7klA.js +1 -0
- package/dist/ui/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
- package/dist/ui/assets/kanagawa-wave-BML5mF2J.js +1 -0
- package/dist/ui/assets/kernel-worker-CwFqaikq.js +5233 -0
- package/dist/ui/assets/legacy-api-aliases-BnRqMAef.js +1 -0
- package/dist/ui/assets/legacy-api-aliases-oJPAvhVV.js +1 -0
- package/dist/ui/assets/{lick-manager-BJhAu_iX.js → lick-manager-DFmMezV-.js} +1 -1
- package/dist/ui/assets/{lick-urls-AW0BSaf4.js → lick-urls-DcXOqXGm.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DiPcVRfN.js → lick-ws-bridge-CnkYvHKI.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CWRES2H2.js → lick-ws-bridge-yklVm5en.js} +1 -1
- package/dist/ui/assets/{local-llm-DVCKFUl_.js → local-llm-D4MgnlBK.js} +1 -1
- package/dist/ui/assets/{local-llm-CQE3URQQ.js → local-llm-HluX94rS.js} +1 -1
- package/dist/ui/assets/{main-DQS8QHXU.js → main-BmpPeikS.js} +3 -3
- package/dist/ui/assets/{marko-C3klgjEa.js → marko-DYWPPmCl.js} +1 -1
- package/dist/ui/assets/mdc-Cno1UUUH.js +1 -0
- package/dist/ui/assets/mistral-conversations-BtaPxrK1.js +4 -0
- package/dist/ui/assets/mistral-conversations-CDLVw-9i.js +4 -0
- package/dist/ui/assets/{transform-messages-DEFauvrq.js → models-4WTk3EBD.js} +1 -1
- package/dist/ui/assets/{transform-messages-N_eMsP2M.js → models-BSkXF4T6.js} +1 -1
- package/dist/ui/assets/monokai-B_bV9PQ9.js +1 -0
- package/dist/ui/assets/mount-B_Yysj_W.js +2 -0
- package/dist/ui/assets/{mount-bridge-client-4blXuJO1.js → mount-bridge-client-DZE6sHdr.js} +1 -1
- package/dist/ui/assets/mount-kkSADJkJ.js +1 -0
- package/dist/ui/assets/mount-recovery-xQgEe0_O.js +2 -0
- package/dist/ui/assets/new-session-CEfChDqS.js +2 -0
- package/dist/ui/assets/oauth-bootstrap-C9bBExq6.js +2 -0
- package/dist/ui/assets/oauth-service-CTntqv0R.js +1 -0
- package/dist/ui/assets/oauth-service-Uk8UIb05.js +1 -0
- package/dist/ui/assets/{onboarding-orchestrator-CaLdds3m.js → onboarding-orchestrator-CnKr0yBW.js} +1 -1
- package/dist/ui/assets/openai-codex-Cs4FnQBb.js +1 -0
- package/dist/ui/assets/openai-codex-QVbVkjdj.js +1 -0
- package/dist/ui/assets/openai-codex-responses-CPOJeFUY.js +7 -0
- package/dist/ui/assets/openai-codex-responses-jQR19NyX.js +7 -0
- package/dist/ui/assets/openai-completions-DGOcowq8.js +5 -0
- package/dist/ui/assets/openai-completions-DGZFJo5D.js +5 -0
- package/dist/ui/assets/openai-responses-CDTdSIhv.js +1 -0
- package/dist/ui/assets/openai-responses-bnETPgx9.js +1 -0
- package/dist/ui/assets/{openai-responses-shared-DxcsuzHF.js → openai-responses-shared-ChgvRZ74.js} +5 -5
- package/dist/ui/assets/{openai-responses-shared-DhnqxYC9.js → openai-responses-shared-DqJbHrek.js} +5 -5
- package/dist/ui/assets/openrouter-CKoiUQKB.js +1 -0
- package/dist/ui/assets/openrouter-D1wpkLTj.js +1 -0
- package/dist/ui/assets/{openrouter-oauth-Dy4Qqt06.js → openrouter-oauth-Df_lWai3.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DvOb1QMV.js → openrouter-oauth-jvPojBWW.js} +1 -1
- package/dist/ui/assets/{page-approval-service-Bbc3_KdK.js → page-approval-service-BsXoPdFJ.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-Dwk2fvsL.js +2 -0
- package/dist/ui/assets/{panelize-shell-BRldzPxv.js → panelize-shell-DG3fFAS4.js} +1 -1
- package/dist/ui/assets/patterns-ChiGbijt.js +171 -0
- package/dist/ui/assets/php-m5Ug_San.js +1 -0
- package/dist/ui/assets/port-bridge-client-BhmNRlRv.js +2 -0
- package/dist/ui/assets/port-bridge-client-Bz2N1tvn.js +1 -0
- package/dist/ui/assets/{provider-D2RXncrR.js → provider-Dq-ruSoi.js} +2 -2
- package/dist/ui/assets/{provider-Bk24TjUg.js → provider-Y9RlYumW.js} +1 -1
- package/dist/ui/assets/{provider-settings-B5B0NtAl.js → provider-settings-CR96H2hU.js} +1 -1
- package/dist/ui/assets/provider-settings-DNJS-V3F.js +2 -0
- package/dist/ui/assets/{provider-store-access-Cl5aZRx7.js → provider-store-access-BIdOJknd.js} +2 -2
- package/dist/ui/assets/provider-store-access-HarlSCPD.js +1 -0
- package/dist/ui/assets/providers-BS5_Cp-0.js +2 -0
- package/dist/ui/assets/providers-DRiRdLO1.js +1 -0
- package/dist/ui/assets/proxied-fetch-BGeNrvQ4.js +2 -0
- package/dist/ui/assets/proxied-fetch-Co-pb0x0.js +1 -0
- package/dist/ui/assets/{pug-BPcX_o8k.js → pug-B4bk2kWf.js} +1 -1
- package/dist/ui/assets/quick-llm-9w6VrHaQ.js +1 -0
- package/dist/ui/assets/r-C5FwQflr.js +1 -0
- package/dist/ui/assets/record-Cy655bTh.js +1 -0
- package/dist/ui/assets/{recovery-screen-MHXsY2RD.js → recovery-screen-ClVBOtr7.js} +1 -1
- package/dist/ui/assets/red-DX1BQOs8.js +1 -0
- package/dist/ui/assets/{redirect-uri-B1SxiY-b.js → redirect-uri-B16gkDfI.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-Dc-DMywu.js → remote-terminal-view-DSUnPeXp.js} +1 -1
- package/dist/ui/assets/rose-pine-aMsaMD1D.js +1 -0
- package/dist/ui/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
- package/dist/ui/assets/rose-pine-moon-DO-qXg-I.js +1 -0
- package/dist/ui/assets/{scss-0nEf0IT-.js → scss-BaZL6t2Y.js} +1 -1
- package/dist/ui/assets/secret-env-CjwX7z7b.js +1 -0
- package/dist/ui/assets/secret-topology-0AWfFTh5.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-cWDAnFqs.js → secrets-bridge-client-DCQ44RyR.js} +1 -1
- package/dist/ui/assets/{session-freezer-CnFBCb6j.js → session-freezer-BcGQ4XGx.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-Dlcwmn-_.js → setup-feature-flags-remote-8Rvw554i.js} +1 -1
- package/dist/ui/assets/setup-standalone-prelude-NNpe-m64.js +2 -0
- package/dist/ui/assets/setup-sudo-CbAhwltm.js +2 -0
- package/dist/ui/assets/{skills-C90t15zW.js → skills-CDnSEmr6.js} +1 -1
- package/dist/ui/assets/{slicc-diff-DsGtkf0J.js → slicc-diff-DhGIKKqP.js} +1 -1
- package/dist/ui/assets/slicc-version-2zGA6xjX.js +1 -0
- package/dist/ui/assets/smithy-Dgaz7aur.js +1 -0
- package/dist/ui/assets/solarized-dark-UdsmMDCL.js +1 -0
- package/dist/ui/assets/solarized-light-C1IUL_tW.js +1 -0
- package/dist/ui/assets/{speak-BDT9rGzg.js → speak-BSK3Souh.js} +1 -1
- package/dist/ui/assets/{sql-69VAgb2g.js → sql-DvarVTMJ.js} +1 -1
- package/dist/ui/assets/{src-DsDPrXOS.js → src-DXdqCrdV.js} +2 -2
- package/dist/ui/assets/{store-BmhLnay6.js → store-BKV5dm_L.js} +1 -1
- package/dist/ui/assets/{store-Cvg04_Rz.js → store-Bl3OB-Qs.js} +1 -1
- package/dist/ui/assets/style-guide-Bgzsk7bf.js +821 -0
- package/dist/ui/assets/{sudo-DYhM4jWf.js → sudo-Bnq6X0me.js} +2 -2
- package/dist/ui/assets/{svelte-B4PVQJ-7.js → svelte-D4FIy7cP.js} +1 -1
- package/dist/ui/assets/swift-CyEgAFGc.js +1 -0
- package/dist/ui/assets/temperature-support-B4x2xaWY.js +1 -0
- package/dist/ui/assets/temperature-support-Cpml9LfI.js +1 -0
- package/dist/ui/assets/transform-messages-DZg9zDcV.js +1 -0
- package/dist/ui/assets/transform-messages-XkZ1QnTb.js +1 -0
- package/dist/ui/assets/transformers-env-DPjdc2EQ.js +1 -0
- package/dist/ui/assets/tray-leader-iVJTGwuf.js +1 -0
- package/dist/ui/assets/{tray-leave-runtime-BGfdX5KF.js → tray-leave-runtime-CN7V9V7O.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-B1LF8Kd4.js → tray-runtime-config-CVoPQrT2.js} +1 -1
- package/dist/ui/assets/tray-runtime-config-D7cmCcHJ.js +1 -0
- package/dist/ui/assets/ts-tags-C4Ifwy6r.js +1 -0
- package/dist/ui/assets/{upgrade-detection-Co2MZvYS.js → upgrade-detection-BC1ILaMz.js} +1 -1
- package/dist/ui/assets/vesper-DdrHHSXu.js +1 -0
- package/dist/ui/assets/{voice-reply-CnP5wEO_.js → voice-reply-BNX-jA0G.js} +1 -1
- package/dist/ui/assets/{vue-Dg0Kv3qp.js → vue-Djeyp8pE.js} +1 -1
- package/dist/ui/assets/{vue-vine-DdvC-EE2.js → vue-vine-By_xyXdL.js} +1 -1
- package/dist/ui/assets/{wc-attach-DsMfUpx8.js → wc-attach-CPoS-Z-g.js} +2 -2
- package/dist/ui/assets/{wc-extension-CL-LAE0W.js → wc-extension-pWBTulcf.js} +2 -2
- package/dist/ui/assets/wc-float-label-D7p-4xyd.js +1 -0
- package/dist/ui/assets/wc-follower-TQacOT97.js +17 -0
- package/dist/ui/assets/wc-live-DlayGhwI.js +8 -0
- package/dist/ui/assets/wc-nav-Co62IQ9D.js +2 -0
- package/dist/ui/assets/wc-onboarding-CqIwr35s.js +2 -0
- package/dist/ui/assets/{wc-permissions-gFKCQht9.js → wc-permissions-Oq3nX_59.js} +2 -2
- package/dist/ui/assets/wc-placeholder-CRVvrH3X.js +4 -0
- package/dist/ui/assets/{wc-scoop-color-CByZNEJo.js → wc-scoop-color-ShF3p7L9.js} +1 -1
- package/dist/ui/assets/wc-settings-Bh5hIzNc.js +51 -0
- package/dist/ui/assets/{wc-shell-DC5bovWA.js → wc-shell-7mtD7TN_.js} +3 -3
- package/dist/ui/assets/wc-sprinkles-wT8iHdRT.js +2 -0
- package/dist/ui/assets/wc-tray-DxDD8gsB.js +2 -0
- package/dist/ui/assets/wc-tray-scoops-B7RY-1VN.js +5 -0
- package/dist/ui/assets/wc-unit-context-C0EqsYUD.js +1 -0
- package/dist/ui/assets/welcome-CyCMJDqG.js +621 -0
- package/dist/ui/assets/{welcome-detection-C2MvJDW4.js → welcome-detection-DjomEbCT.js} +1 -1
- package/dist/ui/assets/whisper-session-DpDs0sDL.js +2 -0
- package/dist/ui/assets/x_search-C-5p00-C.js +131 -0
- package/dist/ui/assets/xai-grok-CcoDiPUW.js +1 -0
- package/dist/ui/assets/xai-grok-DO4be7QU.js +1 -0
- package/dist/ui/index.html +16 -14
- package/dist/ui/packages/webapp/index.html +16 -14
- package/dist/ui/slicc-diff.js +1 -1
- package/package.json +3 -4
- package/dist/ui/assets/adobe-C19oqBaU.js +0 -1
- package/dist/ui/assets/adobe-Dv-gMc09.js +0 -2
- package/dist/ui/assets/anthropic-messages-BX4DpK10.js +0 -39
- package/dist/ui/assets/anthropic-messages-C-orWG7m.js +0 -39
- package/dist/ui/assets/azure-openai-responses-C2LleG-4.js +0 -1
- package/dist/ui/assets/azure-openai-responses-Df9YPxyp.js +0 -1
- package/dist/ui/assets/bedrock-camp-B0KF_4RS.js +0 -1
- package/dist/ui/assets/bedrock-camp-qpZqnqLa.js +0 -2
- package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +0 -1
- package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +0 -1
- package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +0 -1
- package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +0 -1
- package/dist/ui/assets/cerebras-CDHmZz_Y.js +0 -1
- package/dist/ui/assets/cerebras-DPV0CO1I.js +0 -1
- package/dist/ui/assets/cpp-CdhRINFH.js +0 -1
- package/dist/ui/assets/db-DATxPCUz.js +0 -1
- package/dist/ui/assets/db-DIbBClfy.js +0 -1
- package/dist/ui/assets/discovery-preference-fqUhjzeE.js +0 -1
- package/dist/ui/assets/dist-Dwa3Gdd4.js +0 -1547
- package/dist/ui/assets/float-topology-BgioAcOd.js +0 -1
- package/dist/ui/assets/fs-CIIVB1OK.js +0 -2
- package/dist/ui/assets/fs-QyBiZMuq.js +0 -1
- package/dist/ui/assets/github-Ctvr_Nd6.js +0 -1
- package/dist/ui/assets/github-Dq-ryVOk.js +0 -2
- package/dist/ui/assets/github-copilot-DIk_soEH.js +0 -1
- package/dist/ui/assets/github-copilot-Dm5mGSYk.js +0 -2
- package/dist/ui/assets/google-generative-ai-C9uw7Zks.js +0 -1
- package/dist/ui/assets/google-generative-ai-DHBc1oKV.js +0 -1
- package/dist/ui/assets/google-vertex-BaT3InWy.js +0 -1
- package/dist/ui/assets/google-vertex-DX8CfGr6.js +0 -1
- package/dist/ui/assets/host-command-G_JIdBPR.js +0 -1
- package/dist/ui/assets/julia-DibC-h6i.js +0 -1
- package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +0 -1
- package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +0 -1
- package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +0 -1
- package/dist/ui/assets/kernel-worker-BiaHa-Mz.js +0 -9014
- package/dist/ui/assets/legacy-api-aliases-CsTVszvY.js +0 -1
- package/dist/ui/assets/legacy-api-aliases-nSD9C16V.js +0 -1
- package/dist/ui/assets/mdc-Otire2H_.js +0 -1
- package/dist/ui/assets/mistral-conversations-BXo-tb0V.js +0 -4
- package/dist/ui/assets/mistral-conversations-Ck257tvp.js +0 -4
- package/dist/ui/assets/monokai-CdkpiU2Y.js +0 -1
- package/dist/ui/assets/mount-C20u28qg.js +0 -2
- package/dist/ui/assets/mount-DSlWOyRg.js +0 -1
- package/dist/ui/assets/mount-recovery-Dp2uzDT3.js +0 -2
- package/dist/ui/assets/new-session-BmqHuPnd.js +0 -2
- package/dist/ui/assets/oauth-bootstrap-CF5Iq7xU.js +0 -2
- package/dist/ui/assets/oauth-service-Bbrrl8Mr.js +0 -1
- package/dist/ui/assets/oauth-service-Cy5ngmcU.js +0 -1
- package/dist/ui/assets/openai-codex-C2ilX51B.js +0 -1
- package/dist/ui/assets/openai-codex-bhWf9evO.js +0 -1
- package/dist/ui/assets/openai-codex-responses-BQzefg3i.js +0 -7
- package/dist/ui/assets/openai-codex-responses-JtcU5b3J.js +0 -7
- package/dist/ui/assets/openai-completions-D-HjYi8x.js +0 -5
- package/dist/ui/assets/openai-completions-QMfwfjiE.js +0 -5
- package/dist/ui/assets/openai-responses-BVHnEPuG.js +0 -1
- package/dist/ui/assets/openai-responses-Ca0oWhbv.js +0 -1
- package/dist/ui/assets/openrouter-Bo62to17.js +0 -1
- package/dist/ui/assets/openrouter-C9_8OqEu.js +0 -1
- package/dist/ui/assets/panel-rpc-handlers-Dbhx7m_G.js +0 -2
- package/dist/ui/assets/php-BidqsJNR.js +0 -1
- package/dist/ui/assets/port-bridge-client-BbVs1yhx.js +0 -2
- package/dist/ui/assets/port-bridge-client-DxYLF2-N.js +0 -1
- package/dist/ui/assets/provider-settings-BTpBo_o4.js +0 -2
- package/dist/ui/assets/provider-store-access-CrgSlufJ.js +0 -1
- package/dist/ui/assets/providers-Crdj27DN.js +0 -2
- package/dist/ui/assets/providers-DX7EJ4Fn.js +0 -1
- package/dist/ui/assets/proxied-fetch-B4g-4VbQ.js +0 -2
- package/dist/ui/assets/proxied-fetch-n2pCvcgW.js +0 -1
- package/dist/ui/assets/quick-llm-hL6bZGLe.js +0 -1
- package/dist/ui/assets/r-Dzep-lPg.js +0 -1
- package/dist/ui/assets/record-Z5ZWTUPJ.js +0 -1
- package/dist/ui/assets/red-CJ3rzSJv.js +0 -1
- package/dist/ui/assets/rose-pine-BthvhNj6.js +0 -1
- package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +0 -1
- package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +0 -1
- package/dist/ui/assets/secret-env-q4hxkt7Z.js +0 -1
- package/dist/ui/assets/secret-topology-xLmXoozo.js +0 -1
- package/dist/ui/assets/setup-standalone-prelude-Btsjqjoe.js +0 -2
- package/dist/ui/assets/setup-sudo-DrmeHwU_.js +0 -2
- package/dist/ui/assets/slicc-version-tsUsi909.js +0 -1
- package/dist/ui/assets/solarized-dark-DV17i1UV.js +0 -1
- package/dist/ui/assets/solarized-light-DSh2HLQt.js +0 -1
- package/dist/ui/assets/swift-DonLKvLd.js +0 -1
- package/dist/ui/assets/transformers-env-SL0zTs7S.js +0 -1
- package/dist/ui/assets/tray-leader-DcRtwWl-.js +0 -1
- package/dist/ui/assets/tray-runtime-config-CRGwg9SK.js +0 -1
- package/dist/ui/assets/ts-tags-BUIgHz80.js +0 -1
- package/dist/ui/assets/vesper-D5bVUKB1.js +0 -1
- package/dist/ui/assets/wc-float-label-qqb_uM9y.js +0 -1
- package/dist/ui/assets/wc-follower-troAtcMA.js +0 -17
- package/dist/ui/assets/wc-live-D1Mon0cw.js +0 -8
- package/dist/ui/assets/wc-nav-BV6Jm98e.js +0 -2
- package/dist/ui/assets/wc-onboarding-Dg4E9VDR.js +0 -2
- package/dist/ui/assets/wc-placeholder-_6RUOpYH.js +0 -4
- package/dist/ui/assets/wc-settings-Dy5cPd8c.js +0 -51
- package/dist/ui/assets/wc-sprinkles-CDP31nXS.js +0 -2
- package/dist/ui/assets/wc-tray-MFZAPwt4.js +0 -2
- package/dist/ui/assets/wc-tray-scoops-B2RP8cgD.js +0 -5
- package/dist/ui/assets/whisper-session-Cf2gGkoR.js +0 -2
- package/dist/ui/assets/xai-grok-C2GEvF8U.js +0 -1
- package/dist/ui/assets/xai-grok-CoSPbEFx.js +0 -1
|
@@ -0,0 +1,821 @@
|
|
|
1
|
+
var e=`# Sprinkle Component Reference
|
|
2
|
+
|
|
3
|
+
Use these CSS classes in \`.shtml\` sprinkles. Do NOT write custom CSS — these components cover all common UI patterns.
|
|
4
|
+
|
|
5
|
+
## Rail icon (favicon)
|
|
6
|
+
|
|
7
|
+
Every sprinkle declares its own glyph for the side rail. Add this to the sprinkle's \`<head>\` (full-document mode) or as the first element (fragment mode):
|
|
8
|
+
|
|
9
|
+
\`\`\`html
|
|
10
|
+
<link rel="icon" href="music" />
|
|
11
|
+
\`\`\`
|
|
12
|
+
|
|
13
|
+
The \`href\` accepts a Lucide icon name (preferred), a VFS path to an SVG (\`/shared/sprinkles/<name>/icon.svg\`), or a \`data:image/svg+xml;...\` URL. See the SKILL.md "Sprinkle icon" section for the full list. **Never skip this** — generic Sparkles tiles are reserved for sprinkles that genuinely have no thematic anchor.
|
|
14
|
+
|
|
15
|
+
## Icons (Lucide)
|
|
16
|
+
|
|
17
|
+
Lucide icons are available globally via the \`LucideIcons\` object. Use declarative \`data-lucide\` attributes for automatic rendering, or create icons programmatically.
|
|
18
|
+
|
|
19
|
+
**Declarative usage** (recommended):
|
|
20
|
+
|
|
21
|
+
\`\`\`html
|
|
22
|
+
<!-- Icon renders automatically on page load -->
|
|
23
|
+
<i data-lucide="check" class="sprinkle-icon"></i>
|
|
24
|
+
<i data-lucide="alert-circle" class="sprinkle-icon"></i>
|
|
25
|
+
<i data-lucide="settings" class="sprinkle-icon sprinkle-icon--l"></i>
|
|
26
|
+
|
|
27
|
+
<!-- In buttons -->
|
|
28
|
+
<button class="sprinkle-btn sprinkle-btn--primary">
|
|
29
|
+
<i data-lucide="save" class="sprinkle-icon"></i> Save
|
|
30
|
+
</button>
|
|
31
|
+
|
|
32
|
+
<!-- In action card headers -->
|
|
33
|
+
<div class="sprinkle-action-card">
|
|
34
|
+
<div class="sprinkle-action-card__header">
|
|
35
|
+
<i data-lucide="check-circle" class="sprinkle-icon" style="color: var(--uxc-positive-text)"></i>
|
|
36
|
+
Success
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
**Programmatic usage**:
|
|
42
|
+
|
|
43
|
+
\`\`\`javascript
|
|
44
|
+
// Create an icon element
|
|
45
|
+
const icon = LucideIcons.createElement('alert-triangle', {
|
|
46
|
+
size: 20,
|
|
47
|
+
color: 'var(--uxc-notice-text)',
|
|
48
|
+
strokeWidth: 2,
|
|
49
|
+
class: 'sprinkle-icon',
|
|
50
|
+
});
|
|
51
|
+
container.appendChild(icon);
|
|
52
|
+
|
|
53
|
+
// Re-render all icons after dynamic content changes
|
|
54
|
+
LucideIcons.render();
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
**Icon sizes**:
|
|
58
|
+
|
|
59
|
+
- \`.sprinkle-icon--xs\` — 12px (small badges)
|
|
60
|
+
- \`.sprinkle-icon--s\` — 14px (inline text)
|
|
61
|
+
- \`.sprinkle-icon--m\` — 16px (default, buttons)
|
|
62
|
+
- \`.sprinkle-icon--l\` — 20px (headings)
|
|
63
|
+
- \`.sprinkle-icon--xl\` — 24px (large cards)
|
|
64
|
+
|
|
65
|
+
**Icon names**: Use kebab-case from [lucide.dev/icons](https://lucide.dev/icons) — e.g., \`check\`, \`alert-circle\`, \`arrow-right\`, \`file-text\`.
|
|
66
|
+
|
|
67
|
+
**NO EMOJIS** — Always use Lucide icons instead of emoji for a professional, consistent look.
|
|
68
|
+
|
|
69
|
+
## Cards
|
|
70
|
+
|
|
71
|
+
\`.sprinkle-card\` — Card with shadow (hover elevates).
|
|
72
|
+
\`.sprinkle-stat-card\` — Stat card with \`.value\` + \`.label\` children.
|
|
73
|
+
|
|
74
|
+
## Action Card (Inline)
|
|
75
|
+
|
|
76
|
+
\`.sprinkle-action-card\` — Compact card with background and border for inline chat interactions (\` \`\`\`shtml \` blocks). Children:
|
|
77
|
+
|
|
78
|
+
- \`__header\` — Bold title row. Put a \`.sprinkle-badge\` inside for status (auto right-aligned).
|
|
79
|
+
- \`__body\` — Secondary-color description text.
|
|
80
|
+
- \`__actions\` — Right-aligned button row with top border separator.
|
|
81
|
+
|
|
82
|
+
All three children are optional. Minimal card (just actions):
|
|
83
|
+
|
|
84
|
+
\`\`\`html
|
|
85
|
+
<div class="sprinkle-action-card">
|
|
86
|
+
<div class="sprinkle-action-card__actions">
|
|
87
|
+
<button class="sprinkle-btn sprinkle-btn--primary" onclick="slicc.lick('go')">Go</button>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
Use existing \`.sprinkle-*\` components inside the body:
|
|
93
|
+
|
|
94
|
+
\`\`\`html
|
|
95
|
+
<div class="sprinkle-action-card">
|
|
96
|
+
<div class="sprinkle-action-card__header">Build status</div>
|
|
97
|
+
<div class="sprinkle-action-card__body">
|
|
98
|
+
<div class="sprinkle-progress-bar" style="--progress:67%">
|
|
99
|
+
<div class="sprinkle-progress-bar__header">
|
|
100
|
+
<span class="label">Tests</span><span class="value">67%</span>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="sprinkle-progress-bar__track"><div class="fill" style="width:67%"></div></div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
Full card with all sections:
|
|
109
|
+
|
|
110
|
+
\`\`\`html
|
|
111
|
+
<div class="sprinkle-action-card">
|
|
112
|
+
<div class="sprinkle-action-card__header">
|
|
113
|
+
Title
|
|
114
|
+
<span class="sprinkle-badge sprinkle-badge--notice">status</span>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="sprinkle-action-card__body">Description</div>
|
|
117
|
+
<div class="sprinkle-action-card__actions">
|
|
118
|
+
<button class="sprinkle-btn sprinkle-btn--secondary" onclick="slicc.lick('cancel')">
|
|
119
|
+
Cancel
|
|
120
|
+
</button>
|
|
121
|
+
<button
|
|
122
|
+
class="sprinkle-btn sprinkle-btn--primary"
|
|
123
|
+
onclick="slicc.lick({action:'confirm',data:{id:1}})"
|
|
124
|
+
>
|
|
125
|
+
Confirm
|
|
126
|
+
</button>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
\`\`\`
|
|
130
|
+
|
|
131
|
+
## Table
|
|
132
|
+
|
|
133
|
+
\`.sprinkle-table\` — Table with bold headers (no uppercase!), row hover, row dividers.
|
|
134
|
+
|
|
135
|
+
## Badges
|
|
136
|
+
|
|
137
|
+
\`.sprinkle-badge\` — Bold solid-fill badges.
|
|
138
|
+
|
|
139
|
+
- Color variants: \`--positive\`, \`--negative\`, \`--notice\`, \`--informative\`, \`--accent\`
|
|
140
|
+
- Styles: \`--subtle\` (tinted bg), \`--outline\` (stroke)
|
|
141
|
+
- Combine: \`sprinkle-badge sprinkle-badge--subtle sprinkle-badge--positive\`
|
|
142
|
+
|
|
143
|
+
## Status Light
|
|
144
|
+
|
|
145
|
+
\`.sprinkle-status-light\` — Dot + label. Variants: \`--positive\`/\`--negative\`/\`--notice\`/\`--informative\`.
|
|
146
|
+
|
|
147
|
+
## Buttons
|
|
148
|
+
|
|
149
|
+
\`.sprinkle-btn\` — Pill-rounded buttons.
|
|
150
|
+
|
|
151
|
+
- \`--primary\` — accent fill (CTA)
|
|
152
|
+
- \`--secondary\` — outline with hover
|
|
153
|
+
- \`--negative\` — red fill (destructive)
|
|
154
|
+
- Add \`disabled\` attribute for disabled state
|
|
155
|
+
|
|
156
|
+
\`.sprinkle-btn-group\` — Gap-spaced button group (each button keeps pill shape).
|
|
157
|
+
|
|
158
|
+
## Text Field
|
|
159
|
+
|
|
160
|
+
\`.sprinkle-text-field\` — Styled text input. Use on \`<input type="text">\`. Supports hover/focus states, placeholder styling. Combine with \`.sprinkle-row\` for inline input + button layouts:
|
|
161
|
+
|
|
162
|
+
\`\`\`html
|
|
163
|
+
<div class="sprinkle-row">
|
|
164
|
+
<input type="text" class="sprinkle-text-field" style="flex:1" placeholder="https://example.com" />
|
|
165
|
+
<button class="sprinkle-btn sprinkle-btn--primary">Go</button>
|
|
166
|
+
</div>
|
|
167
|
+
\`\`\`
|
|
168
|
+
|
|
169
|
+
## Progress Bar
|
|
170
|
+
|
|
171
|
+
\`.sprinkle-progress-bar\` — Two modes:
|
|
172
|
+
|
|
173
|
+
**Simple** (no label):
|
|
174
|
+
|
|
175
|
+
\`\`\`html
|
|
176
|
+
<div class="sprinkle-progress-bar" style="--progress: 75%"></div>
|
|
177
|
+
\`\`\`
|
|
178
|
+
|
|
179
|
+
Auto-fills via \`::after\` pseudo-element. No children needed.
|
|
180
|
+
|
|
181
|
+
**With label**:
|
|
182
|
+
|
|
183
|
+
\`\`\`html
|
|
184
|
+
<div class="sprinkle-progress-bar">
|
|
185
|
+
<div class="sprinkle-progress-bar__header">
|
|
186
|
+
<span class="label">Upload</span>
|
|
187
|
+
<span class="value">75%</span>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="sprinkle-progress-bar__track">
|
|
190
|
+
<div class="fill" style="width: 75%"></div>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
\`\`\`
|
|
194
|
+
|
|
195
|
+
The \`.fill\` child accepts inline \`style="width: 75%"\` or \`data-value="75"\`. Alternatively, omit \`.fill\` and set \`--progress\` on the container.
|
|
196
|
+
|
|
197
|
+
**Color variants** on container: \`--positive\` (green), \`--negative\` (red), \`--notice\` (orange), \`--informative\` (blue).
|
|
198
|
+
Inline \`--fill-color\` overrides the variant color.
|
|
199
|
+
|
|
200
|
+
## Meter
|
|
201
|
+
|
|
202
|
+
\`.sprinkle-meter\` — Same structure as progress bar but uses \`.sprinkle-meter\`, \`__header\`/\`__track\`.
|
|
203
|
+
|
|
204
|
+
**Simple**:
|
|
205
|
+
|
|
206
|
+
\`\`\`html
|
|
207
|
+
<div class="sprinkle-meter" style="--value: 50%"></div>
|
|
208
|
+
\`\`\`
|
|
209
|
+
|
|
210
|
+
Accepts \`--value\` or \`--progress\` for fill width.
|
|
211
|
+
|
|
212
|
+
**Variants**: \`--positive\`/\`--notice\`/\`--negative\` on container. Default color: informative (blue).
|
|
213
|
+
|
|
214
|
+
## Code Editor
|
|
215
|
+
|
|
216
|
+
\`<slicc-editor>\` — Pre-bundled CodeMirror 6 editor custom element. Use for code editing, config editing, or any domain-specific text with syntax highlighting. The editor auto-themes to S2 tokens (dark/light).
|
|
217
|
+
|
|
218
|
+
**Attributes:**
|
|
219
|
+
|
|
220
|
+
- \`language\` — Built-in: \`json\`, \`markdown\`, \`html\`. Omit for plain text.
|
|
221
|
+
- \`line-numbers\` — Show line numbers gutter (boolean attribute).
|
|
222
|
+
- \`readonly\` — Disable editing (boolean attribute).
|
|
223
|
+
|
|
224
|
+
**Inner text** is used as placeholder (shown when editor is empty).
|
|
225
|
+
|
|
226
|
+
**Basic usage:**
|
|
227
|
+
|
|
228
|
+
\`\`\`html
|
|
229
|
+
<slicc-editor id="config" language="json" line-numbers>{"key": "value"}</slicc-editor>
|
|
230
|
+
<script>
|
|
231
|
+
var editor = document.getElementById('config');
|
|
232
|
+
editor.value = '{\\n "name": "example"\\n}';
|
|
233
|
+
editor.addEventListener('change', function (e) {
|
|
234
|
+
slicc.lick({ action: 'config-changed', data: { value: e.detail.value } });
|
|
235
|
+
});
|
|
236
|
+
<\/script>
|
|
237
|
+
\`\`\`
|
|
238
|
+
|
|
239
|
+
**Custom syntax highlighter** for domain-specific languages:
|
|
240
|
+
|
|
241
|
+
\`\`\`html
|
|
242
|
+
<slicc-editor id="lyrics" line-numbers>[Intro] Write your lyrics here...</slicc-editor>
|
|
243
|
+
<script>
|
|
244
|
+
var editor = document.getElementById('lyrics');
|
|
245
|
+
var CM6 = window.__SLICC_CM6__;
|
|
246
|
+
editor.setHighlighter({
|
|
247
|
+
token: function (stream) {
|
|
248
|
+
if (stream.match(/^\\[.*?\\]/)) return 'keyword';
|
|
249
|
+
if (stream.match(/^\\(.*?\\)/)) return 'comment';
|
|
250
|
+
stream.next();
|
|
251
|
+
return null;
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
<\/script>
|
|
255
|
+
\`\`\`
|
|
256
|
+
|
|
257
|
+
**Gutter markers** (colored dots on specific lines):
|
|
258
|
+
|
|
259
|
+
\`\`\`javascript
|
|
260
|
+
editor.setGutterMarkers({
|
|
261
|
+
3: { color: 'var(--s2-notice)', tooltip: 'Check meter' },
|
|
262
|
+
7: { color: 'var(--s2-negative)', tooltip: 'Error here' },
|
|
263
|
+
});
|
|
264
|
+
\`\`\`
|
|
265
|
+
|
|
266
|
+
**Properties & Methods:**
|
|
267
|
+
|
|
268
|
+
| API | Description |
|
|
269
|
+
| ---------------------------- | ------------------------------------------------------------------- |
|
|
270
|
+
| \`.value\` | Get/set editor content (string) |
|
|
271
|
+
| \`.setHighlighter(parser)\` | Set custom StreamLanguage parser with \`token(stream, state)\` method |
|
|
272
|
+
| \`.setGutterMarkers(markers)\` | Set line markers: \`{ lineNo: { color, tooltip? } }\` |
|
|
273
|
+
| \`change\` event | Fires on edit. \`e.detail.value\` has new content |
|
|
274
|
+
|
|
275
|
+
## Diff Viewer
|
|
276
|
+
|
|
277
|
+
\`<slicc-diff>\` — Pre-bundled diff viewer custom element ([@pierre/diffs](https://diffs.com)). Use for showing code changes, migration previews, before/after comparisons. Includes Shiki syntax highlighting and auto dark/light theming.
|
|
278
|
+
|
|
279
|
+
**Two-file mode** (compare old vs new):
|
|
280
|
+
|
|
281
|
+
\`\`\`html
|
|
282
|
+
<slicc-diff
|
|
283
|
+
old-name="config.json"
|
|
284
|
+
old-contents='{"debug": false}'
|
|
285
|
+
new-name="config.json"
|
|
286
|
+
new-contents='{"debug": true, "verbose": true}'
|
|
287
|
+
diff-style="split"
|
|
288
|
+
></slicc-diff>
|
|
289
|
+
\`\`\`
|
|
290
|
+
|
|
291
|
+
**Element bundles load asynchronously.** \`<slicc-diff>\` and \`<slicc-editor>\`
|
|
292
|
+
arrive after your inline script runs, so set PROPERTIES (adopted on upgrade) and
|
|
293
|
+
await the bundle before calling METHODS:
|
|
294
|
+
|
|
295
|
+
\`\`\`javascript
|
|
296
|
+
window.__SLICC_SPRINKLE_ASSETS__['slicc-editor.js'].then(function () {
|
|
297
|
+
document.getElementById('lyrics').setHighlighter({ token: myTokenizer });
|
|
298
|
+
});
|
|
299
|
+
\`\`\`
|
|
300
|
+
|
|
301
|
+
**Patch mode** (unified diff string):
|
|
302
|
+
|
|
303
|
+
\`\`\`html
|
|
304
|
+
<slicc-diff id="mydiff"></slicc-diff>
|
|
305
|
+
<script>
|
|
306
|
+
document.getElementById('mydiff').patch =
|
|
307
|
+
'--- a/file.txt\\n+++ b/file.txt\\n@@ -1 +1 @@\\n-old line\\n+new line';
|
|
308
|
+
<\/script>
|
|
309
|
+
\`\`\`
|
|
310
|
+
|
|
311
|
+
**JS property API** (for dynamic content):
|
|
312
|
+
|
|
313
|
+
\`\`\`html
|
|
314
|
+
<slicc-diff id="preview"></slicc-diff>
|
|
315
|
+
<script>
|
|
316
|
+
var diff = document.getElementById('preview');
|
|
317
|
+
diff.oldFile = { name: 'app.ts', contents: oldCode };
|
|
318
|
+
diff.newFile = { name: 'app.ts', contents: newCode };
|
|
319
|
+
diff.options = { diffStyle: 'unified', overflow: 'wrap' };
|
|
320
|
+
<\/script>
|
|
321
|
+
\`\`\`
|
|
322
|
+
|
|
323
|
+
**Attributes:**
|
|
324
|
+
|
|
325
|
+
| Attribute | Default | Description |
|
|
326
|
+
| ---------------- | -------- | -------------------------------------------- |
|
|
327
|
+
| \`old-name\` | — | Old filename |
|
|
328
|
+
| \`old-contents\` | — | Old file contents |
|
|
329
|
+
| \`new-name\` | — | New filename |
|
|
330
|
+
| \`new-contents\` | — | New file contents |
|
|
331
|
+
| \`patch\` | — | Unified diff string (alternative to old/new) |
|
|
332
|
+
| \`diff-style\` | \`split\` | \`split\` (side-by-side) or \`unified\` (single) |
|
|
333
|
+
| \`overflow\` | \`scroll\` | \`scroll\` or \`wrap\` for long lines |
|
|
334
|
+
| \`disable-header\` | — | Boolean: hide the file header bar |
|
|
335
|
+
|
|
336
|
+
**JS Properties:** \`.oldFile\`, \`.newFile\` (objects with \`name\` + \`contents\`), \`.patch\` (string), \`.options\` (object).
|
|
337
|
+
|
|
338
|
+
## Layout — Basic
|
|
339
|
+
|
|
340
|
+
\`.sprinkle-grid\` — Auto-fit responsive grid.
|
|
341
|
+
\`.sprinkle-stack\` — Vertical stack with gap.
|
|
342
|
+
\`.sprinkle-row\` — Horizontal flex row, centered.
|
|
343
|
+
\`.sprinkle-heading\` — Section heading.
|
|
344
|
+
\`.sprinkle-body\` — Body text.
|
|
345
|
+
\`.sprinkle-detail\` — Small secondary text.
|
|
346
|
+
\`.sprinkle-divider\` — Subtle separator line. Add \`--medium\` for thicker.
|
|
347
|
+
|
|
348
|
+
## Layout — Advanced (Fragment & Full-Doc)
|
|
349
|
+
|
|
350
|
+
### Sidebar
|
|
351
|
+
|
|
352
|
+
\`.sprinkle-sidebar\` — Two-column layout: fixed nav + flexible main.
|
|
353
|
+
|
|
354
|
+
\`\`\`html
|
|
355
|
+
<div class="sprinkle-sidebar">
|
|
356
|
+
<nav class="sprinkle-sidebar__nav">
|
|
357
|
+
<div class="sprinkle-sidebar__nav-label">Section</div>
|
|
358
|
+
<div class="sprinkle-sidebar__nav-item sprinkle-sidebar__nav-item--active">Active Item</div>
|
|
359
|
+
<div class="sprinkle-sidebar__nav-item">Other Item</div>
|
|
360
|
+
</nav>
|
|
361
|
+
<div class="sprinkle-sidebar__main">
|
|
362
|
+
<!-- main content -->
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
\`\`\`
|
|
366
|
+
|
|
367
|
+
### Split Pane
|
|
368
|
+
|
|
369
|
+
\`.sprinkle-split\` — Equal horizontal split. Add \`--vertical\` for stacked.
|
|
370
|
+
|
|
371
|
+
\`\`\`html
|
|
372
|
+
<div class="sprinkle-split">
|
|
373
|
+
<div>Left / Top pane</div>
|
|
374
|
+
<div>Right / Bottom pane</div>
|
|
375
|
+
</div>
|
|
376
|
+
\`\`\`
|
|
377
|
+
|
|
378
|
+
### Toolbar
|
|
379
|
+
|
|
380
|
+
\`.sprinkle-toolbar\` — Horizontal action bar with start/center/end slots.
|
|
381
|
+
|
|
382
|
+
\`\`\`html
|
|
383
|
+
<div class="sprinkle-toolbar">
|
|
384
|
+
<div class="sprinkle-toolbar__start"><button class="sprinkle-btn">Back</button></div>
|
|
385
|
+
<div class="sprinkle-toolbar__center"><strong>Title</strong></div>
|
|
386
|
+
<div class="sprinkle-toolbar__end">
|
|
387
|
+
<button class="sprinkle-btn sprinkle-btn--primary">Save</button>
|
|
388
|
+
</div>
|
|
389
|
+
</div>
|
|
390
|
+
\`\`\`
|
|
391
|
+
|
|
392
|
+
### Tabs
|
|
393
|
+
|
|
394
|
+
\`.sprinkle-tabs\` — Tab bar with panels.
|
|
395
|
+
|
|
396
|
+
\`\`\`html
|
|
397
|
+
<div class="sprinkle-tabs">
|
|
398
|
+
<button class="sprinkle-tabs__tab sprinkle-tabs__tab--active" onclick="switchTab(0)">
|
|
399
|
+
Tab 1
|
|
400
|
+
</button>
|
|
401
|
+
<button class="sprinkle-tabs__tab" onclick="switchTab(1)">Tab 2</button>
|
|
402
|
+
</div>
|
|
403
|
+
<div class="sprinkle-tabs__panel sprinkle-tabs__panel--active">Content 1</div>
|
|
404
|
+
<div class="sprinkle-tabs__panel">Content 2</div>
|
|
405
|
+
\`\`\`
|
|
406
|
+
|
|
407
|
+
### Dialog / Modal
|
|
408
|
+
|
|
409
|
+
\`.sprinkle-dialog\` — Overlay dialog. Use \`hidden\` attribute to hide.
|
|
410
|
+
|
|
411
|
+
\`\`\`html
|
|
412
|
+
<div class="sprinkle-dialog" hidden id="myDialog">
|
|
413
|
+
<div class="sprinkle-dialog__backdrop" onclick="closeDialog()"></div>
|
|
414
|
+
<div class="sprinkle-dialog__content">
|
|
415
|
+
<div class="sprinkle-dialog__header">
|
|
416
|
+
<span class="sprinkle-dialog__title">Title</span>
|
|
417
|
+
<button class="sprinkle-dialog__close" onclick="closeDialog()">×</button>
|
|
418
|
+
</div>
|
|
419
|
+
<p>Dialog content here.</p>
|
|
420
|
+
<div class="sprinkle-dialog__footer">
|
|
421
|
+
<button class="sprinkle-btn sprinkle-btn--secondary" onclick="closeDialog()">Cancel</button>
|
|
422
|
+
<button class="sprinkle-btn sprinkle-btn--primary" onclick="confirm()">Confirm</button>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
\`\`\`
|
|
427
|
+
|
|
428
|
+
### Collapsible
|
|
429
|
+
|
|
430
|
+
\`.sprinkle-collapsible\` — Expandable section. Add \`--open\` class to expand.
|
|
431
|
+
|
|
432
|
+
\`\`\`html
|
|
433
|
+
<div class="sprinkle-collapsible sprinkle-collapsible--open">
|
|
434
|
+
<button
|
|
435
|
+
class="sprinkle-collapsible__header"
|
|
436
|
+
onclick="this.parentElement.classList.toggle('sprinkle-collapsible--open')"
|
|
437
|
+
>
|
|
438
|
+
<span class="sprinkle-collapsible__chevron"></span>
|
|
439
|
+
Section Title
|
|
440
|
+
</button>
|
|
441
|
+
<div class="sprinkle-collapsible__body">Expandable content here.</div>
|
|
442
|
+
</div>
|
|
443
|
+
\`\`\`
|
|
444
|
+
|
|
445
|
+
### Canvas / SVG Container
|
|
446
|
+
|
|
447
|
+
\`.sprinkle-canvas\` — Container for canvas or SVG. Aspect ratio modifiers: \`--16x9\`, \`--4x3\`, \`--1x1\`.
|
|
448
|
+
|
|
449
|
+
\`\`\`html
|
|
450
|
+
<div class="sprinkle-canvas sprinkle-canvas--16x9">
|
|
451
|
+
<svg viewBox="0 0 800 450"><!-- chart --></svg>
|
|
452
|
+
</div>
|
|
453
|
+
\`\`\`
|
|
454
|
+
|
|
455
|
+
### Container Queries
|
|
456
|
+
|
|
457
|
+
Wrap content in \`.sprinkle-panel\` for responsive container queries:
|
|
458
|
+
|
|
459
|
+
- Below 400px: sidebar stacks vertically, grids go single-column, splits stack, toolbar wraps
|
|
460
|
+
- Above 600px: sidebar nav at 240px, grids use auto-fit minmax(180px, 1fr)
|
|
461
|
+
|
|
462
|
+
## Key-Value List
|
|
463
|
+
|
|
464
|
+
\`.sprinkle-kv-list\` — Key-value pairs. Use \`<dl>\` with \`<dt>\`/\`<dd>\` (preferred) or \`<ul>\` with \`<li>\` containing \`.key\`/\`.value\` spans. The \`<dl>\` variant renders as a two-column grid with labels left, values right-aligned bold.
|
|
465
|
+
|
|
466
|
+
## Empty State
|
|
467
|
+
|
|
468
|
+
\`.sprinkle-empty-state\` — Centered empty state messaging.
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Multi-Action Lick Patterns
|
|
473
|
+
|
|
474
|
+
Sprinkles can send multiple distinct actions via \`slicc.lick()\`. The cone routes each action to the owning scoop.
|
|
475
|
+
|
|
476
|
+
**Button with action + data**:
|
|
477
|
+
|
|
478
|
+
\`\`\`html
|
|
479
|
+
<button
|
|
480
|
+
class="sprinkle-btn sprinkle-btn--primary"
|
|
481
|
+
onclick="slicc.lick({action: 'save-section', data: {id: 'hero', content: getContent()}})"
|
|
482
|
+
>
|
|
483
|
+
Save
|
|
484
|
+
</button>
|
|
485
|
+
\`\`\`
|
|
486
|
+
|
|
487
|
+
**Toolbar with multiple actions**:
|
|
488
|
+
|
|
489
|
+
\`\`\`html
|
|
490
|
+
<div class="sprinkle-toolbar">
|
|
491
|
+
<div class="sprinkle-toolbar__start">
|
|
492
|
+
<button class="sprinkle-btn" onclick="slicc.lick({action: 'run-audit'})">Run Audit</button>
|
|
493
|
+
</div>
|
|
494
|
+
<div class="sprinkle-toolbar__end">
|
|
495
|
+
<button
|
|
496
|
+
class="sprinkle-btn sprinkle-btn--secondary"
|
|
497
|
+
onclick="slicc.lick({action: 'export-report'})"
|
|
498
|
+
>
|
|
499
|
+
Export
|
|
500
|
+
</button>
|
|
501
|
+
<button class="sprinkle-btn sprinkle-btn--primary" onclick="slicc.lick({action: 'fix-all'})">
|
|
502
|
+
Fix All
|
|
503
|
+
</button>
|
|
504
|
+
</div>
|
|
505
|
+
</div>
|
|
506
|
+
\`\`\`
|
|
507
|
+
|
|
508
|
+
**Handling updates from the agent**:
|
|
509
|
+
|
|
510
|
+
\`\`\`html
|
|
511
|
+
<script>
|
|
512
|
+
slicc.on('update', function (data) {
|
|
513
|
+
if (data.type === 'audit-results') {
|
|
514
|
+
renderResults(data.results);
|
|
515
|
+
} else if (data.type === 'status') {
|
|
516
|
+
document.getElementById('status').textContent = data.message;
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
// Restore state on reopen
|
|
521
|
+
var saved = slicc.getState();
|
|
522
|
+
if (saved) {
|
|
523
|
+
renderResults(saved.results);
|
|
524
|
+
}
|
|
525
|
+
<\/script>
|
|
526
|
+
\`\`\`
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Design Guidelines
|
|
531
|
+
|
|
532
|
+
Panels should look like professional tools, not chatbot output. Follow these rules:
|
|
533
|
+
|
|
534
|
+
**No emojis in headings or labels.** Use badges, status lights, and semantic color to convey meaning — not 🔍 ❌ ✅ ⚠️ 📊 icons.
|
|
535
|
+
|
|
536
|
+
**No inline color styles, and never hard-code light/dark values.** Use the semantic variants (\`--positive\`, \`--negative\`, \`--notice\`, \`--informative\`) and S2 tokens — they swap automatically when the parent theme flips. For one-off colors not covered by a token, use \`light-dark()\` (see "Light & dark mode" below).
|
|
537
|
+
|
|
538
|
+
**Use tables for structured findings.** When presenting lists of issues, checks, or recommendations, use \`.sprinkle-table\` with severity badges in the first column — not bullet lists with emoji prefixes.
|
|
539
|
+
|
|
540
|
+
**Use status lights for pass/fail.** \`sprinkle-status-light--positive\` for passed checks, badges for severity levels (Critical, Warning, Advisory).
|
|
541
|
+
|
|
542
|
+
**Keep headings plain.** Use \`sprinkle-body\` with \`font-weight:600\` for section subheadings, \`sprinkle-heading\` for the page title. No emoji, no decorative punctuation.
|
|
543
|
+
|
|
544
|
+
**Use \`sprinkle-kv-list\` for stats.** Key-value pairs belong in a definition list, not stat cards (reserve stat cards for 3–4 top-level KPIs).
|
|
545
|
+
|
|
546
|
+
### Example: Audit/Report Panel Structure
|
|
547
|
+
|
|
548
|
+
\`\`\`html
|
|
549
|
+
<title>Report Title</title>
|
|
550
|
+
<link rel="icon" href="clipboard-list" />
|
|
551
|
+
<div class="sprinkle-stack">
|
|
552
|
+
<div>
|
|
553
|
+
<h2 class="sprinkle-heading">Report Title</h2>
|
|
554
|
+
<p class="sprinkle-detail">Context line — source, date</p>
|
|
555
|
+
</div>
|
|
556
|
+
|
|
557
|
+
<!-- Top-level KPIs -->
|
|
558
|
+
<div class="sprinkle-grid">
|
|
559
|
+
<div class="sprinkle-stat-card">
|
|
560
|
+
<div class="value">A</div>
|
|
561
|
+
<div class="label">Grade</div>
|
|
562
|
+
</div>
|
|
563
|
+
<div class="sprinkle-stat-card">
|
|
564
|
+
<div class="value">12</div>
|
|
565
|
+
<div class="label">Passed</div>
|
|
566
|
+
</div>
|
|
567
|
+
<div class="sprinkle-stat-card">
|
|
568
|
+
<div class="value">0</div>
|
|
569
|
+
<div class="label">Issues</div>
|
|
570
|
+
</div>
|
|
571
|
+
</div>
|
|
572
|
+
|
|
573
|
+
<div class="sprinkle-divider"></div>
|
|
574
|
+
|
|
575
|
+
<!-- Findings table with severity badges -->
|
|
576
|
+
<h3 class="sprinkle-body" style="font-weight:600">Issues</h3>
|
|
577
|
+
<table class="sprinkle-table">
|
|
578
|
+
<thead>
|
|
579
|
+
<tr>
|
|
580
|
+
<th>Severity</th>
|
|
581
|
+
<th>Finding</th>
|
|
582
|
+
</tr>
|
|
583
|
+
</thead>
|
|
584
|
+
<tbody>
|
|
585
|
+
<tr>
|
|
586
|
+
<td><span class="sprinkle-badge sprinkle-badge--negative">Critical</span></td>
|
|
587
|
+
<td><strong>Title</strong><br /><span class="sprinkle-detail">Description</span></td>
|
|
588
|
+
</tr>
|
|
589
|
+
<tr>
|
|
590
|
+
<td><span class="sprinkle-badge sprinkle-badge--notice">Warning</span></td>
|
|
591
|
+
<td><strong>Title</strong><br /><span class="sprinkle-detail">Description</span></td>
|
|
592
|
+
</tr>
|
|
593
|
+
</tbody>
|
|
594
|
+
</table>
|
|
595
|
+
|
|
596
|
+
<div class="sprinkle-divider"></div>
|
|
597
|
+
|
|
598
|
+
<!-- Passed checks with status lights -->
|
|
599
|
+
<h3 class="sprinkle-body" style="font-weight:600">Passed checks</h3>
|
|
600
|
+
<table class="sprinkle-table">
|
|
601
|
+
<thead>
|
|
602
|
+
<tr>
|
|
603
|
+
<th>Status</th>
|
|
604
|
+
<th>Check</th>
|
|
605
|
+
</tr>
|
|
606
|
+
</thead>
|
|
607
|
+
<tbody>
|
|
608
|
+
<tr>
|
|
609
|
+
<td><span class="sprinkle-status-light sprinkle-status-light--positive">Pass</span></td>
|
|
610
|
+
<td>Check description</td>
|
|
611
|
+
</tr>
|
|
612
|
+
</tbody>
|
|
613
|
+
</table>
|
|
614
|
+
|
|
615
|
+
<div class="sprinkle-divider"></div>
|
|
616
|
+
|
|
617
|
+
<!-- Stats as key-value list -->
|
|
618
|
+
<h3 class="sprinkle-body" style="font-weight:600">Stats</h3>
|
|
619
|
+
<dl class="sprinkle-kv-list">
|
|
620
|
+
<dt>Metric</dt>
|
|
621
|
+
<dd>Value</dd>
|
|
622
|
+
</dl>
|
|
623
|
+
|
|
624
|
+
<p class="sprinkle-detail" style="text-align:center;margin-top:var(--s2-spacing-200)">
|
|
625
|
+
Footer note
|
|
626
|
+
</p>
|
|
627
|
+
</div>
|
|
628
|
+
\`\`\`
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## Using Built-in Sprinkles
|
|
633
|
+
|
|
634
|
+
Built-in sprinkles ship at \`/shared/sprinkles/\`. They are full-document HTML apps with a **DATA CONTRACT** — a comment block at the top of the \`<script>\` section documenting the exact JSON format the sprinkle expects.
|
|
635
|
+
|
|
636
|
+
### Three-state protocol
|
|
637
|
+
|
|
638
|
+
Every built-in sprinkle has three view states: **empty** (URL input form), **loading** (spinner), and **ready** (full UI). The scoop controls transitions via \`sprinkle send\`:
|
|
639
|
+
|
|
640
|
+
1. **Immediately after opening**, push analyzing status so the user sees progress:
|
|
641
|
+
|
|
642
|
+
\`\`\`bash
|
|
643
|
+
sprinkle send <name> '{"status":"analyzing","url":"https://example.com"}'
|
|
644
|
+
\`\`\`
|
|
645
|
+
|
|
646
|
+
2. **When analysis is complete**, push data in the format specified by the DATA CONTRACT:
|
|
647
|
+
|
|
648
|
+
\`\`\`bash
|
|
649
|
+
sprinkle send <name> '{"content":"...","rules":{...}}'
|
|
650
|
+
\`\`\`
|
|
651
|
+
|
|
652
|
+
3. **If no page was specified** (scoop should ask the user for a URL):
|
|
653
|
+
\`\`\`bash
|
|
654
|
+
sprinkle send <name> '{"status":"empty"}'
|
|
655
|
+
\`\`\`
|
|
656
|
+
|
|
657
|
+
### Scoop brief template
|
|
658
|
+
|
|
659
|
+
\`\`\`
|
|
660
|
+
scoop_scoop("<sprinkle-name>")
|
|
661
|
+
feed_scoop("<sprinkle-name>", "You own the sprinkle '<sprinkle-name>'.
|
|
662
|
+
1. Run: read_file /workspace/skills/sprinkles/style-guide.md
|
|
663
|
+
2. Pick a Lucide icon name that matches the sprinkle's purpose. Add <link rel=\\"icon\\" href=\\"<icon-name>\\" /> to the .shtml. See sprinkles SKILL.md \\"Sprinkle icon\\" for examples.
|
|
664
|
+
3. Write the sprinkle to /shared/sprinkles/<sprinkle-name>/<sprinkle-name>.shtml — define the DATA CONTRACT at the top of the <script>.
|
|
665
|
+
4. Run: sprinkle open <sprinkle-name>
|
|
666
|
+
5. IMMEDIATELY push status: sprinkle send <sprinkle-name> '{\\"status\\":\\"loading\\",\\"context\\":\\"<what>\\"}'
|
|
667
|
+
6. Gather the data the user needs.
|
|
668
|
+
7. Push results to the sprinkle in the format specified by the DATA CONTRACT.
|
|
669
|
+
8. Stay ready — you will receive lick events when the user clicks buttons in the sprinkle.
|
|
670
|
+
9. When the user confirms an edit, attempt to apply it to the underlying source (see 'Applying Changes' below).
|
|
671
|
+
Do not send a completion message.")
|
|
672
|
+
\`\`\`
|
|
673
|
+
|
|
674
|
+
The scoop creates and opens the sprinkle, pushes loading status, gathers real data, pushes results via \`sprinkle send\`, and handles lick events from the user.
|
|
675
|
+
|
|
676
|
+
---
|
|
677
|
+
|
|
678
|
+
## Applying Changes
|
|
679
|
+
|
|
680
|
+
Content-editing sprinkles should attempt to apply user-confirmed changes to the actual site. Sprinkle edits are not just local UI state — the scoop must try to write them back.
|
|
681
|
+
|
|
682
|
+
### When to apply
|
|
683
|
+
|
|
684
|
+
Apply after the user **confirms** a change — not on every lick. Typical trigger: \`suggestion-applied\` lick (user picked a fix from suggestions), or \`apply-fix\` lick (user clicked "Apply").
|
|
685
|
+
|
|
686
|
+
### Determining write access
|
|
687
|
+
|
|
688
|
+
The cone sets backend context in the scoop brief (option B). The scoop knows whether it has write access based on its instructions:
|
|
689
|
+
|
|
690
|
+
- **EDS site** (URL matches \`*--*--*.aem.page|live\`): use \`aem get\`, \`aem put\`, \`aem preview\` commands
|
|
691
|
+
- **No write access** (external site, unknown CMS): push \`fix-error\` explaining why
|
|
692
|
+
|
|
693
|
+
### EDS apply workflow (example)
|
|
694
|
+
|
|
695
|
+
\`\`\`bash
|
|
696
|
+
# 1. Fetch current page HTML
|
|
697
|
+
aem get <eds-url> --output /scoops/<scoop-name>/page.html
|
|
698
|
+
|
|
699
|
+
# 2. Read and modify the HTML (e.g. update <title>, <meta>, headings)
|
|
700
|
+
# Use edit_file or read_file + write_file
|
|
701
|
+
|
|
702
|
+
# 3. Write back
|
|
703
|
+
aem put <eds-url> /scoops/<scoop-name>/page.html
|
|
704
|
+
|
|
705
|
+
# 4. Trigger preview
|
|
706
|
+
aem preview <eds-url>
|
|
707
|
+
\`\`\`
|
|
708
|
+
|
|
709
|
+
### Confirming back to the sprinkle
|
|
710
|
+
|
|
711
|
+
After the write succeeds, push confirmation so the sprinkle updates its UI:
|
|
712
|
+
|
|
713
|
+
\`\`\`bash
|
|
714
|
+
sprinkle send <sprinkle-name> '{"action":"fix-applied","pageIndex":0,"category":"Title","value":"new title","path":"/page","previewUrl":"https://..."}'
|
|
715
|
+
\`\`\`
|
|
716
|
+
|
|
717
|
+
The sprinkle only updates local state (score, checkmarks) after receiving \`fix-applied\` with the confirmed value.
|
|
718
|
+
|
|
719
|
+
If the write fails or write access is unavailable, push the error:
|
|
720
|
+
|
|
721
|
+
\`\`\`bash
|
|
722
|
+
sprinkle send <sprinkle-name> '{"action":"fix-error","message":"Cannot apply — no write access to nationwide.co.uk"}'
|
|
723
|
+
\`\`\`
|
|
724
|
+
|
|
725
|
+
### Sprinkle-side handlers
|
|
726
|
+
|
|
727
|
+
Sprinkles handle these update actions:
|
|
728
|
+
|
|
729
|
+
\`\`\`javascript
|
|
730
|
+
slicc.on('update', function (data) {
|
|
731
|
+
if (data.action === 'fix-applied') {
|
|
732
|
+
// Update local data with confirmed value, then show toast
|
|
733
|
+
applyFixToLocal(data.pageIndex, data.category, data.value);
|
|
734
|
+
showToast('Applied: ' + data.path);
|
|
735
|
+
}
|
|
736
|
+
if (data.action === 'fix-error') {
|
|
737
|
+
showToast('Error: ' + data.message, true);
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
\`\`\`
|
|
741
|
+
|
|
742
|
+
---
|
|
743
|
+
|
|
744
|
+
## Light & dark mode
|
|
745
|
+
|
|
746
|
+
All sprinkles inherit the parent's theme automatically. The parent injects its S2 tokens and toggles a \`.theme-light\` class on the sprinkle root — the iframe's \`<html>\` in full-document mode, or the outermost container injected into the sidebar in fragment mode — whenever the user flips themes. Every \`var(--s2-*)\` token below swaps with it. **Never hard-code colors for one theme**, and **do not use \`@media (prefers-color-scheme: ...)\`** for colors that should mirror the app theme (it desyncs from the parent's class-based toggle).
|
|
747
|
+
|
|
748
|
+
For one-off colors that aren't covered by an S2 token, use CSS \`light-dark()\`:
|
|
749
|
+
|
|
750
|
+
\`\`\`css
|
|
751
|
+
:root {
|
|
752
|
+
color-scheme: light dark;
|
|
753
|
+
}
|
|
754
|
+
.my-tile {
|
|
755
|
+
background: light-dark(#fafafa, #1c1c1c);
|
|
756
|
+
color: light-dark(#222, #eee);
|
|
757
|
+
}
|
|
758
|
+
\`\`\`
|
|
759
|
+
|
|
760
|
+
\`light-dark()\` only resolves the dark branch when \`color-scheme\` is set on an ancestor — set it on \`:root\` in full-document mode, or on your outermost container in fragment mode. This intentionally follows the user's OS \`color-scheme\` preference for one-off custom colors; the S2 tokens above still track the parent app's class-based theme toggle in lockstep.
|
|
761
|
+
|
|
762
|
+
## Spectrum 2 Token Reference
|
|
763
|
+
|
|
764
|
+
Full-document sprinkles (\`.shtml\`) inherit S2 CSS custom properties from the parent page. Every token below is theme-aware: its value swaps when \`.theme-light\` is toggled on \`<html>\`, so you get correct light and dark colors for free. Always use tokens — never hardcode hex values.
|
|
765
|
+
|
|
766
|
+
### Border Radius
|
|
767
|
+
|
|
768
|
+
| Token | Value | Usage |
|
|
769
|
+
| --------------------- | ------ | ------------------------------------ |
|
|
770
|
+
| \`--s2-radius-s\` | 4px | Checkboxes, in-field buttons |
|
|
771
|
+
| \`--s2-radius-default\` | 8px | Most components, inputs, small cards |
|
|
772
|
+
| \`--s2-radius-l\` | 10px | Cards, panels, action boxes |
|
|
773
|
+
| \`--s2-radius-xl\` | 16px | Dialogs, modals, wells |
|
|
774
|
+
| \`--s2-radius-pill\` | 9999px | **Buttons**, badges, avatars, tags |
|
|
775
|
+
|
|
776
|
+
**Buttons MUST use \`--s2-radius-pill\`** (pill rounding). This is a core S2 convention.
|
|
777
|
+
|
|
778
|
+
### Backgrounds
|
|
779
|
+
|
|
780
|
+
| Token | Usage |
|
|
781
|
+
| ------------------ | -------------------------------------------- |
|
|
782
|
+
| \`--s2-bg-base\` | Page/body background (gray-25) |
|
|
783
|
+
| \`--s2-bg-layer-1\` | Sidebar/panel background (gray-50) |
|
|
784
|
+
| \`--s2-bg-layer-2\` | Nested layer background (gray-75) |
|
|
785
|
+
| \`--s2-bg-elevated\` | Cards, buttons, elevated surfaces (gray-100) |
|
|
786
|
+
|
|
787
|
+
**Never use \`#fff\` for backgrounds.** Use \`var(--s2-bg-elevated)\` for cards/buttons, \`var(--s2-bg-base)\` for page background.
|
|
788
|
+
|
|
789
|
+
### Text on Dark Backgrounds
|
|
790
|
+
|
|
791
|
+
Use \`var(--s2-gray-25)\` instead of \`#fff\` or \`color: white\`. S2 avoids pure white on dark backgrounds to prevent halation.
|
|
792
|
+
|
|
793
|
+
### Semantic Color Tints
|
|
794
|
+
|
|
795
|
+
For subtle tinted backgrounds (badges, hover states), use \`color-mix\`:
|
|
796
|
+
|
|
797
|
+
\`\`\`css
|
|
798
|
+
background: color-mix(in srgb, var(--s2-positive) 10%, transparent); /* green tint */
|
|
799
|
+
background: color-mix(in srgb, var(--s2-negative) 8%, transparent); /* red tint */
|
|
800
|
+
background: color-mix(in srgb, var(--s2-notice) 10%, transparent); /* amber tint */
|
|
801
|
+
background: color-mix(in srgb, var(--s2-accent) 6%, transparent); /* blue tint */
|
|
802
|
+
\`\`\`
|
|
803
|
+
|
|
804
|
+
### Shadows
|
|
805
|
+
|
|
806
|
+
| Token | Usage |
|
|
807
|
+
| ----------------------- | ----------------------- |
|
|
808
|
+
| \`--s2-shadow-container\` | Subtle card shadow |
|
|
809
|
+
| \`--s2-shadow-elevated\` | Menus, tooltips, modals |
|
|
810
|
+
|
|
811
|
+
### Spacing
|
|
812
|
+
|
|
813
|
+
| Token | Value |
|
|
814
|
+
| ------------------ | ----- |
|
|
815
|
+
| \`--s2-spacing-100\` | 8px |
|
|
816
|
+
| \`--s2-spacing-200\` | 12px |
|
|
817
|
+
| \`--s2-spacing-300\` | 16px |
|
|
818
|
+
| \`--s2-spacing-400\` | 24px |
|
|
819
|
+
| \`--s2-spacing-500\` | 32px |
|
|
820
|
+
| \`--s2-spacing-600\` | 40px |
|
|
821
|
+
`;export{e as default};
|