ipyslides 7.3.2__tar.gz → 7.3.3__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 (42) hide show
  1. {ipyslides-7.3.2 → ipyslides-7.3.3}/PKG-INFO +1 -1
  2. ipyslides-7.3.3/ipyslides/__version__.py +2 -0
  3. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/_layout.py +8 -2
  4. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/export_template.py +3 -0
  5. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/slide.py +3 -2
  6. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/static/interaction.css +3 -3
  7. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/static/interaction.js +1 -1
  8. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/styles.py +18 -15
  9. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/xmd.py +1 -1
  10. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides.egg-info/PKG-INFO +1 -1
  11. ipyslides-7.3.2/ipyslides/__version__.py +0 -2
  12. {ipyslides-7.3.2 → ipyslides-7.3.3}/LICENSE +0 -0
  13. {ipyslides-7.3.2 → ipyslides-7.3.3}/README.md +0 -0
  14. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/__init__.py +0 -0
  15. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/__init__.py +0 -0
  16. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/_syntax.py +0 -0
  17. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/_widgets.py +0 -0
  18. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/base.py +0 -0
  19. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/export_html.py +0 -0
  20. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/icons.py +0 -0
  21. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/intro.py +0 -0
  22. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/navigation.py +0 -0
  23. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/notes.py +0 -0
  24. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/settings.py +0 -0
  25. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/static/laser.css +0 -0
  26. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/static/laser.js +0 -0
  27. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/static/notes.js +0 -0
  28. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/_base/widgets.py +0 -0
  29. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/core.py +0 -0
  30. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/dashlab.py +0 -0
  31. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/formatters.py +0 -0
  32. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/pkg_nbs/ips-demo.ipynb +0 -0
  33. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/pkg_nbs/ips-docs.ipynb +0 -0
  34. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/source.py +0 -0
  35. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/utils.py +0 -0
  36. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides/writer.py +0 -0
  37. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides.egg-info/SOURCES.txt +0 -0
  38. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides.egg-info/dependency_links.txt +0 -0
  39. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides.egg-info/requires.txt +0 -0
  40. {ipyslides-7.3.2 → ipyslides-7.3.3}/ipyslides.egg-info/top_level.txt +0 -0
  41. {ipyslides-7.3.2 → ipyslides-7.3.3}/setup.cfg +0 -0
  42. {ipyslides-7.3.2 → ipyslides-7.3.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ipyslides
3
- Version: 7.3.2
3
+ Version: 7.3.3
4
4
  Summary: Live rich content slides in jupyter notebook
5
5
  Home-page: https://github.com/asaboor-gh/ipyslides
6
6
  Author: Abdul Saboor
@@ -0,0 +1,2 @@
1
+
2
+ __version__ = "7.3.3"
@@ -48,7 +48,9 @@ def layout_css(accent_color, aspect):
48
48
  },
49
49
  },
50
50
  ".static-widget": {
51
- "position": "static !important", # let objects flow out
51
+ "^, > *, .widget-html-content": {
52
+ "position": "static !important", # let objects flow out
53
+ },
52
54
  },
53
55
  ".Warn::after": {
54
56
  "display": "block",
@@ -131,6 +133,11 @@ def layout_css(accent_color, aspect):
131
133
  "position": "absolute !important",
132
134
  "^, .widget-html-content": {"line-height": "0 !important"},
133
135
  "@media print": {"position": "fixed !important",},
136
+ "@media screen": { # avoid messing up print layout
137
+ "transform": "scale(min(var(--contentScale), 1)) !important", # scale footer to match content, but not more than 1
138
+ "transform-origin": "left bottom !important",
139
+ "transition": "transform 0.4s ease-in-out",
140
+ },
134
141
  }, # other properties are set internally
135
142
  "> .Build-Btn": {"visibility": "hidden !important",}, # hide build button by default
136
143
  "^:has(.SlideArea.Stale) > .Build-Btn": {
@@ -328,7 +335,6 @@ def layout_css(accent_color, aspect):
328
335
  "line-height": "1.5 !important",
329
336
  },
330
337
  "^, .widget-html-content": {
331
- "--text-size": "14px !important",
332
338
  "position": "static !important", # footer content should escape
333
339
  },
334
340
  },
@@ -94,6 +94,9 @@ section .SlideBox {
94
94
  .SlidesWrapper .SlideLogo {
95
95
  position: fixed !important;
96
96
  line-height: 0 !important; /* suppress bad line-height here */
97
+ transform: scale(min(var(--contentScale), 1)) !important; /* scale footer to match content, but not more than 1 */
98
+ transform-origin: left bottom !important;
99
+ transition: transform 0.4s ease-in-out;
97
100
  }
98
101
  .SlidesWrapper::-webkit-scrollbar,
99
102
  .SlidesWrapper::-webkit-scrollbar-button,
@@ -254,8 +254,8 @@ class Slide:
254
254
  self._widget.clear_output(wait = True) # Clear, but don't go there
255
255
  # Need to know how many contents before user provide content
256
256
  with capture_content() as cap:
257
+ html('span', '', id = self._sec_id, css_class='Slide-UID').display() # to register section id in DOM
257
258
  display(VBox([
258
- html('span', '', id = self._sec_id, css_class='Slide-UID').as_widget(), # span to not occupy space, need to remove from frames later.
259
259
  self._bglayer, # background image layer
260
260
  self._ftrhtml, # dynamic footer layer
261
261
  self._fcss, # frame separator CSS
@@ -365,7 +365,8 @@ class Slide:
365
365
 
366
366
  # Next PAUSE after columns is ignored if fragments were already built from the COLUMNS output.
367
367
  if meta.get("DELIM", "") == "PAUSE":
368
- meta_prev = ensure_dict(contents[index - 1].metadata) if index - 1 >= 0 else {}
368
+ prev_index = index - 1 - offset # actual index in contents list
369
+ meta_prev = ensure_dict(contents[prev_index].metadata) if prev_index >= 0 else {}
369
370
  if "COLUMNS" in meta_prev and get_frags(meta_prev):
370
371
  continue
371
372
 
@@ -21,7 +21,7 @@
21
21
  }
22
22
  .ipyslides-print-node:not(.SlidesWrapper) {
23
23
  all: unset !important;
24
- display: block !important;
24
+ display: contents !important; /* collapse all parent nodes */
25
25
  margin: 0 !important;
26
26
  padding: 0 !important;
27
27
  }
@@ -236,8 +236,8 @@
236
236
  clip-path: none !important;
237
237
  pointer-events: auto !important;
238
238
  }
239
- /* General user animations/transitions should be immediately settled to last in print mode */
240
- *, *::before, *::after {
239
+ /* General user animations/transitions should be immediately settled to last in print mode, restrict inscope */
240
+ .jp-OutputArea *, .jp-OutputArea *::before, .jp-OutputArea *::after {
241
241
  transition-duration: 0s !important;
242
242
  transition-delay: 0s !important;
243
243
  animation-duration: 0s !important;
@@ -635,7 +635,7 @@ function setScale(box, model) {
635
635
  }
636
636
  const pad = model.get('_fpad') || 23; // padding bottom, default 23px for footer space
637
637
  box.style.setProperty('--contentScale',scale);
638
- box.style.setProperty('--paddingBottom',Number(pad/scale) + "px");
638
+ box.style.setProperty('--paddingBottom',Number(pad) + "px");
639
639
  }
640
640
 
641
641
  function handleScale(box, model) {
@@ -384,6 +384,7 @@ def style_css(colors, fonts, layout, _root = False):
384
384
  }, # Define color below at low specificity, otherwise it can overwrite code
385
385
  },
386
386
  '.jp-RenderedHTMLCommon :is(pre:not(.Error), code)': {'line-height': '1.5 !important','background': 'none !important'}, # Avoid a white background set by jupyter
387
+ '.jp-RenderedHTMLCommon > *:last-child': {'margin-bottom': '0.2em'}, # override jupyter's default bottom margin for last child
387
388
  '^.SlidesWrapper':{
388
389
  'container': 'slides / inline-size',
389
390
  'margin':'auto',
@@ -420,13 +421,13 @@ def style_css(colors, fonts, layout, _root = False):
420
421
  'z-index': '5',
421
422
  'line-height': '1.5',# needs to enforce proper height in print
422
423
  '.footer-text': {
424
+ 'font-size': 'calc(12px * min(var(--contentScale), 1))',
423
425
  'display': 'flex',
424
426
  'align-items': 'center',
425
427
  'gap': '0.5rem',
426
- 'padding': '0 6px', # not on top continer which has progressbar
428
+ 'padding': '0 calc(6px * min(var(--contentScale), 1))', # not on top continer which has progressbar
427
429
  'width': '100%',
428
430
  'min-width': '0',
429
- 'font-size': '12px !important',
430
431
  "padding-bottom": "1px !important", # a little space above progressbar
431
432
  },
432
433
  '.footer-text > div:first-child': {
@@ -686,7 +687,7 @@ def style_css(colors, fonts, layout, _root = False):
686
687
  },
687
688
  'dl': {
688
689
  'display': 'grid',
689
- 'margin-block':'0.5em',
690
+ 'margin': '0',
690
691
  'font-family':'var(--jp-content-font-family) !important',
691
692
  'font-size':'var(--text-size) !important', # somwhow gets different font size
692
693
  }, # Jupyterlab fix
@@ -829,17 +830,19 @@ def style_css(colors, fonts, layout, _root = False):
829
830
  'align-items':'stretch',
830
831
  '> *': {
831
832
  'min-width':'0 !important', # avoid overflow due to stubborn elements
833
+ 'height': 'stretch', # fill full height
834
+ ':only-child:has(.column)': {
835
+ 'display':'contents !important', # bring single nested column to parent level
836
+ },
837
+ },
838
+ '.column': {
839
+ 'min-width':'0 !important', # avoid overflow due to stubborn elements
840
+ 'height': 'stretch', # fill full height
832
841
  },
833
842
  'table': {'width':'calc(100% - 0.5em)'}, # make table full width inside columns with some padding
834
- ':only-child:has(.column), .column:only-child': { # strecth column to full height if single parents
835
- 'display': 'flex',
836
- 'flex-direction': 'column',
837
- 'flex': '1 1 100% !important',
838
- 'min-height': '0 !important',
839
- 'height': '100% !important',
840
- 'margin': '0 !important', # must to avoid extra space that causes overflow
841
- 'box-sizing': 'border-box !important',
842
- }
843
+ ':only-child:has(.column), .jp-OutputArea-output:has(.column)': {
844
+ 'display':'contents !important', # bring single nested column to parent level
845
+ },
843
846
  },
844
847
  },
845
848
  'code': {
@@ -968,8 +971,8 @@ def style_css(colors, fonts, layout, _root = False):
968
971
  'padding-right': '0.5em',
969
972
  'border-radius': '2px',
970
973
  'border-left': '2px inset var(--accent-color)',
971
- 'margin-top': '0.5em',
972
- 'margin-bottom': '0.7em !important',
974
+ 'margin-top': '0.25em',
975
+ 'margin-bottom': '0.5em !important',
973
976
  'background': 'hsl(from var(--bg3-color) h s l / 0.9)',
974
977
  '^.admonition > .admonition-title': {'display':'none !important'}, # Remove admonition title
975
978
  '^::before': {
@@ -989,9 +992,9 @@ def style_css(colors, fonts, layout, _root = False):
989
992
  '--bg-color': 'var(--bg2-color)',
990
993
  '--bg1-altcolor': r'hsl(from var(--bg-color) h 80% l)', # make table rows, text show etc align with block color
991
994
  'border-radius': '8px',
992
- 'margin': '0.5em 0',
993
995
  'background': 'hsl(from var(--bg-color) h s l / 0.7)',
994
996
  'padding': '4px',
997
+ 'margin-block-start': '0.2em', # avoid two blocks touching, same gap as columns
995
998
  '^:is(ul,ol)': {'padding-left':'1.5em'} # align list inside block, same as normal lists
996
999
  },
997
1000
  **({
@@ -1014,7 +1014,7 @@ class XMarkdown(Markdown):
1014
1014
  return self._handle_var(error('Exception', f"ipyslides is partially initialized. Cannot parse {match.group(0)!r}"))
1015
1015
 
1016
1016
  func, ctx = _XMD_FUNCS.get(fname, _XMD_FUNCS["anyTag"])
1017
- if 'anyTag' in func.__name__:
1017
+ if 'anyTag' in getattr(func, '__name__', ''): # __name__ is not available on all types of callables
1018
1018
  func = partial(func, fname.strip('_').lower()) # partial function for anyTag with tag name, svg_ goes to svg tag, not svg function
1019
1019
 
1020
1020
  if ctx == "slide" and not getattr(self._slides, 'this', None): # slide only functions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ipyslides
3
- Version: 7.3.2
3
+ Version: 7.3.3
4
4
  Summary: Live rich content slides in jupyter notebook
5
5
  Home-page: https://github.com/asaboor-gh/ipyslides
6
6
  Author: Abdul Saboor
@@ -1,2 +0,0 @@
1
-
2
- __version__ = "7.3.2"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes