@elaraai/east-claude-plugin 1.0.94 → 1.0.95

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.
@@ -514,7 +514,7 @@ Task → Which tag?
514
514
  │ │ ├─ TreeView.Item(value, label, indicator?) — leaf node (indicator = a Font Awesome solid icon + style)
515
515
  │ │ └─ TreeView.Branch(value, label, children, indicator?, disabled?) — expandable node
516
516
  │ ├─ <Plan> — the planning canvas (ONE shared time | number | ordinal axis over heterogeneous rows: event kinds over records, rows laid out by a series list over data, and read-only rows) is e3-ui's (#1177, #1191): `import { Plan } from "@elaraai/e3-ui"` — its props, factories and patterns are in the e3-ui skill
517
- │ ├─ <Sheet> — the planning spreadsheet, always in its builder frame (typed columns over an e3 record's rows or the host's, a blank tail that invites the next row, typed grammars, an East-function copilot, a slice lens, an editing session, and a library and an inspector pane, each an optional prop) is e3-ui's (#1179, #1216): `import { Sheet } from "@elaraai/e3-ui"` — its props, factories and patterns are in the e3-ui skill
517
+ │ ├─ <Sheet> — the planning spreadsheet, always in its builder frame (typed columns over an e3 record's rows, the host's or its rail's `rows` source, a blank tail that invites the next row, typed grammars, an East-function copilot, one `Slice.bindRecords` rail with saved views, an editing session, and a library and an inspector pane, each an optional prop) is e3-ui's (#1179, #1216): `import { Sheet } from "@elaraai/e3-ui"` — its props, factories and patterns are in the e3-ui skill
518
518
  │ ├─ <Matrix data={…} columns={…} cell={(r, col) => Matrix.cell({…})} /> — rows × columns of status-coloured segment bars
519
519
  │ │ ├─ Props:
520
520
  │ │ │ ├─ data (required) — row structs, or RecursiveType rows whose node is a struct (nested with `tree`); columns (required) — array of Matrix.column(…) (data-drivable with .map)
@@ -662,8 +662,9 @@ Task → Which tag?
662
662
  │ │ └─ Factories:
663
663
  │ │ ├─ Slice.bind(key, rows, options?) — local Array rows; infers the row type. Options: fields (label/hints/format), range, search, initial, presets, breakdown and match. Initial/preset clauses name typed fields; local operators include gte/contains. The positional form is removed.
664
664
  │ │ ├─ Slice.bindRecord(key, indexed, options?) — Data.bindPaged(record, { indexes }) from e3-ui; fields/range/search/initial/presets come from declared field indexes. No browser predicate, local operators, match or breakdown. Several exact values then one range/prefix must follow one index; a Set field takes one exact member.
665
+ │ │ ├─ Slice.bindRecords(key, { name: { source: indexed, fields?, range?, search?, initial? }, … }, { presets? }) — several records narrowed from ONE rail: one Slice.bindRecord per named source under `${key}.${name}`; a choice in one source never changes another's rows or counts (no index relates two records). Presets narrow any sources at once (a source a preset doesn't name is cleared); slice.togglePreset(id) / slice.clearAll() act on every part. A component that narrows several kinds of row takes it as slice={{ slice }} with its sources named after them (the e3-ui Allocation's `lanes` and `resources`) and reads each source itself.
665
666
  │ │ ├─ Slice.config(Row, { fields, rangeFieldId?, searchFieldIds?, breakdownFieldIds? }) / Slice.state({…}) — low-level config/state for pure Slice.apply and state operations; bind options infer and seed these automatically.
666
- │ │ ├─ Slice.rows(slice) — the narrowed Array for local rows, or a pinned ordered source for records; record entries retain original key beside tagged ik, covering value and optional joined row.
667
+ │ │ ├─ Slice.rows(slice) — the narrowed Array for local rows, or for records a live ordered source: one per binding whatever the narrowing, its windows read under the narrowing as it stands, its `query()` naming it (#1354); record entries retain original key beside tagged ik, covering value and optional joined row. Slice.rows(slice, source) reads one source of a Slice.bindRecords handle.
667
668
  │ │ ├─ Slice.partition([Row], slice) — the FULL set tagged [{value, matched}] (the "keep the excluded" feed — drive a de-emphasis effect from `matched`)
668
669
  │ │ ├─ Slice.apply.where / .matches / .breakdown — the pure filter engine (string ops eq/neq/in/notIn/contains/matches/startsWith/endsWith/isEmpty/isNotEmpty; integer in; datetime between)
669
670
  │ │ └─ slice.toggleFilter(pred) — idempotent single-predicate toggle for custom wiring; Range picker presets anchor to the DATA's date extent (clamped to now for live data) and pin concrete windows; an All chip clears the range; programmatic datetimePreset seeds stay rolling/wall-clock
@@ -1046,9 +1047,10 @@ expression, or a whole-value `Data.bind` / `State.bind` handle — or a paged
1046
1047
  source from the platform that owns the data, e3-ui's `Data.bindPaged`. east-ui
1047
1048
  produces no paged source; a collection already in hand is local data. A
1048
1049
  component recognises a paged source by its East type, a subtype of
1049
- `Paged.Types.PinnedSource(C)` or `Paged.Types.Source(C)` over the collection
1050
- `C` its `page` serves, and refuses a struct with `page` / `total` that is
1051
- neither, naming the contract's fields.
1050
+ `Paged.Types.PinnedSource(C)`, `Paged.Types.LiveSource(C)` or
1051
+ `Paged.Types.Source(C)` over the collection `C` its `page` serves, and refuses
1052
+ a struct with `page` / `total` that is none of them, naming the contract's
1053
+ fields.
1052
1054
 
1053
1055
  The contract is a PINNED source: `{ id, page, total, seek, revision, refresh }`
1054
1056
  — the `pinned` arm. `id` names the logical source; `revision()` names the
@@ -1067,6 +1069,15 @@ the `paged` arm — is the handle a UI exported before them carries. It names no
1067
1069
  snapshot: a component reads each window once, and the same `id` serves the
1068
1070
  same rows for as long as the component holds it.
1069
1071
 
1072
+ A rail's narrowed source — `Slice.rows(slice, source)` over records — is a
1073
+ pinned source that names its narrowing too: `{ id, page, total, seek,
1074
+ revision, refresh, query }`, `Paged.Types.LiveSource(C)`, the `live` arm. Its
1075
+ `id` names the source under every narrowing, its reads read the narrowing as
1076
+ it stands when they run, and `query()` names it, so a component built over it
1077
+ is not built again when a choice changes (#1354). A component keys its windows
1078
+ by `query()` as by `revision()`, reading them again when either moves; editing
1079
+ keeps the revision alone, so a Save confirms against the record's state.
1080
+
1070
1081
  `Data.bindPaged` also follows its dataset without a call: the workspace
1071
1082
  status poll reports each new content hash and the source moves to that
1072
1083
  snapshot, so a `refresh` after your own write only gets there sooner. A
@@ -1494,8 +1505,8 @@ tier so they stay subordinate to tags at every density.
1494
1505
  e3-ui's `<Sheet>` (#1179, #1216) is where a planner TYPES
1495
1506
  them, in its builder frame: typed cells with grammars (dates, quantities,
1496
1507
  register lookups, a directed link), a blank tail that inserts rows, an
1497
- East-function copilot, and a slice lens drawn as context bands rather than
1498
- a filtered row set. Reach for `<Sheet>` when the rows are authored in place
1508
+ East-function copilot, and one rail narrowing its rows, its templates and
1509
+ its tabs, with saved views. Reach for `<Sheet>` when the rows are authored in place
1499
1510
  and written back (through an e3 record's patch, or `onUpdate` / `onApply`)
1500
1511
  — the e3-ui skill documents it; for reading, sorting and reviewing a
1501
1512
  dataset, `<Table>`.