Core Audio for interfaces with large #'s of channels

These 3 commits access PA's Core Audio API from pa_mac_core.h, and provide a "get_channel_name" function for querying names of individual device channels along with MacCoreSettings (for use with extra_settings) to expose additional Core Audio capabilities.  (See doc string in MacCoreSettings.)
My specific need for these extensions is that I have an RME Fireface UFX+ with a large number of input & output channels, and I didn't want to have to open many channels when only a couple are required.  The get_channel_name function lets me display obtain a set of user-friendly channel names from the underlying device driver (via PortAudio), which I may display to the operator / user.
I'm open for input to help get these changes incorporated into python-sounddevice.
Thank you,
David

This is a good time to decide how host specific functions will be added to the API. ASIO has some nice functions I would also like to integrate. Initially though I would think that we wouldn't want to add these functions to the global namespace since they won't be available for all APIs.

For the two API changes in my current commits, here are two alternative implementations that cross my mind:

get_channel_name
Would this functionality be better merged into with query_devices?  For example, in the dict returned for each device, perhaps each dict could contain additional fields called "input_channel_names" and "output_channel_names" which each contain a list (or tuple) of strings, 1 string per channel.  This way, hostapi's such as ASIO and Core Audio could be queried for whatever underlying names.  (For ASIO, is the equivalent underlying API "PaAsio_GetOutputChannelName" and "PaAsio_GetInputChannelName"?)

MacCoreSettings
This struct has at least field in common with AsioSettings, specifically channel_selectors which is the only attribute presently exposed in AsioSettings.  Regarding the Core Audio API, I considered calling this field channel_map in MacCoreSettings, but upon reading how similar in functionality it is to the field in AsioSettings, I added some minor conversion logic to translate channel_selectors into the specific format that Core Audio required -- as mentioned in my code's doc string.
Could all 3 of the API-specific settings classes (AsioSettings, MacCoreSettings, WasapiSettings) be merged into 1 simple dict?  Presently, a client application needs to select the correct ...Settings class based on the relevant device's hostapi, correct?  Instead of this, how about we get rid of the classes in favor of having the application just pass in a simple dict instead?
extra_settings_i = {
'channel_selectors' = [8, 9], # RME UFX+ 2 mic inputs
'change_dev_params' = True, # Let Core Audio (or any underlying API) change hardware params as needed to minimize host overhead
'allow_rate_conv' = False, # I would rather fail and alert the user than let underlying layer (Core Audio) have to resort to sample rate conversion.
}
extra_settings_o = {
'channel_selectors' = [0, 1], # RME UFX+ first 2 outputs
'change_dev_params' = True, # same as extra_settings_i
'allow_rate_conv' = False,  # same as extra_settings_i
}
with sd.RawStream(device=..., extra_settings=(extra_settings_i, extra_settings_o), ...)
  ...

These dicts could then be passed to a correct hostapi-specific class or function from within _get_stream_parameters.  For example:
def _get_stream_parameters(kind, device, channels, dtype, latency,
                           extra_settings, samplerate):
  ...
  if samplerate is None:
      samplerate = info['default_samplerate']
  if extra_settings:
      # TODO: build dict extra_settings_xlate to map hostapi to a callable to translate extra_settings into hostapi-specific _streaminfo.
      #extra_settings_xlate = {
      #    ...
      #}
      # Invoke the callable (function or object) that is specific for this hostapi:
      this_streaminfo = extra_settings_xlate[info['hostapi']](kind=kind, device=device, channels=channels, sampleformat=sampleformat, latency=latency, extra_settings=extra_settings)
  else:
      this_streaminfo = _ffi.NULL
  parameters = _ffi.new('PaStreamParameters*', (
      device, channels, sampleformat, latency,
      this_streaminfo))

Aside: Doing so would also make the implementation of MacCoreSettings a little clearer, since I require access to the device's max_output_channels to translate channel_selectors into Core Audio's channel_map.  At the moment, I defer creating a PaMacCoreStreamInfo struct until _get_stream_parameters, be having that function discover that MacCoreSettings._streaminfo is callable and then invoking it with device-specific params passed in via **kwargs.

I'll admit this is implementation is more complicated that I care for, but at least if an application tries using my current revision of MacCoreSettings, then it doesn't have to explicitly care about max_output_channels, and it may use use the same format of channel_selectors for both MacCoreSettings and AsioSettings.

So to keep things simple in my initial pull request, I just created MacCoreSettings in a similar fashion to AsioSettings and WasapiSettings, to keep my changes as similar to the rest of python-sounddevice as possible.

If either or both of these two ideas don't sound too ugly, I'm happy to conjure a first draft so that you'd have something concrete to ponder.

To help with brainstorming, what are the ASIO functions you'd like to integrate?

Most of all I'd like to get GetAvailableBufferSizes added. But GetInputChannelName/GetOutputChannelName could also be useful.

Hmm, and Core Audio offers similar data via kAudioDevicePropertyBufferFrameSizeRange, which is exposed via PaMacCore_GetBufferSizeRange, though this call does not return preferredBufferSizeFrames or granularity.
Perhaps could this data also be returned by query_devices along with channel names?  Maybe via a dict key such as:
{
'buffer_sizes': range(minBufferSizeFrames, maxBufferSizeFrames, granularity) if granularity!=-1 else power_of_two_range(minBufferSizeFrames, maxBufferSizeFrames),
}
#TODO: define power_of_two_range

where the dict value contains some "iterable" and doesn't have to be a list or tuple.  (An app is free to fee this iterable to list() or tuple() or whatever as desired.)  To prevent accidental expansion of the range of values, xrange would be used on Python 2, whereas Python 3 can stick with just range.
On Core Audio, I think granularity may be hard coded to +1 (is there a way to tell this?), but I'm not sure what's the equivalent to preferredBufferSizeFrames.  Is preferredBufferSizeFrames desirable, or could knowledge of preferredBufferSizeFrames  be incorporated into the library in another fashion such as setting the default latency or equivalent?

I wouldn't get too attached to the idea of exposing host api buffer sizes as some kind of common functionality. Portaudio is pretty generic at the stream level so the feature set across apis is pretty damn varied. For one thing, ALSA doesn't have any feature like this - which is the only real api that it is supported in Linux. Another example is PaWasapi's GetFramesPerHostBuffer which is for a similiar use case as GetAvailableBufferSizes but is more limited. I agree It would be nice if the set and get interface for similar features were functionally identical (same input variables, same output variables) but I'm not sure how much value it would provide given the lack of similarity between apis.
One other thing to keep in mind in this discussion: not all host specific settings are stream specific. For example Alsa has a few settings that apply to all created streams.

Thanks @dholl and @tgarc!
I'm open to changes in the host API specific settings, including abandoning the current AsioSettings and WasapiSettings if we find something better.
I'm reluctant to add one or more top-level functions that are only available on a subset of host APIs.
I think it would be nice to clearly see which features are platform-specific and which aren't.
However, I have no idea how this should be done ...
Some notes about platform-specific features are mentioned in #4. I think it would be nice if we could find an API that also allows for some ALSA features, namely PaAlsa_EnableRealtimeScheduling, which has to be called on the stream (but before starting it) and PaAlsa_SetNumPeriods which (I guess) has to be called before the stream is created.
See also #55 which was brought up by @hiccup7. Probably we can find something that avoids this issue?
@dholl About "channel map" and "channel selectors": I'm not sure if it makes sense to make those compatible, since they are explicitly platform specific. I've exposed the channelSelectors from ASIO as they are (without converting the numbers to 1-based), wouldn't it be better to expose the CoreAudio channel maps also without converting them to something else?
In the end this would make it easier for people who already know the native CoreAudio settings and it would simplify the implementation.

I'll update the pull request to incorporate the feedback thus far...  :)

Ah, regarding some way to expose hostapi-specific functions without polluting the global namespace, how about returning a dict (or named tuple?) of callables from query_hostapis?
For example, the returned dict could have a key called 'api' which is a collection of whatever specific functions exist for just that hostapi.  On my system, hostapi index 0 corresponds to Core Audio, so I might daydream of some usage like so:
Assuming d is my device id...
hostapi_id = sd.query_devices(device=d)['hostapi']

# My device happens to be from Core Audio:
coreaudio = sd.query_hostapis(hostapi_id)['api']
min_size, max_size = coreaudio.get_buffer_size_range(device=d, channel=0, input=True)
out_chan0_name = coreaudio.get_channel_name(device=d, channel=0, input=False)
in_chan0_name = coreaudio.get_channel_name(device=d, channel=0, input=True)

On someone else's system, hostapi_id 0 might be ASIO, so perhaps that namespace might look like:
# This device happens to be from ASIO:
asio = sd.query_hostapis(hostapi_id)['api']
min_size, max_size, preferred_size, gran = asio.get_available_buffer_sizes(device=d)
out_chan0_name = asio.get_output_channel_name(device=d, channel=0)
in_chan0_name = asio.get_input_channel_name(device=d, channel=0)

An application may of course need to check sd.query_hostapis(hostapi_id)['name'] before assuming a given specific API.
Perhaps these functions are just straight 1:1 mappings to the underlying PortAudio functions?  (i.e., no other object-oriented whatever applied such as asio.device[0].get_available_buffer_sizes?)  Keeping it simple without any further abstraction would ease the initial implementation.
So, would this mechanism of providing API access from query_hostapis be palatable?

I like this idea!
I would even remove one level of indirection. Instead of returning dicts from query_hostapis(), we could return custom objects which have __getitem__() for key/value access but also provide attribute access directly. The dict-like access could stay backwards compatible this way.
The detour over query_devices() seems a bit tedious (especially if you want to write code that works with several host APIs), we could probably extend query_hostapis() to take a string like query_hostapis('alsa')?
If the host API is not available, this could return None, allowing something like this:
alsa = query_hostapis('alsa')
if alsa:
    alsa.set_something('blah')

Something like this could probably address the concerns from #55?
wasapi = query_hostapis('wasapi')
if wasapi:
    wasapi.exclusive = True

I don't know if the above example would work, since I don't know if the "exclusive" setting is supposed to be global or per-stream or per-device or ...
The different host-API-specific features affect different parts, some are global functions, others are applied to a stream and others are applied separately to the input and output settings when creating a stream (and probably there are still other scenarios which I missed).
I doubt that all features can be provided in a meaningful way the suggested scheme, but probably many of them can.
@dholl Can you please provide a list of host-API-specific features that you think can be handled with this (probably in a separate issue)?

@mgeier Regarding query_hostapis(), would using a named parameter be acceptable?  This would make it explicit when a caller wants to look up an API by string name?
alsa = query_hostapis(name='alsa')
if alsa:
    alsa.set_something('blah')

So the function would be defined as:
def query_hostapis(index=None, name=None):
    ...

OK, I just simplified MacCoreSettings a great deal, thus making it very similar in mentality to Asio and Wasapi.  Questions or comments?
If I get rid of get_channel_name() (in favor of moving that functionality to query_hostapis() in a separate PR), is MacCoreSettings getting closer to being acceptable for inclusion?  :)
[For now with this PR, I'm holding back on further ideas for refactoring the *Settings classes...]

Thanks @dholl!
Yes, the name parameter sounds very good!

is MacCoreSettings getting closer to being acceptable for inclusion?  :)

Yes, definitely, that's a much simpler and less intrusive change.
I will do a thorough review soon, but for now let me start with the name: The PortAudio implementation indeed uses MacCore..., but the user-visible host API name is Core Audio. Wouldn't CoreAudioSettings therefore make more sense?

@mgeier Thank you for the detailed review!  I'm incorporating the updates now.
Regarding the name of MacCoreSettings vs CoreAudioSettings, I'll follow your recommendations.  However, if we're trying to stay "similar" to pa's C API, all their underlying functions are named like:
typedef struct { ... } PaMacCoreStreamInfo;
void PaMacCore_SetupStreamInfo(...)
void PaMacCore_SetupChannelMap(...)
const char *PaMacCore_GetChannelName(...)
#define paMacCoreChangeDeviceParameters ...
#define paMacCoreBlahBlah ...

In light of this, what is your preference?  MacCore* or CoreAudio*?  :)

I just pushed the cleanup, but I won't get a chance to test any of it until much later tonight.

I pushed the cleanup thus far.  Thoughts?  Also, MacCore or CoreAudio?  :)

@dholl Thanks a lot for the changes!
The MacCore vs. CoreAudio usage is indeed inconsistent. Here I would go for CoreAudio, because that's the actual name of the thing. Thanks for changing it!

@dholl Thanks a lot for the changes!
The MacCore vs. CoreAudio usage is indeed inconsistent. Here I would go for CoreAudio, because that's the actual name of the thing. Thanks for changing it!

@mgeier So, next round of edits?  I like the short, concise nature that the code is being distilled down to, error checks and all.  :)

So I don't see a get_channel_name function any more. Isn't this one of the main things you wanted to implement? It would seem natural to me to make this a classmethod or staticmethod as part of the CoreAudioSettings class.

@tgarc AFAIU, @dholl will make further suggestions in new PRs, see https://github.com/spatialaudio/python-sounddevice/pull/83#issuecomment-295850772.
I think it's good to get this CoreAudioSettings thing out of the way and then concentrate on a new and improved API for platform-specifics.

@tgarc Yep!  I dropped get_channel_name from this PR, because I started working on a larger PR that I won't bother submitting until this one is done.
Prelude:
I created a branch in my repo fork called "hostapis", that I'm eager to start discussing.  It incorporates the name= parameter to query_hostapis(), as well as an alternative idea could replace query_hostapis() completely, if folks like it.  Of course this branch's code has a bunch of style issues..., but at first, I'm looking forward to at least start exploring this alternative access strategy (simply called hostapis), or brainstorming upon some hybrid between query_hostapis and hostapis.  The underlying implementation isn't pretty (namedtuple's galore!), but I hope that an open code-sharing will ameliorate any implementation ugliness.
Example usage:
import sounddevice as sd
# sd.hostapis is a namedtuple, so it supports
# the usual variety of access mechanisms:
# sd.hostapis[ndx].name
# sd.hostapis.coreaudio.name
# getattr(sd.hostapis, 'coreaudio').name

for hostapi in sd.hostapis:
    print hostapi.name # prints "Core Audio" - may this change with future i8n efforts in PortAudio?
    print hostapi.devices # usual list of devices...
    print hostapi.default_input_device
    print hostapi.default_output_device
    print hostapi.apiname # prints "coreaudio" - this will be constant regardless of locale.
    print repr(hostapi.api)
    if hasattr(hostapi.api, 'get_input_channel_name'):
        # Both 'coreaudio' and 'asio' support api.get_input_channel_name(device, chan)
        for device in hostapi.devices:
            num_ch = sd.query_devices(device)['max_input_channels']
            for ch in range(num_ch):
                ch_name = hostapi.api.get_input_channel_name(device, ch)
                print('device {} ch {} input name {!r}'.format(device, ch, ch_name))
    if hasattr(hostapi.api, 'get_output_channel_name'):
        # Both 'coreaudio' and 'asio' support api.get_output_channel_name(device, chan)
        for device in hostapi.devices:
            num_ch = sd.query_devices(device)['max_output_channels']
            for ch in range(num_ch):
                ch_name = hostapi.api.get_output_channel_name(device, ch)
                print('device {} ch {} output name {!r}'.format(device, ch, ch_name))

    # This is another named tuple, containing the functions and
    # CoreAudioSettings class, so we might move *Settings classes
    # out of the global namespace: AsioSettings, CoreAudioSettings,
    # WasapiSettings.

@mgeier As requested, here's a list of host-API-specific features that I think can be handled, and have created an initial draft in my hostapis branch:
asio:
    .api.Settings (AsioSettings)
    .api.get_available_buffer_sizes
    .api.get_input_channel_name
    .api.get_output_channel_name
    .api.set_stream_sample_rate

coreaudio:
    .api.Settings (CoreAudioSettings)
    .api.get_input_channel_name
    .api.get_output_channel_name
    .api.get_buffer_size_range

alsa:
    .api.enable_realtime_scheduling
    .api.get_stream_input_card
    .api.get_stream_output_card
    .api.set_num_periods
    .api.set_retries_busy

wasapi:
    .api.Settings (WasapiSettings)
    .api.get_frames_per_host_buffer

Note: In my branch, these .api.* names are presently available via both
chan_name = query_hostapis(name="Core Audio")['api'].get_input_channel_name(device, channel)
chan_name = hostapis.coreaudio.api.get_input_channel_name(device, channel)

At the moment, I've only tested Core Audio, and I'd love for other folks to test the others if they already have a hardware setup.  I'm open to handing out contributor access to this branch in my fork to expedite the work flow.
okay, now back to the current PR to finish CoreAudioSettings...  :)

@dholl Okay, I'm looking forward to discussing this!

Squashed into 1 commit!  I also shortened the example text a bit more:
        This example assumes a device having 6 input and 6 output
        channels.  Input is from the second and fourth channels, and
        output is to the device's third and fifth channels.

@mgeier

But there is still one question open: does this stuff actually work?

I hope so.  ;)

I tried the channel_map a bit, and the output mapping seems to work. I assume the input works, too, but I didn't fully check this (it gave me one channel, but I didn't check if it was the one I asked for).

I tested with 2 mic's plugged into different ports on a UFX+, and it does let me switch.

How can I check if change_device_parameters does anything?

When I use it, it changes default_samplerate as returned from query_devices().  Here's a device list with my laptop's built-in hardware and my own test application:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      48000.0       |         2          |    0.012104166666666666    |   0.0027708333333333335   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      48000.0       |         0          |            0.1             |           0.01            |          2          |    0.020020833333333335     |         0.0106875

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

Now, run at 96 kHz without change_device_parameters.  Here I'm inputting 1 channel from the microphone, and outputting to the right speaker:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 96000
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.10139583333333334, 0.03536458333333333)
time =<PHONE_NUMBER>9327105
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 96000.0
samplesize = (4, 4)

And list devices again:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      48000.0       |         2          |    0.012104166666666666    |   0.0027708333333333335   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      48000.0       |         0          |            0.1             |           0.01            |          2          |    0.020020833333333335     |         0.0106875

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

Now we'll do the same run again, but this time, my --tweakdev 1 enables change_device_parameters:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 --tweakdev 1 -s 96000
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.04921875, 0.019135416666666665)
time =<PHONE_NUMBER>21312
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 96000.0
samplesize = (4, 4)

And when we re-run query_devices(), we see that default_samplerate is now 96 kHz:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      96000.0       |         2          |    0.006552083333333333    |   0.0018854166666666668   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      96000.0       |         0          |            0.1             |           0.01            |          2          |    0.013802083333333333     |    0.009135416666666667

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

I also notice subtle pops from the speakers when I'm changing the sampling rate with change_device_parameters, but if I specify the same sampling rate, using change_device_parameters does not introduce any pops on my laptop.   (late 2016 MacBook Pro)

How can I provoke a failure with fail_if_conversion_required?

Trying 8 kHz without change_device_parameters works fine, with a subtle change in sound when just rubbing my finger over the mic location on my laptop:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.05025, 0.108875)
time =<PHONE_NUMBER>70847
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

Note the default sample rate is still 96000:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      96000.0       |         2          |    0.006552083333333333    |   0.0018854166666666668   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      96000.0       |         0          |            0.1             |           0.01            |          2          |    0.013802083333333333     |    0.009135416666666667

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

(Note: Core Audio returns empty strings for channel names of builtin inputs and outputs.  But on a UFX+, I do get useful strings such as 'Mic 9' and whatnot.)
So now. with change_device_parameters, the same 8 kHz request produces a couple error messages, but playback continues as expected:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 --tweakdev 1 -s 8000
||PaMacCore (AUHAL)|| Error on line 406: err=''!dat'', msg=Audio Device: Unsupported Format
||PaMacCore (AUHAL)|| Error on line 406: err=''!dat'', msg=Audio Device: Unsupported Format
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>6854704
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

But now the default_sample_rate is 44.1 kHz:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      44100.0       |         2          |    0.01310657596371882     |   0.0029478458049886623   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      44100.0       |         0          |            0.1             |           0.01            |          2          |    0.021156462585034015     |    0.010997732426303855

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

So running one last time to test fail_if_conversion_required, my equivalent command line option is --norateconv 1:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 --tweakdev 1 --norateconv 1 -s 8000
||PaMacCore (AUHAL)|| Error on line 406: err=''!dat'', msg=Audio Device: Unsupported Format
Traceback (most recent call last):
  File "./dholl_wire_sounddevice.py", line 302, in <module>
    _main()
  File "./dholl_wire_sounddevice.py", line 280, in _main
    channels=args.channels, callback=callback, clip_off=not args.clip, dither_off=not args.dither) as s:
  File "/Users/dholl/Library/Python/2.7/lib/python/site-packages/sounddevice.py", line 1551, in __init__
    **_remove_self(locals()))
  File "/Users/dholl/Library/Python/2.7/lib/python/site-packages/sounddevice.py", line 1077, in __init__
    'Error opening {0}'.format(self.__class__.__name__))
  File "/Users/dholl/Library/Python/2.7/lib/python/site-packages/sounddevice.py", line 3149, in _check
    raise PortAudioError(msg)
sounddevice.PortAudioError: Error opening RawStream: Invalid sample rate
zsh: exit 1     ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1  1

So that's good that we see an error.
However, running  again without --tweakdev 1 but still with --norateconv 1, we find that no error messages are printed nor is any exception raised:
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 --norateconv 1 -s 8000
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>21728
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

This unintuitive enforcement of fail_if_conversion_required only when using change_device_parameters is consistent with the doc string in CoreAudioSettings.  Specifically, the part stating In combination with the above flag, ...:
        change_device_parameters : bool, optional
            If ``True``, allows PortAudio to change things like the
            device's frame size, which allows for much lower latency,
            but might disrupt the device if other programs are using it,
            even when you are just querying the device.  ``False`` is
            the default.
        fail_if_conversion_required : bool, optional
            In combination with the above flag, ``True`` causes the
            stream opening to fail, unless the exact sample rates are
            supported by the device.

So from a user application standpoint, if it wants fail_if_conversion_required=True, then it must also set change_device_parameters.

I think I'm too lazy to investigate if conversion_quality works, did you check this?
Ha!  Me to...

I wasn't in the mood today for running any spectral analysis such as identifying the phase/magnitude response or intermodulation distortion.  Though, I could conceivable do something with getting a UFX+ to loop back my mac's output to software.
For now, without having a paying contract in place  ;)  I've only run my tool with each of the 5 conversion algorithms, and they each sound too similar to my untrained ears at conversion from 44.1 kHz to 8 kHz.  So, all this verified is that the underlying Port Audio and Core Audio layers are not vomiting.
zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000 --convquality min
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>57744
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000 --convquality low
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>96927
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000 --convquality medium
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>05788
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000 --convquality high
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>18073
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -c 1 --input-chan-map _0 --output-chan-map _1 -s 8000 --convquality max
################################################################################
press Return to quit
################################################################################
cpu_load = 0.0
latency = (0.077, 0.062125)
time =<PHONE_NUMBER>42895
blocksize = 0
channels = (1, 1)
device = (0, 1)
dtype = ('float32', 'float32')
samplerate = 8000.0
samplesize = (4, 4)

zero(ttys002):...Python/sound> ./dholl_wire_sounddevice.py -L
Device list:
ID |         name          |   hostapi    | default_samplerate | max_input_channels | default_high_input_latency | default_low_input_latency | max_output_channels | default_high_output_latency | default_low_output_latency
---+-----------------------+--------------+--------------------+--------------------+----------------------------+---------------------------+---------------------+-----------------------------+---------------------------
 0 | 'Built-in Microphone' | 'Core Audio' |      44100.0       |         2          |    0.01310657596371882     |   0.0029478458049886623   |          0          |             0.1             |            0.01
 1 |   'Built-in Output'   | 'Core Audio' |      44100.0       |         0          |            0.1             |           0.01            |          2          |    0.021156462585034015     |    0.010997732426303855

Channel names for device 0, Built-in Microphone:
        Ch# | Input | Output
        ----+-------+-------
          0 | ''    |
          1 | ''    |

Channel names for device 1, Built-in Output:
        Ch# | Input | Output
        ----+-------+-------
          0 |       | ''
          1 |       | ''

Hmm, looking at my CPU load of coreaudiod, the load doesn't seem to vary much between max, high, medium, low, or min.  All are around 25-27%

Thanks for the detailed writeup!
I couldn't reproduce the change of default samplerate with my quick tests, but I could get the strange error messages and the proper exception as you described.
The different CPU load of different quality settings is probably only visible in extreme cases, I'm going to assume that the selection works. I guess most people will use the default 'max' setting anyway.


Added information about automatic chunking to README

This detail should be called out in the README since it can impact performance.

@jhendersonHDF , why isn't it merged yet?


Update eslint to prefer typescript path aliases

@th3fallen Seems good to me, I didn't realize at first sight that not every import has been rewritten. Let me just double check this for DX with VSCode once I'm back to my machine, I want to make sure it has nice defaults, and then I'll merge this


WIP: #294 - Create conan package recipe

This is a first stab at implementing #294

This is a first stab at implementing https://github.com/nanopb/nanopb/issues/294

Well, I've thought about moving those files myself a few times. But moving them will break a lot of projects that rely on nanopb, for a quite small benefit. So I don't think it is worth moving them.
As for pushing to conan-center, there will have to be some kind of automation for that. Otherwise it'll be just too bothersome to do.

Okay will move those files back to where they were.
We should be able to make Travis CI automatically deploy to conan-center every time you tag a new release. I will look into this.

Is there still work ongoing at this? I tried to build it myself, but it wants python-protobuf installed, which again depends on protoc being installed system-wide. Installing python-protobuf with a hardcoded path to protoc still did not solve this issue.
So what's the status?

Hi, apologies for the late reply. I have't been able to make any more progress on this. Let me spend a half hour and see if I can get the PR up to scratch.

A build recipe for conan is still welcome, but I'm closing off this pull request because it's not mergeable as-is. Especially the file moving is something I'm currently not willing to do.


Add additional query params to the mock executor

This change enables mockist testing against the ExclusiveStartKey
and LastEvaluatedKey parameters.

Add QueryLastEvaluatedKey to MockExecutor
Add ExclusiveStartKey to MockExecutorCall

Rebased in as https://github.com/underarmour/dynago/commit/60be535ccdfba402799050276e68b17df3f46ea9


CatPred shows "Prediction failed"

After running the cell, it is showing "Prediction failed". However, few days back, this was still giving desired results only. Can you please let me know the probable reason for showing such an error?
Note that I run with just default cells.

Hello @msandy1013 ,
Thank you for the interest in our work. The Colab notebook codes are now updated to reflect some of the recent changes we made to the Github repo. The code should now work without any issue. Please do check again.
Best,
Veda.

Hello Veda,
Thank you so much. Now it's working.


FHIRPath CLI #1283

Signed-off-by: Paul Bastide<EMAIL_ADDRESS>

Rebuild depends on PR that fixes the snapshot

Anything we need to do from the release automation side to ensure that both the cli.jar and the normal jar get uploaded?


Update to the Corporate Terms of Service - Summer 2019

We regularly update our policies to reflect the evolution of our products, legal requirements, clarification requests, and user feedback. We post updates to our policies in this repo to get your feedback before they go live.
This time around, we focused on our Corporate Terms of Service and Enterprise Agreement and made a number of changes to improve our customers' experience, including by

streamlining the terms to make them more straightforward and easier to understand, and
aligning the overall structure of these documents and the terms with the diverse set of products we offer and our categories of customers.

This update to the Corporate Terms of Service includes changes to or the addition of the following sections:

"Short Version" summaries
Definitions
Account Terms
Acceptable Use
Content Responsibility; Ownership; License Rights
Private Repositories
API Terms
Advertising on GitHub
Payment
Support
Term; Termination; Suspension
Limited Warranties; Disclaimer
Limitation of Liability
Defense of Claims; Release
Subscription Licenses
Affiliates

The comment period on this PR ends on July 1 at 5 pm PT. We'll go through any comments we receive and carefully consider making further improvements, and then merge the new changes into master to make the new terms effective.

I believe the intent is to merge this into master so I changed the base branch.

As stated in the original post, the comment period ends today. In reviewing the PR with fresh eyes, we added a few more updates.  I've updated the OP to add the additional sections in which we made changes. These terms are effective tomorrow July 2.


Track cursed monkey paw wishes used

Property _monkeyPawWishesUsed starts at 0 and goes up to 5 as you cast wishes.

As it parses on the choice screen, this is likely fine.

Yeah, parsing the Curse is redundant.
Regardless, I updated the test to verify that we successfully parse Cursed by a Monkey.


About the ids

Hello,
Could you please tell me whether there is a rule for game names to convert into the id such as  "F1C11A22FAEE3B82F21B330E1B786A39" is "The Legend of Zelda™ - Breath of the Wild (CHN EUR JPN KOR USA)"?
BTW, the website SwitchBrew has a different length ID number. How did you convert it?

It's somewhat complicated but the code can be found here (sourced from Issue #42).
If you can't get that working you can always edit the gameids.json file directly by adding "screenshot_id": "Game Title Here", to it

Did you mean

the final code F1C11A22FAEE3B82F21B330E1B786A39 is converted from titleIDs according to the algorithm you mentioned.
the titleIDs are fixed and randomly set by Nintendo or Game developers but not converted from just the names.

Sorry forgot to check my email. Basically F1C11A22FAEE3B82F21B330E1B786A39 is the decrypted form of a game's titleID. That algorithm takes the encrypted form of a titleID (for BotW it's 01007EF00011E000) and it spits out the decrypted form (the version that is embedded within the screenshot file). TitleIDs are fixed by Nintendo/Game Developer.


HPA - Typescript - Maximum call stack size exceeded

With the following code HPA got stuck in infinite recursion:
const app = new App();
const chart = new Chart(app, 'test', {namespace: 'test'});
const deployment = new Deployment(chart, 'deployment');
const volumeMounts = [{ volume: Volume.fromEmptyDir(deployment, 'test-volume','test'), path: './test'}];

deployment.addContainer({
  image: 'ubuntu',
  name: 'test',
  volumeMounts,
});

new HorizontalPodAutoscaler(chart, 'HPA', {
  target: deployment,
  maxReplicas: 5,
});
app.synth();

error message:
(node:1258041) UnhandledPromiseRejectionWarning: RangeError: Maximum call stack size exceeded
    at Function.[Symbol.hasInstance] (<anonymous>)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:10:12)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at resolve (/home/<strip>/node_modules/cdk8s/src/_resolve.ts:32:17)
    at emitUnhandledRejectionWarning (internal/process/promises.js:168:15)
    at processPromiseRejections (internal/process/promises.js:247:11)
    at processTicksAndRejections (internal/process/task_queues.js:96:32)

Without volumeMounts it works perfectly.

Taking a look at this. It seems like it might be something in our packaging process. I'm able to reproduce this when using cdk8s+ from NPM but when building & linking cdk8s-plus repo locally it's successful.

Reproduction here: https://github.com/ryparker/cdk8s-hpa-max-call-stack-error
It seems to me like a circular dependency by use of Lazy.any(). I'm still not sure why yarn linking the actual repo doesn't produce the same error.


initial boilerplate commit

Initial boilerplate commit

Its an example under the examples folder.  I figure I will create an example app if anyone wanna see an example. The actual boilerplate SDK is under boilerplate_sdk.  Sorry for the confusion.

Oh ok.  I didn't catch that.  It's also a little confusing because the boilerplate sdk is named example.py.

Yeah, definitely open to ideas on what would be a more fitting naming.

@josh-chou renamed based on what we discussed. b086126


Delete unshared copy of ReaderWriterLockSlim and fix build break

Fixes https://github.com/dotnet/corefx/issues/21585

@kouvel Why are you deleting this? There is no ReaderWriterLockSlim in corefx.
What needs to happen for this is to move it to the shared partition so that we have the exact same code for both CoreCLR and CoreRT.

I see - you are moving it to the shared partition on the CoreCLR side.

Forgot to reference the other PR, updated now

The right workflow to do that is to move stuff to the shared partition on one side, wait for the mirror to propagate the PR, and the append more commits to the PR created by the mirror to fix the build breaks.

What is the correct order to merge these? Share first, then delete local copy?

I see, will do

Cherry picked into https://github.com/dotnet/corert/pull/4018


Missing standard predicate_property/2 predicate

Would it be possible to add the standard predicate_property/2 predicate? Ideally, the following properties would be supported:

built_in
static
dynamic
multifile
meta_predicate(Template)

For sample calls and tests, please check:
https://github.com/LogtalkDotOrg/logtalk3/blob/master/tests/prolog/predicates/predicate_property_2/tests.lgt

Thanks for implementing this key reflection predicate in record time!

This still needs some revision due to meta predicates, given that meta_predicate/1 is not currently defined in Tau Prolog.

Noted. But the meta_predicate(Template) property is also useful for built-in meta-predicates, specially non-standard ones, as it allows an application to query of a predicate is a meta-predicate and act accordingly. E.g. a tool that performs code analysis or a tool that constructs a cross-referencing diagram.


paradoxical behaviour of Excel.close_all

Instead of closing Excel instances, Excel.close_all will open one more instance!
This is always reproducible on my JRuby <IP_ADDRESS> (2.5.3)

Excel.close_all does not work on JRuby yet. Excel.close_all  relies on stepping through all heap objects in ObjectSpace. In Jruby ObjectSpace is disabled. Each_object will only work with Class.


Android: fix ABI triple detection, disable C++ modules flags, and bring back bootstrap script tweaks

This pull redoes the previous tweaks for the old non-CMake bootstrap script. Since the new bootstrap script rebuilds llbuild by using its Package.swift, rather than the prior approach of linking against the llbuild already built by the Swift build-script, I had problems when building llbuild with SPM because of the C++ modules support.
Removing those flags, as for Windows, gets llbuild and SPM built, with some of those BuildPlanTests now failing, as they explicitly look for that flag.
In the process, I discovered that the isAndroid() function I added earlier wasn't working right, as it would only detect androideabi and not android. As the two appear to be equivalent, with LLVM just turning the former into the latter, I had the SPM Triple parser do the same.
I also had to modify llbuild's Package.swift to link in ncurses on Android:
diff --git a/Package.swift b/Package.swift
index 6141342..6a20665 100644
--- a/Package.swift
+++ b/Package.swift
@@ -150,7 +150,7 @@ let package = Package(
             name: "llvmSupport",
             dependencies: ["llvmDemangle"],
             path: "lib/llvm/Support",
-            linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS]))]
+            linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS, .android]))]
         ),
     ],
     cxxLanguageStandard: .cxx14

which then required changing the SPM version where that's supported locally, so llbuild's SPM manifest could use it:
diff --git a/Sources/PackageDescription4/SupportedPlatforms.swift b/Sources/PackageDescription4/SupportedPlatforms.swift
index 06439ebe..8bd41f13 100644
--- a/Sources/PackageDescription4/SupportedPlatforms.swift
+++ b/Sources/PackageDescription4/SupportedPlatforms.swift
@@ -39,7 +39,7 @@ public struct Platform: Encodable {
     public static let windows: Platform = Platform(name: "windows")

     /// The Android platform
-    @available(_PackageDescription, introduced: 5.2)
+    @available(_PackageDescription, introduced: 5.0)
     public static let android: Platform = Platform(name: "android")
 }

Hopefully, that won't be necessary once Swift 5.2 ships though.

@swift-ci smoke test


Project/Tools/C# shows no options

Godot version
v3.4.4.stable.mono.official [419e713a2]
System information
Windows 10, GLES3
Issue description
I followed the tutorial https://gist.github.com/paulloz/30ae499c1fc580a2f3ab9ecebe80d9ba to get code completion for VSCode, and got stuck in step 3.
When I click on "Project", and hover over "Tools", then "C#", no options are showing up. Obviously there shouldn't be an empty menu slot, even if maybe there no longer are these options. Or maybe they still exist, but are not showing up for me.

I was able to reproduce it with a minimal setup, but got a slightly different appearance:

This bug occurs on my desktop PC with Ryzen 5 2600, RTX 3070 and my laptop with Ryzen 7 4700U, integrated GPU; both are running Windows 10.
Steps to reproduce

create a new project
create a new script via the built-in file explorer

use C# as type

click on the menus, and go to Tools/C#
the box is now empty

Minimal reproduction project
This is one of the project, where the issue occurs for me:
TestProject2.zip

Before adding any C# scripts to the test project, the box works fine (or it shows up; didn't test whether it actually works).

Create new project.

Click "Create C# solution".

Close and open project.

Different look of empty lists is probably caused by PopupMenu not updating/recalculating its size after the item is removed. So that's one issue.
Besides that maybe "Create C# solution" should always be listed in there so the list won't ever be empty? It could be disabled in case solution is already created and text could be changed to something like "Create C# solution (already created)" so the user will know why it's disabled.

I followed the tutorial https://gist.github.com/paulloz/30ae499c1fc580a2f3ab9ecebe80d9ba to get code completion for VSCode, and got stuck in step 3.

@AntonioNoack  To make things clear: in that version after adding C# script the C# solution is automatically generated (that's why this option evaporates from the menu). Meaning you're not stuck in step 3 of that tutorial, you're already past step 3.

"To make things clear: in that version after adding C# script the C# solution is automatically generated (that's why this option evaporates from the menu). Meaning you're not stuck in step 3 of that tutorial, you're already past step 3." Oh, thank you :).

Having empty menu is very confusing for the user though. Would it make sense to have it grayed out or have "Refresh C# solution" or something like that instead when you already have the solution? Empty menu looks like it's bugged out.


Setting IsoCountryCode

Trying to set the isocountrycode xml attribute for a CONTACT object through the sdk, but I can't seem to find the function. Am I missing something?

Looks like we never put it in there as a getter/setter.  I know if you set the country to "United States" Intacct will set the ISO code for you to "US".  We can add it if you need it though

What about if I set the IsoCountryCode, will it set the country to the correct country?

What about if I set the IsoCountryCode, will it set the country to the correct country?

Yes
<create>
    <CONTACT>
        <CONTACTNAME>hello</CONTACTNAME>
        <PRINTAS>world</PRINTAS>
        <MAILADDRESS>
            <COUNTRYCODE>US</COUNTRYCODE>
        </MAILADDRESS>
    </CONTACT>
</create>

will result in a contact created with
<CONTACT>
    <RECORDNO>52</RECORDNO>
    <CONTACTNAME>hello</CONTACTNAME>
    <PRINTAS>world</PRINTAS>
    ...
    <MAILADDRESS>
        ...
        <COUNTRY>United States</COUNTRY>
        <COUNTRYCODE>US</COUNTRYCODE>
        ...
    </MAILADDRESS>
    ...
</CONTACT>

Yes, that would be best, as I have Country ISO Codes stored in my database, not their names. Thanks!


Blacklist doesn't work on mod items

I added the flans crossbow and the et futurum requiem crystal to the blacklist, but I can still take them.

here is the config settings
# These items will be unable to be swapped into the offhand.
# Formatting of an item should be: modid:itemname
# These should all be placed on separate lines between the provided '<' and '>'.
S:"Blacklisted items" <
minecraft:iron_sword
flansmod:crossbow410
minecraft:compass
etfuturum:end_crystal
 >

Fixed! Thank you for your report!


How do I keep a QExpansionItem menu expanded when the user navigates to another page?

I am trying to make a blog with justpy through its Quasar interface. Looks great so far except I am having troubles with QExpansionItem. I am using it as shown on the juspy docs and it displays fine.
However, the QExpansionItem does not stay expanded when the user navigates to another page on the website. I want it to stay expanded on the item that the user clicked in the previous page.
I tried to use with default_opened=True and expanded=True as arguments of QExpansionItem but it doesn't change anything. The menu stays collapsed by default.
Someone in another Quasar forum suggested to use :value="$route.matched[0].path == link.link. When I add that argument to QExpansionItem as value="$route.matched[0].path == link.link that expands all the menu items by default. I don't know Javascript, so I have no idea how to alter that code.
Any help?

Not sure this helps, but if you set the value attribute of the QExpansionItem to True, it will render opened. Below is the modified example from the docs:
import justpy as jp

sample_text = """
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem, eius reprehenderit eos corrupti
            commodi magni quaerat ex numquam, dolorum officiis modi facere maiores architecto suscipit iste
            eveniet doloribus ullam aliquid.
"""

def quasar_example():
    wp = jp.QuasarPage()
    d = jp.Div(classes="q-pa-md", style="max-width: 350px", a=wp)
    item_list = jp.QList(classes="rounded-borders", padding=True, bordered=True, a=d)
    for info in [("perm_identity", "Account settings"), ("signal_wifi_off", "Wifi settings"), ("drafts", "Drafts")]:
        expansion_item = jp.QExpansionItem(icon=info[0], label=info[1], a=item_list, header_class='text-purple',
                                           dense=True, dense_toggle=True, expand_separator=True)
        # New Line
        expansion_item.value = True
        card= jp.QCard(a=expansion_item)
        jp.QCardSection(text=sample_text, a=card)

    return wp

jp.justpy(quasar_example)

If this does not help, let me know


Larger view in full screen mode

Size Change: +365 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.3 kB
+80 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+12 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +374 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.3 kB
+83 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+18 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +377 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.3 kB
+82 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+22 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +380 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.4 kB
+91 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+16 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +376 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.4 kB
+89 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+14 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +375 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.3 kB
+87 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+15 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +393 B (0%)
Total Size: 92.1 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.4 kB
+94 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+26 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +404 B (0%)
Total Size: 92.2 kB

Filename
Size
Change

./packages/ui/dist/index.es.js
20.4 kB
+100 B (0%)

./packages/ui/dist/index.min.js
16.1 kB
+31 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/ad/dist/index.es.js
1.88 kB

./packages/ad/dist/index.min.js
1.69 kB

./packages/core/dist/index.es.js
7.29 kB

./packages/core/dist/index.min.js
5.82 kB

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/index.es.js
6.67 kB

./packages/danmaku/dist/index.min.js
5.63 kB

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/dash/dist/index.es.js
2.01 kB

./packages/dash/dist/index.min.js
1.66 kB

./packages/hls/dist/index.d.ts
614 B

./packages/hls/dist/index.es.js
2.13 kB

./packages/hls/dist/index.min.js
1.78 kB

./packages/react/dist/index.d.ts
315 B

./packages/react/dist/index.es.js
1.28 kB

./packages/react/dist/index.min.js
1.22 kB

./packages/torrent/dist/index.d.ts
223 B

./packages/torrent/dist/index.es.js
756 B

./packages/torrent/dist/index.min.js
706 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action

Size Change: +491 B (+1%)
Total Size: 92.2 kB

Filename
Size
Change

./packages/ad/dist/index.es.js
1.89 kB
+5 B (0%)

./packages/ad/dist/index.min.js
1.7 kB
+7 B (0%)

./packages/core/dist/index.es.js
7.3 kB
+6 B (0%)

./packages/core/dist/index.min.js
5.83 kB
+6 B (0%)

./packages/danmaku/dist/index.es.js
6.67 kB
+5 B (0%)

./packages/danmaku/dist/index.min.js
5.63 kB
+5 B (0%)

./packages/dash/dist/index.es.js
2.02 kB
+5 B (0%)

./packages/dash/dist/index.min.js
1.66 kB
+1 B (0%)

./packages/hls/dist/index.es.js
2.14 kB
+6 B (0%)

./packages/hls/dist/index.min.js
1.79 kB
+6 B (0%)

./packages/react/dist/index.es.js
1.28 kB
+5 B (0%)

./packages/react/dist/index.min.js
1.23 kB
+6 B (0%)

./packages/torrent/dist/index.es.js
763 B
+7 B (+1%)

./packages/torrent/dist/index.min.js
712 B
+6 B (+1%)

./packages/ui/dist/index.es.js
20.4 kB
+105 B (+1%)

./packages/ui/dist/index.min.js
16.1 kB
+37 B (0%)

./packages/ui/dist/listeners/index.d.ts
281 B
+109 B (+63%)
🆘

./packages/ui/dist/style.d.ts
225 B
+6 B (+3%)

./packages/ui/dist/listeners/fullscreen.d.ts
158 B
+158 B (new file)
🆕

ℹ View Unchanged

Filename
Size

./packages/ad/dist/index.d.ts
262 B

./packages/core/dist/src/constants.d.ts
349 B

./packages/core/dist/src/event.d.ts
225 B

./packages/core/dist/src/i18n/index.d.ts
224 B

./packages/core/dist/src/index.d.ts
220 B

./packages/core/dist/src/index.umd.d.ts
452 B

./packages/core/dist/src/player.d.ts
942 B

./packages/core/dist/src/types.d.ts
492 B

./packages/core/dist/src/utils/css.d.ts
393 B

./packages/core/dist/src/utils/dom.d.ts
435 B

./packages/core/dist/src/utils/hash.d.ts
122 B

./packages/core/dist/src/utils/index.d.ts
158 B

./packages/core/dist/src/utils/platform.d.ts
127 B

./packages/danmaku/dist/danmaku-parse.d.ts
196 B

./packages/danmaku/dist/danmaku.d.ts
652 B

./packages/danmaku/dist/danmaku.worker.d.ts
75 B

./packages/danmaku/dist/index.d.ts
167 B

./packages/danmaku/dist/top.d.ts
284 B

./packages/danmaku/dist/types.d.ts
533 B

./packages/dash/dist/index.d.ts
299 B

./packages/hls/dist/index.d.ts
614 B

./packages/react/dist/index.d.ts
315 B

./packages/torrent/dist/index.d.ts
223 B

./packages/ui/dist/components/ControllerBar.d.ts
189 B

./packages/ui/dist/components/ControllerBottom.d.ts
188 B

./packages/ui/dist/components/ControllerBottom.style.d.ts
139 B

./packages/ui/dist/components/CoverButton.d.ts
157 B

./packages/ui/dist/components/Error.d.ts
182 B

./packages/ui/dist/components/highlight.d.ts
204 B

./packages/ui/dist/components/Loading.d.ts
156 B

./packages/ui/dist/components/Loading.style.d.ts
105 B

./packages/ui/dist/components/Mask.d.ts
184 B

./packages/ui/dist/components/Menubar.d.ts
190 B

./packages/ui/dist/components/Notice.d.ts
157 B

./packages/ui/dist/components/Progress.d.ts
182 B

./packages/ui/dist/components/Progress.style.d.ts
136 B

./packages/ui/dist/components/Setting.d.ts
292 B

./packages/ui/dist/components/Setting.style.d.ts
189 B

./packages/ui/dist/components/Subtitle.d.ts
180 B

./packages/ui/dist/components/Subtitle.utils.d.ts
152 B

./packages/ui/dist/components/thumbnail.d.ts
250 B

./packages/ui/dist/components/VolumeBar.d.ts
156 B

./packages/ui/dist/components/VolumeBar.style.d.ts
140 B

./packages/ui/dist/components/vtt-thumbnails.d.ts
257 B

./packages/ui/dist/functions/hotkey.d.ts
141 B

./packages/ui/dist/functions/icons.d.ts
408 B

./packages/ui/dist/functions/index.d.ts
140 B

./packages/ui/dist/functions/speed.d.ts
174 B

./packages/ui/dist/index.d.ts
164 B

./packages/ui/dist/listeners/focus.d.ts
172 B

./packages/ui/dist/listeners/init.d.ts
164 B

./packages/ui/dist/listeners/loading.d.ts
161 B

./packages/ui/dist/listeners/playing.d.ts
161 B

./packages/ui/dist/types.d.ts
824 B

./packages/ui/dist/utils.d.ts
463 B

compressed-size-action


playable object load with bunle in iOS error

PlayableAsset returned a null Playable on Instantiate
Zenject.DiContainer:InstantiatePrefabForComponentExplicit(Type, Object, InjectArgs, GameObjectCreationParameters)
Zenject.DiContainer:InstantiatePrefabForComponent(Object)
Zenject.c__Iterator0:MoveNext()
Zenject.IProviderExtensions:GetAllInstances(IProvider, InjectContext, List1) Zenject.IProviderExtensions:GetInstance(IProvider, InjectContext, List1)
Zenject.PlaceholderFactory1:CreateInternal(List1)
zenject 5.40 ，unity 2017.2f3

Please provide more information, it's very unclear what problem you're having

i make a bundle with a playeable director component in the prefab,then use DiContainer to create root component,the playable asset under the root gameobject can't be instatiate correctly,this only happened in iOS platform,android perform normally.

this is new feature of timeline within unity 2017.

PlayableAssets under *.playable are all lost after packed into asset bundle.
All external assets work.
Used 2017.1.0f3


Feature/2022 05/collapsing in dopesheet

Add a feature for collapsing rows and compound props in the "Sequence Editor".
https://user-images.githubusercontent.com/2925395/168878519-9234ff42-3005-4406-8a90-b83083eb743c.mp4

Note: just noticed that when shift+dragging to select, the keyframe bounding box is offset to the left. This is a problem(?) on main.


fix: Selected option not initially set in FluentSelect only in version 4.8.0

🐛 Bug Report

💻 Repro or Code Sample
I have a FluentSelect component on my page where the initial selected option is set to null despite the property being used as the bind-Value property of the FluentSelect component and passing the Items property where I have defined one options as selected. The issues occurred after updating the nugget package from version 4.7.2 to version 4.8.0.
<FluentSelect Label="Language:" Items="@languages" OptionText="@(i => i.Text)" OptionValue="@(i => i.Value)" OptionSelected="@(i => i.Selected)" @bind-Value="@language" TOption="Option<string>" />
...
private string language;
private static List<Option<string>> languages = new()
{
    { new Option<string> { Value = "DE", Text = "German" } },
    { new Option<string> { Value = "EN", Text = "English", Selected = true }},
};

🤔 Expected Behavior
The bind value should be populated without me having to change the dropdown value. (only setting the value other than initial works)
😯 Current Behavior
Component itself shows that value is selected but language is null at the moment of use.
💁 Possible Solution

🔦 Context
The user should not be forced to deselect and the select the option so that the property is populated.
🌍 Your Environment

OS & Device: Windows 11 PC
Browser  Microsoft Edge latest
.NET version 8.0.6  and Fluent UI Blazor library Version 4.8.0

It can be that this behavior has changed between previous version and v4.8. We overhauled the list components to inherit from FluentinputBase
What has not changed is how this situation should be implemented. When you want to bind to the Value, you should use the OptionValue to determine if an item is selected. When you bind to SelectedOption, you should use the OptionSelected to determine if an option is selected. See https://www.fluentui-blazor.net/Select#default for the 'value variant'. See below for the 'SelectedOption variant'
<FluentSelect Label="Language:"
              Items="@languages"
              OptionText="@(i => i.Text)"
              OptionValue="@(i => i.Value)"
              OptionSelected="@(i => i.Selected)"
              @bind-SelectedOption="@language" TOption="Option<string>" />

Selected language: @language?.Text

@code {
    private Option<string?> language;

    private static List<Option<string>> languages = new()
{
    { new Option<string> { Value = "DE", Text = "German" } },
    { new Option<string> { Value = "EN", Text = "English", Selected = true }},
};
}

Your code was using a mix of both options

Thank you for clarification, it works after modification.


feat(p6-barrier): adds link to Ops

CDK Construct Custom Resource which will poll until an
AWS Lambda Function isReady returns true and it is ideal
for running code AFTER an RDS or EKS is ready.

It is a cool concept you are trying to build here. However I'm confused with the implementation and therefore hesitant to include the link to the list.
Barrier itself it implemented by dependencies on SSM parameter and CFN ensures the correct order of creation. I do not understand the current implementation of a custom resource - it seems that you invoke provided lambda asynchronously and do not check the result it returns. From my reading of the code, lambda function does not have any effect on barrier behavior.
Am I missing something here?

It is a cool concept you are trying to build here. However I'm confused with the implementation and therefore hesitant to include the link to the list.
Barrier itself it implemented by dependencies on SSM parameter and CFN ensures the correct order of creation. I do not understand the current implementation of a custom resource - it seems that you invoke provided lambda asynchronously and do not check the result it returns. From my reading of the code, lambda function does not have any effect on barrier behavior.
Am I missing something here?

Going to close for now as there is no activity on the ticket. Feel free to reopen with additional comments.


How to change background color of Tree

I would like to change the background color of the Tree. Can I set a different color instead of black? Thanks.

Seems, a similar issue has already been created, but the solution is not available.

do you try change style?
style = {
tree: {
                base: {
                    listStyle: 'none',
                    backgroundColor: 'red',
                    margin: 0,
                    padding: 0,
                    color: '#9DA5AB',
                    fontFamily: 'lucida grande ,tahoma,verdana,arial,sans-serif',
                    fontSize: '14px'
                },
                node: {
                    base: {
                        position: 'relative'
                    },
                    link: {
                        cursor: 'pointer',
                        position: 'relative',
                        padding: '0px 5px',
                        display: 'block'
                    },
                    activeLink: {
                        background: '#31363F'
                    },
                    toggle: {
                        base: {
                            position: 'relative',
                            display: 'inline-block',
                            verticalAlign: 'top',
                            marginLeft: '-5px',
                            height: '24px',
                            width: '24px'
                        },
                        wrapper: {
                            position: 'absolute',
                            top: '50%',
                            left: '50%',
                            margin: '-7px 0 0 -7px',
                            height: '14px'
                        },
                        height: 14,
                        width: 14,
                        arrow: {
                            fill: '#9DA5AB',
                            strokeWidth: 0
                        }
                    },
                    header: {
                        base: {
                            display: 'inline-block',
                            verticalAlign: 'top',
                            color: '#9DA5AB'
                        },
                        connector: {
                            width: '2px',
                            height: '12px',
                            borderLeft: 'solid 2px black',
                            borderBottom: 'solid 2px black',
                            position: 'absolute',
                            top: '0px',
                            left: '-21px'
                        },
                        title: {
                            lineHeight: '24px',
                            verticalAlign: 'middle'
                        }
                    },
                    subtree: {
                        listStyle: 'none',
                        paddingLeft: '19px'
                    },
                    loading: {
                        color: '#E2C089'
                    }
                }
            }
}
<Treebeard
                    style={this.props.style}
                    animations={false}
                    data={stateData}
                    decorators={{...decorators, Header}}
                    onToggle={(node, toggled) => this.onToggle(node, toggled)}
                />

@VMahipalReddy

Thanks a lot @maximilianoforlenza . It works +1:

Thanks a lot @maximilianoforlenza . It works :+1:

This doesn't appear to be documented at all.  Perhaps you should make mention of this object structure in the README.md.
I thought it was broken and was going to re-implement a tree from scratch just because of how difficult it was to style it, until I saw this post.

@jzombie Do you like to send a PR?


Fix #4759: Drop Scala 2.11 support

This also closes #4758 as it is a 2.11 only issue.

I think trailing commas are still blocked by 2.12.1. but I think it's fair to drop 2.12.1 to get them (we already don't support 2.12.0).

Two more things that can be removed, I think:

Some of the stuff in compiler/.../CompatComponent.scala (best to locally test with 2.12.1 while removing stuff from there)
Jenkins entries with -Xexperimental: they were only used to test the 2.11 SAM support.

Seems like we can also remove impl class & default method support? (I have added commits to that effect, let's see what Ci says).