LimLim
¢

Lim Dev Docs

Tout ce que les modules LIM utilisent : bureau, manette, stockage, sync, rendu.

CLI
npx @lim/devdocs init --console

Bureau virtuel

Les fenêtres sont des iframes indépendantes : aucun module ne recharge l'application.

src/lib/desktopStore.js
import { openWindow, closeWindow, cycleWindow } from '@/lib/desktopStore';

openWindow('mail');   // ouvre LIM Mail dans une fenêtre
openWindow('drive');  // réutilise la fenêtre si elle existe
cycleWindow(1);       // fenêtre suivante (LB / RB)

Manette (Gamepad API)

DualSense, Xbox et Switch Pro. Flèches / stick = navigation spatiale, A = valider, B = fermer, Start = bureau.

src/hooks/useGamepad.js
useGamepad({
  onBack: () => closeTopWindow(),   // B / Circle
  onMenu: () => toggleLauncher(),   // Start
  onCycle: (dir) => cycleWindow(dir) // LB / RB
});

TV Mode

À partir de 1920 px, la racine passe à 21 px ; à 2560 px, à 27 px. Toute l'interface (rem) grandit d'un coup, y compris les Lim Fonts.

src/index.css
@media screen and (min-width: 1920px) { html { font-size: 21px; } }
@media screen and (min-width: 2560px) { html { font-size: 27px; } }

console-polyfill.js

Chargé avant l'application : comble Array.at/flat/flatMap, Object.fromEntries, Promise.allSettled, structuredClone, ResizeObserver, AbortController et remplace fetch par une lecture XHR binaire si besoin.

index.html
<script src="/console-polyfill.js"></script>
<script type="module" src="/src/main.jsx"></script>

Lim-Core (stockage)

Compression gzip dans un Web Worker, empreinte SHA-256, et repli automatique en Base64 dans le stockage local quand IndexedDB est bloquée (PS5, Switch).

lecture / écriture
await limCore.put('docs', 'doc:42', { title: 'Rapport', body: '…' });
const doc = await limCore.get('docs', 'doc:42');
const stats = await limCore.stats();

Background Sync

Hors-ligne, la requête est mise dans la file LIM Outbox. Le Service Worker la rejoue dès le retour du réseau, même application fermée.

dans un module
await window.limQueue.queueRequest('/api/entities/LimDoc', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(payload),
});

Rendu vectoriel Canvas

Chaque lettre est positionnée à ses coordonnées mesurées, à l'échelle du devicePixelRatio : net en 4K, fluide à 120 fps.

src/components/fonts/CanvasFontPreview.jsx
<CanvasFontPreview text="Bonjour" fontFamily="Recoleta" size={48} animate />

API Lim

SDK
import { base44 } from '@/api/base44Client';

const docs = await base44.entities.LimDoc.list('-created_date', 20);
await base44.entities.LimDoc.create({ title: 'Nouveau' });
HTTP
GET https://lim.base44.app/api/entities/LimDoc
Authorization: Bearer <token>

Besoin d'un accès programmatique ? Lim Console gère les clés API, l'onglet NowCoin LBAA et les webhooks.