Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
bc23960
Always return a default of 12 for font size, if unavailable
cursork Feb 15, 2025
f3bb266
Disable focussing on the grid on every CurCell
cursork Feb 16, 2025
adc5eff
Misc edit (see below)
cursork Feb 16, 2025
fb988b2
CurCell now defaults on create and guarantees it stays in bounds
cursork Feb 16, 2025
739b604
Defaults were overriding, not defaults
cursork Feb 16, 2025
b1b852d
Re #374 better styling for labels
cursork Feb 18, 2025
ecb281f
Build only
cursork Feb 18, 2025
083efb1
Temporary hack to always respect latest Font
cursork Feb 19, 2025
f804299
Tighten up lineHeight in a multiline Label
cursork Feb 19, 2025
5f230f0
Fix #373 Always use latest Font/Picture state found
cursork Feb 20, 2025
04cc2a9
Fix #375 start a README
cursork Feb 20, 2025
b1c8a2a
Merge pull request #376 from Dyalog/375-readme
cursork Feb 20, 2025
376358f
Merge branch 'main' into devt
cursork Feb 20, 2025
3ba4187
Update README with branches
cursork Feb 21, 2025
2066e34
Add 0 as valid option for V and HScroll
cursork Feb 28, 2025
3d9724e
Add Div component that allows setting inner HTML directly
cursork Mar 8, 2025
6b36ba3
Add Div to Grid
cursork Mar 8, 2025
559c907
Fix an off-by-one error in columns
cursork Mar 8, 2025
29d6e7d
Echo KeyPresses back
cursork Mar 13, 2025
8702889
localStorage is all now Globals calls
cursork Mar 29, 2025
3a33dde
New dist that was missed in last update
cursork Mar 31, 2025
316285b
Revert seemingly broken localStorage change
cursork Apr 1, 2025
abd435d
Minor fixes for mouse codes and a missing event for NQ
cursork Apr 1, 2025
ed442bd
Echo KeyPress as-is - this mirrors quad WC behaviour when tested
cursork Apr 2, 2025
c0092c6
Generic WG handler and universal Size and Posn
cursork Jan 11, 2025
d952934
Add special $CONTAINER ID type for sizing
cursork Jan 11, 2025
5605929
Generic WG handler and universal Size and Posn
cursork Jan 11, 2025
be7f9ec
Minor tidying and making labels clickable for checkboxes
cursork Jan 12, 2025
c6dfefa
Not found returns (0 0) for size and posn, use else ifs for switch
cursork Jan 12, 2025
7192cdd
Error on no Posn/Size
cursork Jan 12, 2025
758b095
Merge pull request #345 from Dyalog/wg-fallbacks
cursork Apr 14, 2025
16427df
Fixes for multi and selection
cursork Apr 25, 2025
a02d528
Fix bug with Text covering other components and preventing interaction
cursork May 16, 2025
294beae
Event listener approach to update internal list state
cursork May 17, 2025
67d49b2
List and Edit fixes
cursork May 20, 2025
e06a97f
Size fetching and size calculations fixed
cursork May 25, 2025
b79c2f0
Better handling of editing based on selection
cursork May 27, 2025
a9a7a33
All of NQ should use the same logic for callbacks
cursork May 28, 2025
037c57d
Fix data change on NQ of DB
cursork Jun 2, 2025
fe68b12
Keyboard controls, focussing for List
cursork Jun 3, 2025
ec173ee
Fix defaulting Text to ""
cursork Jun 4, 2025
7348bcf
Checking the wrong value for adding corner on header; Poly shouldn't …
cursork Jun 4, 2025
b9a0c35
New build for commit fixing table headers
cursork Jun 5, 2025
482b659
All svgs ignore pointer events at top level
cursork Jun 5, 2025
9828139
TitleWidth was not being respected for numbered rows
cursork Jun 6, 2025
3a71a8e
Fix cursor positioning bug in Edit component backspace handler
cursork Jun 21, 2025
af4b19e
Implement tab navigation with HT handler for proper focus management
cursork Jun 21, 2025
8fe0bce
Cursor positions and cursor key handling
cursork Jun 21, 2025
2f96b5f
Implement our own tabindex, attempt to sync message processing to frames
cursork Jun 21, 2025
98d78ff
All current WX can be immediate mode
cursork Jun 21, 2025
c6addb1
Update build
cursork Jun 21, 2025
d8b6ed6
Fixes broken Proceed: 1 for Edit
cursork Jun 21, 2025
f33ac25
Reorganise state in to a ref for Edit
cursork Jul 8, 2025
8aef273
Remove debugging messages (thanks Claude) and new build
cursork Jul 8, 2025
110e116
Fix broken yarn build
cursork Jul 8, 2025
76d1f04
EC Pending:1 handler was passing the entire data, not just Properties
cursork Jul 9, 2025
cd72891
SelText and updating Text/Value were interfering with each other
cursork Jul 10, 2025
3dc5e7a
Update SubForm rendering (TF1)
cursork Jul 15, 2025
8fe7c0f
Fix label
cursork Jul 16, 2025
cc6cfa3
Debugging for resize issues affecting Buttons
cursork Jul 17, 2025
ee5e0a9
Temporarily remove resize observer logic
cursork Jul 18, 2025
e457431
Prevent infinite loop ('blinking') Edits
cursork Jul 21, 2025
7c111b4
Add clipping to forms and tabcontrols
cursork Jul 22, 2025
0e66790
Try to catch suspected null dereference. Comment out console.logs
cursork Jul 25, 2025
462ed26
Check for case when there was no previously focussed field.
cursork Jul 25, 2025
dd8cea6
Retry WG if not yet rendered
cursork Aug 31, 2025
b9d5af7
Temporary fix for broken WG on SubForm Values
cursork Sep 6, 2025
9823b22
SubForms inherit BCol from other Forms and SubForms - can be used for…
cursork Sep 7, 2025
4e59cdd
Quick menubar fix
cursork Sep 7, 2025
1bbdf24
Fixes subform not being displayed and minor code refactor on text com…
sloorush Oct 16, 2025
1708bfa
Date selection changes
cursork Sep 9, 2025
88dcd33
Convert Text from SVG to <div> layout
cursork Oct 17, 2025
2715896
Move mouse actions to the text divs themselves
cursork Oct 17, 2025
02a9d28
Constrain box to exactly text size
cursork Oct 20, 2025
5779741
Apply BCol per text line
cursork Oct 20, 2025
f812552
Circle, Ellipse, Polygon and Rectangle all have sensible bounds now
cursork Oct 20, 2025
e1efa39
Images are just plain images, not embedded in SVGs now
cursork Oct 21, 2025
e462f08
Merge pull request #391 from Dyalog/text-as-div
cursork Oct 22, 2025
2d576a0
Ensure dist is up-to-date
cursork Oct 22, 2025
b685fef
Quick fix for not crashing with missing Size for List
cursork Oct 22, 2025
afa4975
Allow ctrl as well as meta for out of order multi List selection
cursork Oct 24, 2025
4f60309
Better setting of size when possibly inherited
cursork Oct 24, 2025
d134f54
StatusBar and StatusField implementation (#395)
sloorush Nov 7, 2025
dc3fe93
Latest build
cursork Nov 11, 2025
14804ec
Add GH action for yarn build on commits, where necessary
cursork Nov 27, 2025
94d9e20
Merge pull request #398 from Dyalog/action-test
cursork Nov 27, 2025
b373b83
Fixes #295. DropDown events are now sent for menu
cursork Nov 27, 2025
1d863ac
Build b373b83
github-actions[bot] Nov 27, 2025
96d91fa
Merge pull request #399 from Dyalog/issue295
cursork Nov 27, 2025
30bb758
NOBUILD in the description is a tag to not do a yarn build
cursork Nov 28, 2025
1066c28
Hide dist folder in GitHub PR diffs (#403)
sloorush Nov 28, 2025
4f0ecf8
Cover image (#401)
sloorush Nov 28, 2025
f85bcfd
Merge pull request #404 from Dyalog/skip-when-nobuild
cursork Nov 28, 2025
e157809
dont run action when md files are changed (#402)
sloorush Nov 28, 2025
6aa1017
Merge branch 'main' into devt
cursork Nov 28, 2025
ee8de2d
Merge branch 'next' into devt
cursork Nov 28, 2025
35d3e39
Build ee8de2d
github-actions[bot] Nov 28, 2025
fff248f
Fixing size and resize issues causing an infinite loop (#400)
sloorush Nov 28, 2025
8c979a2
Upgrade as many dependencies as possible
cursork Dec 10, 2025
6c37c8c
Remove Kendo
cursork Dec 11, 2025
ca1df51
Replace uuid with native crypto.randomUUID()
cursork Dec 11, 2025
afa5e98
Merge pull request #413 from Dyalog/devt-update-deps
cursork Dec 11, 2025
d23a421
GetTextSize no longer returns an invalid data structure
cursork Dec 11, 2025
337baa7
Build d23a421
github-actions[bot] Dec 11, 2025
5d700a8
Merge branch 'devt' into gettextsize-fix
cursork Dec 11, 2025
9cbd4a4
Build 5d700a8
github-actions[bot] Dec 11, 2025
c2b9ae8
Merge pull request #417 from Dyalog/gettextsize-fix
cursork Dec 11, 2025
14fbd31
Remove package-lock.json
cursork Dec 11, 2025
2ff811a
Add styling to Upload and Link
cursork Dec 15, 2025
29fa1c5
Fix font support in Link
cursork Dec 16, 2025
90217d3
Merge pull request #418 from Dyalog/style-upload-link
cursork Dec 16, 2025
f75d5a3
Missing font styles
cursork Dec 16, 2025
bbcc879
Build f75d5a3
github-actions[bot] Dec 16, 2025
a48e232
Fix calculateTextDimensions
cursork Dec 18, 2025
a9cf93d
Merge pull request #421 from Dyalog/text-dimensions
cursork Dec 18, 2025
2dd5838
Best guess font fallback based on name (in case font is not installed)
cursork Dec 19, 2025
8a499c3
Build 2dd5838
github-actions[bot] Dec 19, 2025
5d5d7f9
Merge branch 'devt' into fix-more-styles
cursork Dec 19, 2025
cdc2b45
Build 5d5d7f9
github-actions[bot] Dec 19, 2025
9ce18c9
Merge pull request #419 from Dyalog/fix-more-styles
cursork Dec 19, 2025
3020311
Zilde explicitly clears all BCol setting
cursork Dec 26, 2025
ea674c9
Build 3020311
github-actions[bot] Dec 26, 2025
69021de
Merge pull request #424 from Dyalog/background-subform-fix
cursork Dec 26, 2025
c53d7ae
Update Div to accept a 'Flex' to disable default styles and enable flex
cursork Dec 10, 2025
d0aea45
Build c53d7ae
github-actions[bot] Dec 27, 2025
0e30b05
Merge pull request #425 from Dyalog/add-div-flex
cursork Jan 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions .eslintrc.cjs

This file was deleted.

2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Mark dist folder as generated code to collapse in GitHub PR diffs
dist/** linguist-generated=true
54 changes: 54 additions & 0 deletions .github/workflows/build-and-commit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Build and Commit Dist

on:
push:
paths-ignore:
- '**.md'
- 'README'
- 'docs/**'

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Check for NOBUILD in commit message
id: check_nobuild
run: |
COMMIT_MSG=$(git log -1 --pretty=%B)
if echo "$COMMIT_MSG" | grep -q "NOBUILD"; then
echo "NOBUILD found in commit message. Skipping build."
echo "skip=true" >> $GITHUB_OUTPUT
else
echo "skip=false" >> $GITHUB_OUTPUT
fi

- name: Setup Node.js
if: steps.check_nobuild.outputs.skip != 'true'
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'yarn'

- name: Install dependencies
if: steps.check_nobuild.outputs.skip != 'true'
run: yarn install --frozen-lockfile

- name: Build project
if: steps.check_nobuild.outputs.skip != 'true'
run: yarn build

- name: Commit and push dist directory
if: steps.check_nobuild.outputs.skip != 'true'
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add dist/
git commit -m "Build $(git rev-parse --short HEAD)" || echo "No changes to commit"
git push
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,6 @@ dist-ssr

# Licenses / secrets
kendo-ui-license.txt

# Personal TODOs
TODO.md
45 changes: 44 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,46 @@
# EWC Client

This is the JavaScript/React client for the [EWC project](https://github.com/dyalog/ewc).
![EWC-Client Cover](./assets/ewc_client_cover.png)

This is the JavaScript/React client for the [EWC project](https://github.com/dyalog/ewc).

## Getting Started

Clone [ewc](https://github.com/dyalog/ewc) and this repository. It is suggested
that you place the two repositories next to each other, for example:

/my/dev/directory/ewc
/my/dev/directory/ewc-client

This ensures that when running ewc, it will, by default, pick up the latest
build from ewc-client automatically.

Follow the [instructions for verifying an ewc installation](https://dyalog.github.io/ewc/0.2/Usage/Installation/).

When working on the JavaScript code, we use [vite](https://vite.dev) for hot
reloading. To point to EWC on the default websocket port 22322, simply copy
.env.example:

cp .env.example .env.development

Then run the vite server:

vite

For development, it's much easier to run in a browser to use all the tooling.
In APL, you simply change mode from 'Desktop' to 'Browser':

demo.Run 'Browser'

Then open http://localhost:5173 (assuming default vite port). By default, this
will connect a websocket over the :22322 port, as mentioned above.

## Branches

We use three permanent branches in ewc-client.

* `main`: this code has been released.
* `next`: this will become the next `main`. It should be stable.
* `devt`: this is unstable and should be considered the 'bleeding edge'.

Contributors should checkout devt, and create PRs against that branch.
Binary file added assets/ewc_client_cover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
981 changes: 981 additions & 0 deletions dist/assets/index-BMNP46sN.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/assets/index-CCWCbohx.css

Large diffs are not rendered by default.

9 changes: 0 additions & 9 deletions dist/assets/index-a7f06d4a.css

This file was deleted.

2,563 changes: 0 additions & 2,563 deletions dist/assets/index-ad032e29.js

This file was deleted.

5 changes: 2 additions & 3 deletions dist/index.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import js from '@eslint/js';
import globals from 'globals';
import react from 'eslint-plugin-react';
import reactHooks from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';

export default [
{ ignores: ['dist'] },
{
files: ['**/*.{js,jsx}'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
...globals.browser,
},
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
settings: {
react: {
version: '18.2',
},
},
plugins: {
react,
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...js.configs.recommended.rules,
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
...reactHooks.configs.recommended.rules,
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
];
Loading