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.
Files changed (53) hide show
  1. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/build.yml +5 -5
  2. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/test.yml +2 -2
  3. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/workflows/update-lockfiles.yml +1 -1
  4. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/PKG-INFO +119 -52
  5. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/README.md +118 -51
  6. panel_splitjs-0.3.1/docs/assets/images/basic-horizontal-split.png +0 -0
  7. panel_splitjs-0.3.1/docs/assets/images/basic-vertical-split.png +0 -0
  8. panel_splitjs-0.3.1/docs/assets/images/chat-example.png +0 -0
  9. panel_splitjs-0.3.1/docs/assets/images/collapsable-sidebar.gif +0 -0
  10. panel_splitjs-0.3.1/docs/assets/images/complex-multi-panel-layout.png +0 -0
  11. panel_splitjs-0.3.1/docs/assets/images/dashboard-with-collapsable-controls.png +0 -0
  12. panel_splitjs-0.3.1/docs/assets/images/multisplit.png +0 -0
  13. panel_splitjs-0.3.1/docs/assets/images/nested-splits.png +0 -0
  14. panel_splitjs-0.3.1/docs/assets/images/quick-start.gif +0 -0
  15. panel_splitjs-0.3.1/docs/assets/images/responsive-layout-with-size-constraints.png +0 -0
  16. panel_splitjs-0.3.1/docs/assets/images/show-buttons.png +0 -0
  17. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pixi.lock +5602 -5349
  18. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/_version.py +2 -2
  19. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/base.py +5 -2
  20. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/splitjs.css +42 -101
  21. panel_splitjs-0.3.1/src/panel_splitjs/dist/panel-splitjs.bundle.js +1 -0
  22. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/models/multi_split.js +3 -1
  23. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/models/split.js +39 -9
  24. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/tests/test_ui.py +105 -5
  25. panel_splitjs-0.2.1/src/panel_splitjs/dist/panel-splitjs.bundle.js +0 -1
  26. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.copier-answers.yml +0 -0
  27. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.gitattributes +0 -0
  28. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/CODEOWNERS +0 -0
  29. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.github/dependabot.yml +0 -0
  30. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.gitignore +0 -0
  31. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.pre-commit-config.yaml +0 -0
  32. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/.prettierrc +0 -0
  33. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/LICENSE.txt +0 -0
  34. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/MANIFEST.in +0 -0
  35. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/assets/logo.svg +0 -0
  36. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/index.md +0 -0
  37. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/docs/reference/panel_splitjs.md +0 -0
  38. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/examples/apps/multi.py +0 -0
  39. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/examples/apps/simple.py +0 -0
  40. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/hatch_build.py +0 -0
  41. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/mkdocs.yml +0 -0
  42. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pixi.toml +0 -0
  43. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/pyproject.toml +0 -0
  44. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/__init__.py +0 -0
  45. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/__version.py +0 -0
  46. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_down.svg +0 -0
  47. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_left.svg +0 -0
  48. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_right.svg +0 -0
  49. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/arrow_up.svg +0 -0
  50. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/handle.svg +0 -0
  51. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/src/panel_splitjs/dist/css/handle_vertical.svg +0 -0
  52. {panel_splitjs-0.2.1 → panel_splitjs-0.3.1}/tests/conftest.py +0 -0
  53. {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@194d461b21b6c5717c722ffc597fa91ed2ff29fa # v0.9.1
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@v4
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@v4
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@v5
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@v5
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.1
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@v4
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@194d461b21b6c5717c722ffc597fa91ed2ff29fa # v0.9.1
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.2.1
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=100, # Minimum 100px for each panel
88
- show_buttons=True
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
+ ![Quick Start Example](docs/assets/images/quick-start.gif)
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=200, # Minimum 200px for each panel
120
- show_buttons=True
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
+ ![Basic Horizontal Split Example](docs/assets/images/basic-horizontal-split.png)
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=(60, 40),
141
- min_size=150
147
+ sizes=(70, 30),
148
+ min_size=200,
149
+ height=600,
150
+ sizing_mode="stretch_width"
151
+ )
152
+
153
+ split.servable()
154
+ ```
155
+
156
+ ![Basic Vertical Split Example](docs/assets/images/basic-vertical-split.png)
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
+ ![Show Buttons Example](docs/assets/images/show-buttons.png)
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=(65, 35), # When expanded, 65% main, 35% sidebar
161
- show_buttons=True,
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
- button = pn.widgets.Button(name="Toggle Sidebar")
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
- pn.Column(button, split).servable()
206
+ split.servable()
172
207
  ```
173
208
 
209
+ ![Collapsible Sidebar Example](docs/assets/images/collapsable-sidebar.gif)
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
+ ![MultiSplit Example](docs/assets/images/multisplit.png)
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=True): Show collapse/expand toggle buttons on the divider
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
- chat = pn.chat.ChatInterface()
251
- output = pn.Column("# Output Area")
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
- show_buttons=True,
259
- min_size=(300, 300) # Minimum 300px for each panel
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
+ ![Chat Example](docs/assets/images/chat-example.png)
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
- controls = pn.Column(
274
- pn.widgets.Select(name="Dataset", options=["A", "B", "C"]),
275
- pn.widgets.IntSlider(name="Threshold", start=0, end=100),
276
- pn.widgets.Button(name="Update")
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
- collapsed=0, # Start with controls collapsed
285
- expanded_sizes=(25, 75),
329
+ sizes=(20, 80),
330
+ min_size=(300, 0),
286
331
  show_buttons=True,
287
- min_size=(250, 400) # Minimum sizes for each panel
332
+ sizing_mode="stretch_both",
288
333
  )
289
334
 
290
335
  split.servable()
291
336
  ```
292
337
 
338
+ ![Dashboard with Collapsible Controls](docs/assets/images/dashboard-with-collapsable-controls.png)
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
+ ![Responsive Layout with Size Constraints](docs/assets/images/responsive-layout-with-size-constraints.png)
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
- sidebar = pn.Column("## Sidebar", pn.widgets.Select(options=["A", "B", "C"]))
324
- main = pn.pane.Markdown("## Main Content Area")
325
- detail = pn.pane.Markdown("## Detail Panel")
326
- console = pn.pane.Markdown("## Console Output")
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
+ ![Complex Multi-Panel Layout](docs/assets/images/complex-multi-panel-layout.png)
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
- top_right = pn.pane.Markdown("## Top Right")
354
- bottom_right = pn.pane.Markdown("## Bottom Right")
355
- right = VSplit(top_right, bottom_right, sizes=(60, 40))
356
-
357
- # Main horizontal split
358
- layout = HSplit(
359
- left,
360
- right,
361
- sizes=(30, 70),
362
- min_size=200
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
+ ![Nested Splits](docs/assets/images/nested-splits.png)
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.