panel-splitjs 0.2.1__tar.gz → 0.3.1__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.
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/build.yml +5 -5
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/test.yml +2 -2
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/update-lockfiles.yml +1 -1
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/PKG-INFO +119 -52
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/README.md +118 -51
- panel_splitjs-0.3.1/docs/assets/images/basic-horizontal-split.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/basic-vertical-split.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/chat-example.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/collapsable-sidebar.gif +0 -0
- panel_splitjs-0.3.1/docs/assets/images/complex-multi-panel-layout.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/dashboard-with-collapsable-controls.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/multisplit.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/nested-splits.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/quick-start.gif +0 -0
- panel_splitjs-0.3.1/docs/assets/images/responsive-layout-with-size-constraints.png +0 -0
- panel_splitjs-0.3.1/docs/assets/images/show-buttons.png +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pixi.lock +5602 -5349
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/_version.py +2 -2
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/base.py +5 -2
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/splitjs.css +42 -101
- panel_splitjs-0.3.1/src/panel_splitjs/dist/panel-splitjs.bundle.js +1 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/models/multi_split.js +3 -1
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/models/split.js +39 -9
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/tests/test_ui.py +105 -5
- panel_splitjs-0.2.1/src/panel_splitjs/dist/panel-splitjs.bundle.js +0 -1
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.copier-answers.yml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.gitattributes +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/CODEOWNERS +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/dependabot.yml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.gitignore +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.pre-commit-config.yaml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.prettierrc +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/LICENSE.txt +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/MANIFEST.in +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/assets/logo.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/index.md +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/reference/panel_splitjs.md +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/examples/apps/multi.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/examples/apps/simple.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/hatch_build.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/mkdocs.yml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pixi.toml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pyproject.toml +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/__init__.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/__version.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_down.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_left.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_right.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_up.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/handle.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/handle_vertical.svg +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/tests/conftest.py +0 -0
- {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/tests/test_base.py +0 -0
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
with:
|
|
19
19
|
fetch-depth: 0
|
|
20
20
|
- name: Set up pixi
|
|
21
|
-
uses: prefix-dev/setup-pixi@
|
|
21
|
+
uses: prefix-dev/setup-pixi@28eb668aafebd9dede9d97c4ba1cd9989a4d0004 # v0.9.2
|
|
22
22
|
with:
|
|
23
23
|
environments: build
|
|
24
24
|
- name: Build project
|
|
@@ -26,12 +26,12 @@ jobs:
|
|
|
26
26
|
- name: Check package
|
|
27
27
|
run: pixi run -e build check-wheel
|
|
28
28
|
- name: Upload package
|
|
29
|
-
uses: actions/upload-artifact@
|
|
29
|
+
uses: actions/upload-artifact@v5
|
|
30
30
|
with:
|
|
31
31
|
name: pip
|
|
32
32
|
path: dist/*
|
|
33
33
|
- name: Upload bundle
|
|
34
|
-
uses: actions/upload-artifact@
|
|
34
|
+
uses: actions/upload-artifact@v5
|
|
35
35
|
with:
|
|
36
36
|
name: cdn
|
|
37
37
|
path: src/panel_splitjs/dist/
|
|
@@ -44,7 +44,7 @@ jobs:
|
|
|
44
44
|
id-token: write
|
|
45
45
|
environment: pypi
|
|
46
46
|
steps:
|
|
47
|
-
- uses: actions/download-artifact@
|
|
47
|
+
- uses: actions/download-artifact@v6
|
|
48
48
|
with:
|
|
49
49
|
name: pip
|
|
50
50
|
path: dist/
|
|
@@ -56,7 +56,7 @@ jobs:
|
|
|
56
56
|
needs: [build]
|
|
57
57
|
runs-on: ubuntu-latest
|
|
58
58
|
steps:
|
|
59
|
-
- uses: actions/download-artifact@
|
|
59
|
+
- uses: actions/download-artifact@v6
|
|
60
60
|
with:
|
|
61
61
|
name: cdn
|
|
62
62
|
path: dist/
|
|
@@ -44,7 +44,7 @@ jobs:
|
|
|
44
44
|
steps:
|
|
45
45
|
- uses: actions/checkout@v5.0.0
|
|
46
46
|
- name: Set up pixi
|
|
47
|
-
uses: prefix-dev/setup-pixi@v0.9.
|
|
47
|
+
uses: prefix-dev/setup-pixi@v0.9.2
|
|
48
48
|
- uses: holoviz-dev/holoviz_tasks/pre-commit@v0
|
|
49
49
|
- uses: pre-commit/action@v3.0.1
|
|
50
50
|
if: needs.setup.outputs.img_change == 'true'
|
|
@@ -169,7 +169,7 @@ jobs:
|
|
|
169
169
|
FAIL="--screenshot only-on-failure --full-page-screenshot --output ui_screenshots --tracing retain-on-failure"
|
|
170
170
|
pixi run -e ${{ matrix.environment }} test-ui $COV --cov-config=.uicoveragerc $FAIL
|
|
171
171
|
- name: Upload UI Screenshots
|
|
172
|
-
uses: actions/upload-artifact@
|
|
172
|
+
uses: actions/upload-artifact@v5
|
|
173
173
|
if: always()
|
|
174
174
|
with:
|
|
175
175
|
name: ui_screenshots_${{ runner.os }}
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
steps:
|
|
15
15
|
- uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2
|
|
16
16
|
- name: Set up pixi
|
|
17
|
-
uses: prefix-dev/setup-pixi@
|
|
17
|
+
uses: prefix-dev/setup-pixi@28eb668aafebd9dede9d97c4ba1cd9989a4d0004 # v0.9.2
|
|
18
18
|
with:
|
|
19
19
|
run-install: false
|
|
20
20
|
- name: Update lockfiles
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: panel-splitjs
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Provides split.js components for Panel.
|
|
5
5
|
Project-URL: Homepage, https://github.com/panel-extensions/panel-splitjs
|
|
6
6
|
Project-URL: Source, https://github.com/panel-extensions/panel-splitjs
|
|
@@ -81,16 +81,18 @@ pn.extension()
|
|
|
81
81
|
|
|
82
82
|
# Create a simple split layout
|
|
83
83
|
split = Split(
|
|
84
|
-
pn.pane.Markdown("## Left Panel\nContent here"),
|
|
85
|
-
pn.pane.Markdown("## Right Panel\nMore content"),
|
|
84
|
+
pn.pane.Markdown("## Left Panel\nContent here", width=150),
|
|
85
|
+
pn.pane.Markdown("## Right Panel\nMore content", width=150),
|
|
86
86
|
sizes=(50, 50), # Equal sizing initially
|
|
87
|
-
min_size=
|
|
88
|
-
|
|
87
|
+
min_size=150, # Minimum 150px for each panel
|
|
88
|
+
sizing_mode="stretch_both",
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
split.servable()
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+

|
|
95
|
+
|
|
94
96
|
## Usage Examples
|
|
95
97
|
|
|
96
98
|
### Basic Horizontal Split
|
|
@@ -99,30 +101,35 @@ split.servable()
|
|
|
99
101
|
import panel as pn
|
|
100
102
|
from panel_splitjs import HSplit
|
|
101
103
|
|
|
102
|
-
pn.extension()
|
|
104
|
+
pn.extension(sizing_mode="stretch_width")
|
|
103
105
|
|
|
104
106
|
left_panel = pn.Column(
|
|
105
107
|
"# Main Content",
|
|
106
108
|
pn.widgets.TextInput(name="Input"),
|
|
107
|
-
pn.pane.Markdown("This is the main content area.")
|
|
109
|
+
pn.pane.Markdown("This is the main content area."),
|
|
110
|
+
margin=25, # To separate toggle button and column
|
|
108
111
|
)
|
|
109
112
|
|
|
110
113
|
right_panel = pn.Column(
|
|
111
114
|
"# Sidebar",
|
|
112
115
|
pn.widgets.Select(name="Options", options=["A", "B", "C"]),
|
|
116
|
+
margin=25, # To separate toggle button and column
|
|
113
117
|
)
|
|
114
118
|
|
|
115
119
|
split = HSplit(
|
|
116
120
|
left_panel,
|
|
117
121
|
right_panel,
|
|
118
122
|
sizes=(70, 30), # 70% left, 30% right
|
|
119
|
-
min_size=
|
|
120
|
-
|
|
123
|
+
min_size=300, # Minimum 300px for each panel
|
|
124
|
+
sizing_mode="stretch_width",
|
|
125
|
+
height=250,
|
|
121
126
|
)
|
|
122
127
|
|
|
123
128
|
split.servable()
|
|
124
129
|
```
|
|
125
130
|
|
|
131
|
+

|
|
132
|
+
|
|
126
133
|
### Vertical Split
|
|
127
134
|
|
|
128
135
|
```python
|
|
@@ -137,13 +144,40 @@ bottom_panel = pn.pane.Markdown("## Bottom Section\nFooter content")
|
|
|
137
144
|
split = VSplit(
|
|
138
145
|
top_panel,
|
|
139
146
|
bottom_panel,
|
|
140
|
-
sizes=(
|
|
141
|
-
min_size=
|
|
147
|
+
sizes=(70, 30),
|
|
148
|
+
min_size=200,
|
|
149
|
+
height=600,
|
|
150
|
+
sizing_mode="stretch_width"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
split.servable()
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+

|
|
157
|
+
|
|
158
|
+
### Show Buttons
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
import panel as pn
|
|
162
|
+
from panel_splitjs import Split
|
|
163
|
+
|
|
164
|
+
pn.extension()
|
|
165
|
+
|
|
166
|
+
# Create a simple split layout
|
|
167
|
+
split = Split(
|
|
168
|
+
pn.pane.Markdown("## Left Panel\nContent here", width=150),
|
|
169
|
+
pn.pane.Markdown("## Right Panel\nMore content", width=150),
|
|
170
|
+
sizes=(50, 50), # Equal sizing initially
|
|
171
|
+
min_size=150, # Minimum 150px for each panel
|
|
172
|
+
show_buttons=True,
|
|
173
|
+
sizing_mode="stretch_both",
|
|
142
174
|
)
|
|
143
175
|
|
|
144
176
|
split.servable()
|
|
145
177
|
```
|
|
146
178
|
|
|
179
|
+

|
|
180
|
+
|
|
147
181
|
### Collapsible Sidebar
|
|
148
182
|
|
|
149
183
|
```python
|
|
@@ -153,24 +187,27 @@ from panel_splitjs import Split
|
|
|
153
187
|
pn.extension()
|
|
154
188
|
|
|
155
189
|
# Start with right panel collapsed
|
|
190
|
+
button = pn.widgets.Button(name="Toggle Sidebar")
|
|
191
|
+
|
|
156
192
|
split = Split(
|
|
157
|
-
pn.pane.Markdown("## Main Content"),
|
|
158
|
-
pn.pane.Markdown("## Collapsible Sidebar"),
|
|
193
|
+
pn.Column(pn.pane.Markdown("## Main Content"), button),
|
|
194
|
+
pn.pane.Markdown("## Collapsible Sidebar", margin=(10,10,10,25)),
|
|
159
195
|
collapsed=1, # 0 for first panel, 1 for second panel, None for not collapsed
|
|
160
|
-
expanded_sizes=(
|
|
161
|
-
|
|
162
|
-
min_size=(200, 200) # Minimum 200px for each panel
|
|
196
|
+
expanded_sizes=(80, 20), # When expanded, 80% main, 20% sidebar
|
|
197
|
+
sizing_mode="stretch_both",
|
|
163
198
|
)
|
|
164
199
|
|
|
165
200
|
# Toggle collapse programmatically
|
|
166
|
-
|
|
201
|
+
|
|
167
202
|
def toggle(event):
|
|
168
203
|
split.collapsed = None if split.collapsed == 1 else 1
|
|
169
204
|
button.on_click(toggle)
|
|
170
205
|
|
|
171
|
-
|
|
206
|
+
split.servable()
|
|
172
207
|
```
|
|
173
208
|
|
|
209
|
+

|
|
210
|
+
|
|
174
211
|
### Multi-Panel Split
|
|
175
212
|
|
|
176
213
|
```python
|
|
@@ -186,12 +223,15 @@ multi = MultiSplit(
|
|
|
186
223
|
pn.pane.Markdown("## Panel 3"),
|
|
187
224
|
sizes=(30, 40, 30), # Three panels with custom sizing
|
|
188
225
|
min_size=100, # Minimum 100px for each panel
|
|
189
|
-
orientation="horizontal"
|
|
226
|
+
orientation="horizontal",
|
|
227
|
+
sizing_mode="stretch_both",
|
|
190
228
|
)
|
|
191
229
|
|
|
192
230
|
multi.servable()
|
|
193
231
|
```
|
|
194
232
|
|
|
233
|
+

|
|
234
|
+
|
|
195
235
|
## API Reference
|
|
196
236
|
|
|
197
237
|
### Split
|
|
@@ -206,7 +246,7 @@ The main split panel component for creating two-panel layouts with collapsible f
|
|
|
206
246
|
- `max_size` (int | tuple, default=None): Maximum sizes in pixels - single value applies to both panels, tuple for individual sizes
|
|
207
247
|
- `min_size` (int | tuple, default=0): Minimum sizes in pixels - single value applies to both panels, tuple for individual sizes
|
|
208
248
|
- `orientation` (str, default="horizontal"): Either `"horizontal"` or `"vertical"`
|
|
209
|
-
- `show_buttons` (bool, default=
|
|
249
|
+
- `show_buttons` (bool, default=False): Show collapse/expand toggle buttons on the divider
|
|
210
250
|
- `sizes` (tuple, default=(50, 50)): Initial percentage sizes of the panels
|
|
211
251
|
- `snap_size` (int, default=30): Snap to minimum size at this offset in pixels
|
|
212
252
|
- `step_size` (int, default=1): Step size in pixels at which panel sizes can be changed
|
|
@@ -247,21 +287,24 @@ from panel_splitjs import Split
|
|
|
247
287
|
|
|
248
288
|
pn.extension()
|
|
249
289
|
|
|
250
|
-
|
|
251
|
-
|
|
290
|
+
with pn.config.set(sizing_mode="stretch_width"):
|
|
291
|
+
chat = pn.chat.ChatInterface(margin=(5,25,5,5))
|
|
292
|
+
output = pn.Column("# Output Area")
|
|
252
293
|
|
|
253
294
|
split = Split(
|
|
254
295
|
chat,
|
|
255
296
|
output,
|
|
256
297
|
collapsed=None, # Both panels visible
|
|
257
298
|
expanded_sizes=(50, 50),
|
|
258
|
-
|
|
259
|
-
|
|
299
|
+
min_size=(600, 300), # Minimum 600px for the first panel, 300px for the second panel
|
|
300
|
+
sizing_mode="stretch_both",
|
|
260
301
|
)
|
|
261
302
|
|
|
262
303
|
split.servable()
|
|
263
304
|
```
|
|
264
305
|
|
|
306
|
+

|
|
307
|
+
|
|
265
308
|
### Dashboard with Collapsible Controls
|
|
266
309
|
|
|
267
310
|
```python
|
|
@@ -270,26 +313,30 @@ from panel_splitjs import Split
|
|
|
270
313
|
|
|
271
314
|
pn.extension()
|
|
272
315
|
|
|
273
|
-
|
|
274
|
-
pn.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
)
|
|
316
|
+
with pn.config.set(sizing_mode="stretch_width"):
|
|
317
|
+
controls = pn.Column(
|
|
318
|
+
pn.widgets.Select(name="Dataset", options=["A", "B", "C"]),
|
|
319
|
+
pn.widgets.IntSlider(name="Threshold", start=0, end=100),
|
|
320
|
+
pn.widgets.Button(name="Update"),
|
|
321
|
+
margin=(5,20,5,5),
|
|
322
|
+
)
|
|
278
323
|
|
|
279
|
-
visualization = pn.pane.Markdown("## Main Visualization Area")
|
|
324
|
+
visualization = pn.pane.Markdown("## Main Visualization Area")
|
|
280
325
|
|
|
281
326
|
split = Split(
|
|
282
327
|
controls,
|
|
283
328
|
visualization,
|
|
284
|
-
|
|
285
|
-
|
|
329
|
+
sizes=(20, 80),
|
|
330
|
+
min_size=(300, 0),
|
|
286
331
|
show_buttons=True,
|
|
287
|
-
|
|
332
|
+
sizing_mode="stretch_both",
|
|
288
333
|
)
|
|
289
334
|
|
|
290
335
|
split.servable()
|
|
291
336
|
```
|
|
292
337
|
|
|
338
|
+

|
|
339
|
+
|
|
293
340
|
### Responsive Layout with Size Constraints
|
|
294
341
|
|
|
295
342
|
```python
|
|
@@ -299,18 +346,21 @@ from panel_splitjs import Split
|
|
|
299
346
|
pn.extension()
|
|
300
347
|
|
|
301
348
|
split = Split(
|
|
302
|
-
pn.pane.Markdown("## Panel 1\nResponsive content"),
|
|
303
|
-
pn.pane.Markdown("## Panel 2\nMore responsive content"),
|
|
349
|
+
pn.pane.Markdown("## Panel 1\nResponsive content", sizing_mode="stretch_width", margin=(5,25,5,5)),
|
|
350
|
+
pn.pane.Markdown("## Panel 2\nMore responsive content", sizing_mode="stretch_width", margin=(5,5,5,25)),
|
|
304
351
|
sizes=(50, 50),
|
|
305
352
|
min_size=200, # Minimum 200px per panel
|
|
306
353
|
max_size=800, # Maximum 800px per panel
|
|
307
354
|
snap_size=50, # Snap to min size when within 50px
|
|
308
|
-
show_buttons=True
|
|
355
|
+
show_buttons=True,
|
|
356
|
+
sizing_mode="stretch_both",
|
|
309
357
|
)
|
|
310
358
|
|
|
311
359
|
split.servable()
|
|
312
360
|
```
|
|
313
361
|
|
|
362
|
+

|
|
363
|
+
|
|
314
364
|
### Complex Multi-Panel Layout
|
|
315
365
|
|
|
316
366
|
```python
|
|
@@ -320,10 +370,11 @@ from panel_splitjs import MultiSplit
|
|
|
320
370
|
pn.extension()
|
|
321
371
|
|
|
322
372
|
# Create a four-panel layout
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
373
|
+
with pn.config.set(sizing_mode="stretch_width"):
|
|
374
|
+
sidebar = pn.Column("## Sidebar", pn.widgets.Select(options=["A", "B", "C"]))
|
|
375
|
+
main = pn.pane.Markdown("## Main Content Area")
|
|
376
|
+
detail = pn.pane.Markdown("## Detail Panel")
|
|
377
|
+
console = pn.pane.Markdown("## Console Output")
|
|
327
378
|
|
|
328
379
|
multi = MultiSplit(
|
|
329
380
|
sidebar,
|
|
@@ -332,12 +383,15 @@ multi = MultiSplit(
|
|
|
332
383
|
console,
|
|
333
384
|
sizes=(15, 40, 25, 20), # Custom sizing for each panel
|
|
334
385
|
min_size=(150, 300, 200, 150), # Individual minimums
|
|
335
|
-
orientation="horizontal"
|
|
386
|
+
orientation="horizontal",
|
|
387
|
+
sizing_mode="stretch_both",
|
|
336
388
|
)
|
|
337
389
|
|
|
338
390
|
multi.servable()
|
|
339
391
|
```
|
|
340
392
|
|
|
393
|
+

|
|
394
|
+
|
|
341
395
|
### Nested Splits
|
|
342
396
|
|
|
343
397
|
```python
|
|
@@ -350,21 +404,25 @@ pn.extension()
|
|
|
350
404
|
left = pn.pane.Markdown("## Left Panel")
|
|
351
405
|
|
|
352
406
|
# Right side has a vertical split
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
407
|
+
with pn.config.set(sizing_mode="stretch_both"):
|
|
408
|
+
top_right = pn.pane.Markdown("## Top Right")
|
|
409
|
+
bottom_right = pn.pane.Markdown("## Bottom Right")
|
|
410
|
+
right = VSplit(top_right, bottom_right, sizes=(60, 40))
|
|
411
|
+
|
|
412
|
+
# Main horizontal split
|
|
413
|
+
layout = HSplit(
|
|
414
|
+
left,
|
|
415
|
+
right,
|
|
416
|
+
sizes=(30, 70),
|
|
417
|
+
min_size=200,
|
|
418
|
+
sizing_mode="stretch_both",
|
|
419
|
+
)
|
|
364
420
|
|
|
365
421
|
layout.servable()
|
|
366
422
|
```
|
|
367
423
|
|
|
424
|
+

|
|
425
|
+
|
|
368
426
|
## Development
|
|
369
427
|
|
|
370
428
|
This project is managed by [pixi](https://pixi.sh).
|
|
@@ -392,6 +450,15 @@ pixi run build
|
|
|
392
450
|
pixi run test
|
|
393
451
|
```
|
|
394
452
|
|
|
453
|
+
### Pre-commit
|
|
454
|
+
|
|
455
|
+
Before committing the first time please install `pre-commit`:
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
pip install pre-commit
|
|
459
|
+
pre-commit install
|
|
460
|
+
```
|
|
461
|
+
|
|
395
462
|
## Contributing
|
|
396
463
|
|
|
397
464
|
Contributions are welcome! Please feel free to submit a Pull Request.
|