anylumino 0.1.0__tar.gz
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.
- anylumino-0.1.0/.github/workflows/ci.yml +77 -0
- anylumino-0.1.0/.github/workflows/docs.yml +65 -0
- anylumino-0.1.0/.github/workflows/release.yml +123 -0
- anylumino-0.1.0/.gitignore +17 -0
- anylumino-0.1.0/CHANGELOG.md +6 -0
- anylumino-0.1.0/CONTRIBUTING.md +26 -0
- anylumino-0.1.0/LICENSE +21 -0
- anylumino-0.1.0/Makefile +72 -0
- anylumino-0.1.0/PKG-INFO +403 -0
- anylumino-0.1.0/README.md +387 -0
- anylumino-0.1.0/THIRD_PARTY_LICENSES.md +1161 -0
- anylumino-0.1.0/app/docs/[[...slug]]/page.tsx +53 -0
- anylumino-0.1.0/app/docs/layout.tsx +12 -0
- anylumino-0.1.0/app/global.css +146 -0
- anylumino-0.1.0/app/layout.tsx +28 -0
- anylumino-0.1.0/app/page.tsx +15 -0
- anylumino-0.1.0/app/static.json/route.ts +6 -0
- anylumino-0.1.0/content/docs/api/astryx/base/Component.mdx +66 -0
- anylumino-0.1.0/content/docs/api/astryx/base/Theme.mdx +162 -0
- anylumino-0.1.0/content/docs/api/astryx/base/Widget.mdx +223 -0
- anylumino-0.1.0/content/docs/api/astryx/base/index.mdx +171 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Avatar.mdx +81 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Banner.mdx +106 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Blockquote.mdx +47 -0
- anylumino-0.1.0/content/docs/api/astryx/data/CodeBlock.mdx +161 -0
- anylumino-0.1.0/content/docs/api/astryx/data/EmptyState.mdx +82 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Icon.mdx +65 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Kbd.mdx +47 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Link.mdx +157 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Markdown.mdx +139 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Pagination.mdx +107 -0
- anylumino-0.1.0/content/docs/api/astryx/data/ProgressBar.mdx +106 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Skeleton.mdx +68 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Spinner.mdx +68 -0
- anylumino-0.1.0/content/docs/api/astryx/data/StatusDot.mdx +76 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Table.mdx +420 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Thumbnail.mdx +110 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Timestamp.mdx +119 -0
- anylumino-0.1.0/content/docs/api/astryx/data/Token.mdx +125 -0
- anylumino-0.1.0/content/docs/api/astryx/data/index.mdx +47 -0
- anylumino-0.1.0/content/docs/api/astryx/index.mdx +19 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Badge.mdx +50 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Button.mdx +111 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Checkbox.mdx +128 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/DateInput.mdx +126 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/DateRangeInput.mdx +131 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/DateTimeInput.mdx +142 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Heading.mdx +118 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/IconButton.mdx +100 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/LogSlider.mdx +105 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/MultiSelector.mdx +178 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/NumberInput.mdx +162 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/PowerSearch.mdx +95 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/SelectionSlider.mdx +103 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Selector.mdx +152 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Slider.mdx +150 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Switch.mdx +127 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/Text.mdx +136 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/TextArea.mdx +171 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/TextInput.mdx +177 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/TimeInput.mdx +145 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/ToggleButton.mdx +96 -0
- anylumino-0.1.0/content/docs/api/astryx/inputs/index.mdx +53 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/AccordionPanel.mdx +135 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/ResponsivePanel.mdx +89 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/ScrollBox.mdx +102 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/SplitPanel.mdx +89 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/StackedPanel.mdx +92 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/TabPanel.mdx +152 -0
- anylumino-0.1.0/content/docs/api/astryx/layout/index.mdx +31 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/AlertDialog.mdx +134 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/AspectRatio.mdx +49 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/AvatarGroup.mdx +68 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Breadcrumbs.mdx +76 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/ButtonGroup.mdx +99 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Calendar.mdx +116 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Card.mdx +100 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Carousel.mdx +71 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Center.mdx +79 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/CheckboxList.mdx +114 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Citation.mdx +65 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/ClickableCard.mdx +127 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Code.mdx +45 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Collapsible.mdx +78 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/CommandPalette.mdx +136 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/ContextMenu.mdx +81 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Dialog.mdx +116 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Divider.mdx +75 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/DropdownMenu.mdx +126 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Field.mdx +141 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/FieldStatus.mdx +60 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/FileInput.mdx +158 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/FormLayout.mdx +55 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Grid.mdx +122 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/HoverCard.mdx +127 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/InputGroup.mdx +123 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Lightbox.mdx +76 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/List.mdx +90 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/MetadataList.mdx +92 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/MoreMenu.mdx +110 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Outline.mdx +81 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Overlay.mdx +87 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Popover.mdx +133 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/RadioList.mdx +115 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Section.mdx +113 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/SegmentedControl.mdx +88 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/SelectableCard.mdx +114 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Stack.mdx +134 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/TabList.mdx +93 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/ToggleButtonGroup.mdx +100 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Tokenizer.mdx +179 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Toolbar.mdx +104 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Tooltip.mdx +133 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/TreeList.mdx +72 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/Typeahead.mdx +165 -0
- anylumino-0.1.0/content/docs/api/astryx/surfaces/index.mdx +101 -0
- anylumino-0.1.0/content/docs/api/components/ComponentWidget.mdx +166 -0
- anylumino-0.1.0/content/docs/api/components/index.mdx +15 -0
- anylumino-0.1.0/content/docs/api/controls/DatePicker.mdx +77 -0
- anylumino-0.1.0/content/docs/api/controls/DatetimePicker.mdx +83 -0
- anylumino-0.1.0/content/docs/api/controls/TimePicker.mdx +83 -0
- anylumino-0.1.0/content/docs/api/controls/index.mdx +15 -0
- anylumino-0.1.0/content/docs/api/index.mdx +17 -0
- anylumino-0.1.0/content/docs/api/layout/AccordionPanel.mdx +63 -0
- anylumino-0.1.0/content/docs/api/layout/BoxPanel.mdx +143 -0
- anylumino-0.1.0/content/docs/api/layout/CommandPalette.mdx +54 -0
- anylumino-0.1.0/content/docs/api/layout/DockPanel.mdx +70 -0
- anylumino-0.1.0/content/docs/api/layout/GridPanel.mdx +104 -0
- anylumino-0.1.0/content/docs/api/layout/HBox.mdx +107 -0
- anylumino-0.1.0/content/docs/api/layout/KeyedChildren.mdx +366 -0
- anylumino-0.1.0/content/docs/api/layout/LayoutWidget.mdx +35 -0
- anylumino-0.1.0/content/docs/api/layout/MenuBar.mdx +49 -0
- anylumino-0.1.0/content/docs/api/layout/ResponsivePanel.mdx +102 -0
- anylumino-0.1.0/content/docs/api/layout/ScrollBox.mdx +106 -0
- anylumino-0.1.0/content/docs/api/layout/SplitPanel.mdx +97 -0
- anylumino-0.1.0/content/docs/api/layout/StackedPanel.mdx +93 -0
- anylumino-0.1.0/content/docs/api/layout/TabPanel.mdx +147 -0
- anylumino-0.1.0/content/docs/api/layout/TextWidget.mdx +30 -0
- anylumino-0.1.0/content/docs/api/layout/Toolbar.mdx +48 -0
- anylumino-0.1.0/content/docs/api/layout/VBox.mdx +107 -0
- anylumino-0.1.0/content/docs/api/layout/index.mdx +61 -0
- anylumino-0.1.0/content/docs/api/meta.json +10 -0
- anylumino-0.1.0/content/docs/assets/anylumino-mark.svg +92 -0
- anylumino-0.1.0/content/docs/astryx.mdx +404 -0
- anylumino-0.1.0/content/docs/controls.mdx +161 -0
- anylumino-0.1.0/content/docs/examples.mdx +142 -0
- anylumino-0.1.0/content/docs/guide-overview.mdx +105 -0
- anylumino-0.1.0/content/docs/guide.mdx +212 -0
- anylumino-0.1.0/content/docs/index.mdx +122 -0
- anylumino-0.1.0/content/docs/meta.json +12 -0
- anylumino-0.1.0/docs/astryx_brand_theme.md +261 -0
- anylumino-0.1.0/docs/astryx_review.md +141 -0
- anylumino-0.1.0/docs/astryx_widgets.md +378 -0
- anylumino-0.1.0/docs/release_recommendations.md +119 -0
- anylumino-0.1.0/docs-site/components/mdx.tsx +35 -0
- anylumino-0.1.0/docs-site/lib/docs-href.mjs +20 -0
- anylumino-0.1.0/docs-site/lib/layout.shared.tsx +10 -0
- anylumino-0.1.0/docs-site/lib/source.ts +18 -0
- anylumino-0.1.0/eslint.config.mjs +18 -0
- anylumino-0.1.0/licenses/astryx.txt +21 -0
- anylumino-0.1.0/licenses/lumino.txt +56 -0
- anylumino-0.1.0/licenses/stylex.txt +21 -0
- anylumino-0.1.0/next-env.d.ts +7 -0
- anylumino-0.1.0/next.config.mjs +18 -0
- anylumino-0.1.0/notebooks/astryx_components_smoke.py +669 -0
- anylumino-0.1.0/notebooks/astryx_layout_panels.py +200 -0
- anylumino-0.1.0/notebooks/astryx_table.py +167 -0
- anylumino-0.1.0/notebooks/astryx_themes.py +133 -0
- anylumino-0.1.0/notebooks/input_controls_hbox.py +130 -0
- anylumino-0.1.0/notebooks/itables_tabs.py +186 -0
- anylumino-0.1.0/notebooks/plotly_dashboard.py +499 -0
- anylumino-0.1.0/notebooks/plotly_tabs.py +84 -0
- anylumino-0.1.0/package-lock.json +11815 -0
- anylumino-0.1.0/package.json +51 -0
- anylumino-0.1.0/postcss.config.mjs +7 -0
- anylumino-0.1.0/pyproject.toml +44 -0
- anylumino-0.1.0/scripts/build-frontend.mjs +30 -0
- anylumino-0.1.0/scripts/bundle-entries.mjs +15 -0
- anylumino-0.1.0/scripts/generate-api-docs.mjs +73 -0
- anylumino-0.1.0/scripts/generate-frontend-licenses.mjs +114 -0
- anylumino-0.1.0/src/anylumino/__init__.py +47 -0
- anylumino-0.1.0/src/anylumino/astryx/__init__.py +194 -0
- anylumino-0.1.0/src/anylumino/astryx/base.py +785 -0
- anylumino-0.1.0/src/anylumino/astryx/data.py +1623 -0
- anylumino-0.1.0/src/anylumino/astryx/inputs.py +2116 -0
- anylumino-0.1.0/src/anylumino/astryx/layout.py +467 -0
- anylumino-0.1.0/src/anylumino/astryx/surfaces.py +3622 -0
- anylumino-0.1.0/src/anylumino/common.py +115 -0
- anylumino-0.1.0/src/anylumino/components.py +125 -0
- anylumino-0.1.0/src/anylumino/controls.py +199 -0
- anylumino-0.1.0/src/anylumino/layout.py +1383 -0
- anylumino-0.1.0/src/anylumino/py.typed +1 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_bridge.mjs +151 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_theme.mjs +114 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_widget.bundle.css +1 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_widget.bundle.js +280 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_widget.css +109 -0
- anylumino-0.1.0/src/anylumino/static/astryx/astryx_widget.js +2121 -0
- anylumino-0.1.0/src/anylumino/static/controls/native_control_widget.bundle.js +1 -0
- anylumino-0.1.0/src/anylumino/static/controls/native_control_widget.css +105 -0
- anylumino-0.1.0/src/anylumino/static/controls/native_control_widget.js +180 -0
- anylumino-0.1.0/src/anylumino/static/layout/action_panel.bundle.js +1 -0
- anylumino-0.1.0/src/anylumino/static/layout/action_panel.css +177 -0
- anylumino-0.1.0/src/anylumino/static/layout/action_panel.js +350 -0
- anylumino-0.1.0/src/anylumino/static/layout/composition.js +373 -0
- anylumino-0.1.0/src/anylumino/static/layout/layout_panel.bundle.js +1 -0
- anylumino-0.1.0/src/anylumino/static/layout/layout_panel.css +207 -0
- anylumino-0.1.0/src/anylumino/static/layout/layout_panel.js +508 -0
- anylumino-0.1.0/src/anylumino/static/layout/tab_panel.bundle.js +1 -0
- anylumino-0.1.0/src/anylumino/static/layout/tab_panel.css +156 -0
- anylumino-0.1.0/src/anylumino/static/layout/tab_panel.js +329 -0
- anylumino-0.1.0/src/anylumino/static/layout/text_widget.css +10 -0
- anylumino-0.1.0/src/anylumino/static/layout/text_widget.js +21 -0
- anylumino-0.1.0/tests/docs-href.test.mjs +24 -0
- anylumino-0.1.0/tests/frontend/astryx_bridge.test.mjs +165 -0
- anylumino-0.1.0/tests/frontend/astryx_theme.test.mjs +179 -0
- anylumino-0.1.0/tests/frontend/composition.test.mjs +163 -0
- anylumino-0.1.0/tests/test_widgets.py +1715 -0
- anylumino-0.1.0/tsconfig.json +32 -0
- anylumino-0.1.0/uv.lock +1993 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- name: Check out repository
|
|
13
|
+
uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.14"
|
|
19
|
+
|
|
20
|
+
- name: Set up uv
|
|
21
|
+
uses: astral-sh/setup-uv@v5
|
|
22
|
+
|
|
23
|
+
- name: Set up Node.js
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: "22"
|
|
27
|
+
cache: npm
|
|
28
|
+
|
|
29
|
+
- name: Install frontend dependencies
|
|
30
|
+
run: npm ci
|
|
31
|
+
|
|
32
|
+
- name: Build frontend bundles
|
|
33
|
+
run: npm run build
|
|
34
|
+
|
|
35
|
+
- name: Verify committed bundles are current
|
|
36
|
+
run: git diff --exit-code -- src/anylumino/static
|
|
37
|
+
|
|
38
|
+
- name: Regenerate bundled dependency licenses
|
|
39
|
+
run: npm run licenses
|
|
40
|
+
|
|
41
|
+
- name: Verify the license inventory is current
|
|
42
|
+
run: git diff --exit-code -- THIRD_PARTY_LICENSES.md
|
|
43
|
+
|
|
44
|
+
- name: Run frontend tests
|
|
45
|
+
run: npm test
|
|
46
|
+
|
|
47
|
+
- name: Install Python dependencies
|
|
48
|
+
run: uv sync --dev
|
|
49
|
+
|
|
50
|
+
- name: Check documentation
|
|
51
|
+
run: make docs-check
|
|
52
|
+
|
|
53
|
+
- name: Run tests
|
|
54
|
+
run: uv run --no-sync pytest
|
|
55
|
+
|
|
56
|
+
- name: Build distributions
|
|
57
|
+
run: uv build
|
|
58
|
+
|
|
59
|
+
- name: Validate distributions for publication
|
|
60
|
+
run: uv publish --dry-run --trusted-publishing never dist/*
|
|
61
|
+
|
|
62
|
+
- name: Test installed wheel
|
|
63
|
+
run: |
|
|
64
|
+
uv venv /tmp/anylumino-wheel
|
|
65
|
+
uv pip install --python /tmp/anylumino-wheel/bin/python dist/*.whl
|
|
66
|
+
cd /tmp
|
|
67
|
+
/tmp/anylumino-wheel/bin/python - <<'PY'
|
|
68
|
+
import anylumino as al
|
|
69
|
+
import anylumino.astryx as ax
|
|
70
|
+
|
|
71
|
+
panel = al.TabPanel({"text": ax.Text("Wheel check")})
|
|
72
|
+
assert panel.child_keys == ["text"]
|
|
73
|
+
for widget in (panel, panel["text"], al.DatePicker()):
|
|
74
|
+
state = widget.get_state()
|
|
75
|
+
assert "export" in state["_esm"]
|
|
76
|
+
assert "anylumino" in state["_css"]
|
|
77
|
+
PY
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: pages
|
|
15
|
+
cancel-in-progress: false
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Check out repository
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.14"
|
|
29
|
+
|
|
30
|
+
- name: Set up uv
|
|
31
|
+
uses: astral-sh/setup-uv@v5
|
|
32
|
+
|
|
33
|
+
- name: Set up Node.js
|
|
34
|
+
uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: "22"
|
|
37
|
+
cache: npm
|
|
38
|
+
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: |
|
|
41
|
+
npm ci
|
|
42
|
+
uv sync --dev
|
|
43
|
+
|
|
44
|
+
- name: Build the documentation site
|
|
45
|
+
env:
|
|
46
|
+
NEXT_PUBLIC_BASE_PATH: /anylumino
|
|
47
|
+
run: make docs
|
|
48
|
+
|
|
49
|
+
- name: Upload the exported site
|
|
50
|
+
uses: actions/upload-pages-artifact@v3
|
|
51
|
+
with:
|
|
52
|
+
path: out
|
|
53
|
+
|
|
54
|
+
deploy:
|
|
55
|
+
needs: build
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
|
|
58
|
+
environment:
|
|
59
|
+
name: github-pages
|
|
60
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
61
|
+
|
|
62
|
+
steps:
|
|
63
|
+
- name: Deploy to GitHub Pages
|
|
64
|
+
id: deployment
|
|
65
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
index:
|
|
9
|
+
description: Index to publish to
|
|
10
|
+
type: choice
|
|
11
|
+
options: [pypi, testpypi]
|
|
12
|
+
default: testpypi
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Check out repository
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.14"
|
|
29
|
+
|
|
30
|
+
- name: Set up uv
|
|
31
|
+
uses: astral-sh/setup-uv@v5
|
|
32
|
+
|
|
33
|
+
- name: Set up Node.js
|
|
34
|
+
uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: "22"
|
|
37
|
+
cache: npm
|
|
38
|
+
|
|
39
|
+
- name: Build frontend bundles
|
|
40
|
+
run: |
|
|
41
|
+
npm ci
|
|
42
|
+
npm run build
|
|
43
|
+
|
|
44
|
+
- name: Verify committed bundles are current
|
|
45
|
+
run: git diff --exit-code -- src/anylumino/static
|
|
46
|
+
|
|
47
|
+
- name: Verify the tag matches the project version
|
|
48
|
+
if: github.ref_type == 'tag'
|
|
49
|
+
run: |
|
|
50
|
+
version="$(uv version --short)"
|
|
51
|
+
if [ "v$version" != "${{ github.ref_name }}" ]; then
|
|
52
|
+
echo "Tag ${{ github.ref_name }} does not match project version $version"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
- name: Build distributions
|
|
57
|
+
run: uv build
|
|
58
|
+
|
|
59
|
+
- name: Validate distributions for publication
|
|
60
|
+
run: uv publish --dry-run --trusted-publishing never dist/*
|
|
61
|
+
|
|
62
|
+
- name: Upload distributions
|
|
63
|
+
uses: actions/upload-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: distributions
|
|
66
|
+
path: dist
|
|
67
|
+
|
|
68
|
+
publish:
|
|
69
|
+
needs: build
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
|
|
72
|
+
# Trusted Publishing exchanges this job's OIDC token for a short-lived
|
|
73
|
+
# upload token, so the workflow needs no stored PyPI credentials.
|
|
74
|
+
environment: ${{ github.event.inputs.index || 'pypi' }}
|
|
75
|
+
permissions:
|
|
76
|
+
id-token: write
|
|
77
|
+
|
|
78
|
+
steps:
|
|
79
|
+
- name: Set up uv
|
|
80
|
+
uses: astral-sh/setup-uv@v5
|
|
81
|
+
|
|
82
|
+
- name: Download distributions
|
|
83
|
+
uses: actions/download-artifact@v4
|
|
84
|
+
with:
|
|
85
|
+
name: distributions
|
|
86
|
+
path: dist
|
|
87
|
+
|
|
88
|
+
- name: Publish to PyPI
|
|
89
|
+
if: github.event.inputs.index != 'testpypi'
|
|
90
|
+
run: uv publish dist/*
|
|
91
|
+
|
|
92
|
+
- name: Publish to TestPyPI
|
|
93
|
+
if: github.event.inputs.index == 'testpypi'
|
|
94
|
+
run: uv publish --publish-url https://test.pypi.org/legacy/ dist/*
|
|
95
|
+
|
|
96
|
+
attach:
|
|
97
|
+
needs: build
|
|
98
|
+
if: github.ref_type == 'tag'
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
|
|
101
|
+
permissions:
|
|
102
|
+
contents: write
|
|
103
|
+
|
|
104
|
+
steps:
|
|
105
|
+
- name: Check out repository
|
|
106
|
+
uses: actions/checkout@v4
|
|
107
|
+
|
|
108
|
+
- name: Download distributions
|
|
109
|
+
uses: actions/download-artifact@v4
|
|
110
|
+
with:
|
|
111
|
+
name: distributions
|
|
112
|
+
path: dist
|
|
113
|
+
|
|
114
|
+
- name: Attach distributions to the release
|
|
115
|
+
env:
|
|
116
|
+
GH_TOKEN: ${{ github.token }}
|
|
117
|
+
TAG: ${{ github.ref_name }}
|
|
118
|
+
run: |
|
|
119
|
+
if gh release view "$TAG" > /dev/null 2>&1; then
|
|
120
|
+
gh release upload "$TAG" dist/* --clobber
|
|
121
|
+
else
|
|
122
|
+
gh release create "$TAG" dist/* --verify-tag --generate-notes --title "anylumino ${TAG#v}"
|
|
123
|
+
fi
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Install the development dependencies and build the frontend before running the
|
|
4
|
+
checks:
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
uv sync --group dev
|
|
8
|
+
npm ci
|
|
9
|
+
npm run build
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Run `uv run --no-sync pytest` for Python tests, `npm test` for frontend tests,
|
|
13
|
+
and `make docs-check` for generated API pages, documentation links, linting,
|
|
14
|
+
types, and the production documentation build. Keep generated frontend bundles
|
|
15
|
+
current by running `npm run build` after frontend changes, and regenerate
|
|
16
|
+
`THIRD_PARTY_LICENSES.md` with `npm run licenses` after frontend dependency
|
|
17
|
+
changes. CI verifies both files.
|
|
18
|
+
|
|
19
|
+
Keep pull requests focused. Add or update a runnable notebook when a change
|
|
20
|
+
introduces a user-facing widget pattern, and update the relevant documentation
|
|
21
|
+
when public behavior changes.
|
|
22
|
+
|
|
23
|
+
Releases run from a `v*` tag. Bump the version in `pyproject.toml`, tag the
|
|
24
|
+
release commit, and push the tag; the Release workflow builds the
|
|
25
|
+
distributions, attaches them to the GitHub release, and publishes to PyPI
|
|
26
|
+
through Trusted Publishing.
|
anylumino-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Faysal Aberkane <faysal.aberkane@gmail.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
anylumino-0.1.0/Makefile
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
DOCS_PORT ?= 4200
|
|
2
|
+
DOCS_HOST ?= 127.0.0.1
|
|
3
|
+
OPEN ?= open
|
|
4
|
+
DOCS_URL = http://$(DOCS_HOST):$(DOCS_PORT)/docs
|
|
5
|
+
|
|
6
|
+
.PHONY: install-dev
|
|
7
|
+
install-dev:
|
|
8
|
+
uv sync --group dev
|
|
9
|
+
npm ci
|
|
10
|
+
npm run build
|
|
11
|
+
uv run --no-sync jupytext-config set-default-viewer
|
|
12
|
+
|
|
13
|
+
.PHONY: update-dependencies
|
|
14
|
+
update-dependencies:
|
|
15
|
+
uv lock \
|
|
16
|
+
--upgrade-package anywidget \
|
|
17
|
+
--upgrade-package jupyter \
|
|
18
|
+
--upgrade-package jupyterlab \
|
|
19
|
+
--upgrade-package jupyter-builder
|
|
20
|
+
npm install --save-exact @lumino/commands@latest @lumino/widgets@latest
|
|
21
|
+
npm install --save-prefix='^' @astryxdesign/core@latest @astryxdesign/theme-neutral@latest
|
|
22
|
+
npm install --save-dev --save-prefix='^' @astryxdesign/cli@latest
|
|
23
|
+
npm run build
|
|
24
|
+
|
|
25
|
+
.PHONY: frontend
|
|
26
|
+
frontend:
|
|
27
|
+
npm run build
|
|
28
|
+
|
|
29
|
+
.PHONY: test
|
|
30
|
+
test:
|
|
31
|
+
npm test
|
|
32
|
+
uv run pytest
|
|
33
|
+
|
|
34
|
+
.PHONY: docs-reference
|
|
35
|
+
docs-reference: docs-install
|
|
36
|
+
@mkdir -p build/docs
|
|
37
|
+
PYTHONPATH=node_modules/fumadocs-python:src uv run --no-sync python -c 'from fumapy import generate; generate()' anylumino --docstring-style numpy --dir build/docs
|
|
38
|
+
npm run docs:convert
|
|
39
|
+
|
|
40
|
+
.PHONY: docs-install
|
|
41
|
+
docs-install:
|
|
42
|
+
uv sync --group dev
|
|
43
|
+
npm ci
|
|
44
|
+
|
|
45
|
+
.PHONY: docs-check-port
|
|
46
|
+
docs-check-port:
|
|
47
|
+
@if lsof -nP -iTCP:$(DOCS_PORT) -sTCP:LISTEN >/dev/null 2>&1; then \
|
|
48
|
+
echo "Port $(DOCS_PORT) is already in use. Stop the process below or run with DOCS_PORT=<free-port>:"; \
|
|
49
|
+
lsof -nP -iTCP:$(DOCS_PORT) -sTCP:LISTEN; \
|
|
50
|
+
exit 1; \
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
.PHONY: docs
|
|
54
|
+
docs: docs-reference
|
|
55
|
+
npm run docs:build
|
|
56
|
+
|
|
57
|
+
.PHONY: docs-preview
|
|
58
|
+
docs-preview: docs-reference
|
|
59
|
+
(sleep 2; $(OPEN) $(DOCS_URL)) &
|
|
60
|
+
npm run docs:dev -- --hostname $(DOCS_HOST) --port $(DOCS_PORT)
|
|
61
|
+
|
|
62
|
+
.PHONY: docs-serve
|
|
63
|
+
docs-serve: docs-check-port docs
|
|
64
|
+
(sleep 1; $(OPEN) $(DOCS_URL)) &
|
|
65
|
+
uv run --no-sync python -m http.server $(DOCS_PORT) --bind $(DOCS_HOST) --directory out
|
|
66
|
+
|
|
67
|
+
.PHONY: docs-check
|
|
68
|
+
docs-check: docs-reference
|
|
69
|
+
npm run docs:test-links
|
|
70
|
+
npm run docs:lint
|
|
71
|
+
npm run docs:types
|
|
72
|
+
npm run docs:build
|